From 828e38a8b3cf18f08dbc62e08db85963c2454360 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 15 Nov 2022 17:32:04 +0100 Subject: [PATCH 01/50] far calls --- gen/KickCLexer.interp | 487 +++++ gen/KickCLexer.java | 1596 +++++++++++++++++ gen/KickCLexer.tokens | 225 +++ .../dk/camelot64/kickc/parser/KickCLexer.g4 | 1 + .../dk/camelot64/kickc/parser/KickCParser.g4 | 1 + .../mos6502-common/call_far_cx16_entry.asm | 4 + .../mos6502-common/call_far_cx16_exit.asm | 0 .../java/dk/camelot64/kickc/Compiler.java | 1 + .../kickc/fragment/AsmFragmentInstance.java | 9 +- .../AsmFragmentInstanceSpecBuilder.java | 35 + .../kickc/fragment/AsmFragmentTemplate.java | 1 + .../signature/AsmFragmentSignature.java | 28 + .../dk/camelot64/kickc/model/Directive.java | 12 + .../kickc/model/statements/StatementCall.java | 8 + .../kickc/model/symbols/Procedure.java | 26 + .../Pass0GenerateStatementSequence.java | 14 + .../kickc/passes/Pass1ProcedureFar.java | 71 + .../kickc/passes/Pass4CodeGeneration.java | 17 +- .../procedure-callingconvention-phi-far-0.c | 11 + .../procedure-callingconvention-stack-far-0.c | 11 + 20 files changed, 2554 insertions(+), 4 deletions(-) create mode 100644 gen/KickCLexer.interp create mode 100644 gen/KickCLexer.java create mode 100644 gen/KickCLexer.tokens create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_entry.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_exit.asm create mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java create mode 100644 src/test/kc/procedure-callingconvention-phi-far-0.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-0.c diff --git a/gen/KickCLexer.interp b/gen/KickCLexer.interp new file mode 100644 index 000000000..c67534aef --- /dev/null +++ b/gen/KickCLexer.interp @@ -0,0 +1,487 @@ +token literal names: +null +null +null +null +null +null +null +null +';' +null +null +'..' +'...' +'?' +null +'->' +null +null +null +null +'%' +'++' +'--' +'&' +'~' +'^' +'|' +null +null +'==' +'!=' +null +'<=' +'>=' +null +'&&' +'||' +'=' +null +'typedef' +'const' +'extern' +'__export' +'__align' +'inline' +'volatile' +'static' +'__interrupt' +'register' +'__zp_reserve' +'__address' +'__zp' +'__mem' +'__far' +'__ssa' +'__ma' +'__intrinsic' +null +'if' +'else' +'while' +'do' +'for' +'switch' +'return' +'break' +'continue' +'goto' +'asm' +'default' +'case' +'struct' +'union' +'enum' +'sizeof' +'typeid' +'defined' +'kickasm' +'!' +null +null +null +'#import' +'#include' +'#pragma' +'#define' +null +'#undef' +'#ifdef' +'#ifndef' +'#if' +'#elif' +'#else' +'#endif' +'#error' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'.byte' +null +'#' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +TYPEDEFNAME +CURLY_BEGIN +CURLY_END +BRACKET_BEGIN +BRACKET_END +PAR_BEGIN +PAR_END +SEMICOLON +COLON +COMMA +RANGE +PARAM_LIST +CONDITION +DOT +ARROW +PLUS +MINUS +ASTERISK +DIVIDE +MODULO +INC +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 +TYPEDEF +CONST +EXTERN +EXPORT +ALIGN +INLINE +VOLATILE +STATIC +INTERRUPT +REGISTER +LOCAL_RESERVE +ADDRESS +ADDRESS_ZEROPAGE +ADDRESS_MAINMEM +FAR +FORM_SSA +FORM_MA +INTRINSIC +CALLINGCONVENTION +IF +ELSE +WHILE +DO +FOR +SWITCH +RETURN +BREAK +CONTINUE +GOTO +ASM +DEFAULT +CASE +STRUCT +UNION +ENUM +SIZEOF +TYPEID +DEFINED +KICKASM +LOGIC_NOT +SIMPLETYPE +BOOLEAN +KICKASM_BODY +IMPORT +INCLUDE +PRAGMA +DEFINE +DEFINE_CONTINUE +UNDEF +IFDEF +IFNDEF +IFIF +ELIF +IFELSE +ENDIF +ERROR +TOKEN_STRINGIZE +TOKEN_MERGE +NUMBER +NUMFLOAT +BINFLOAT +DECFLOAT +HEXFLOAT +NUMINT +BININTEGER +DECINTEGER +HEXINTEGER +NAME +STRING +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 +ASM_NUMFLOAT +ASM_BINFLOAT +ASM_DECFLOAT +ASM_HEXFLOAT +ASM_NUMINT +ASM_BININTEGER +ASM_DECINTEGER +ASM_HEXINTEGER +ASM_CHAR +ASM_MULTI_REL +ASM_MULTI_NAME +ASM_NAME +ASM_TAG +ASM_WS +ASM_COMMENT_LINE +ASM_COMMENT_BLOCK +IMPORT_SYSTEMFILE +IMPORT_LOCALFILE +IMPORT_WS +IMPORT_COMMENT_LINE +IMPORT_COMMENT_BLOCK + +rule names: +CURLY_BEGIN +CURLY_END +BRACKET_BEGIN +BRACKET_END +PAR_BEGIN +PAR_END +SEMICOLON +COLON +COMMA +RANGE +PARAM_LIST +CONDITION +DOT +ARROW +PLUS +MINUS +ASTERISK +DIVIDE +MODULO +INC +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 +TYPEDEF +CONST +EXTERN +EXPORT +ALIGN +INLINE +VOLATILE +STATIC +INTERRUPT +REGISTER +LOCAL_RESERVE +ADDRESS +ADDRESS_ZEROPAGE +ADDRESS_MAINMEM +FAR +FORM_SSA +FORM_MA +INTRINSIC +CALLINGCONVENTION +IF +ELSE +WHILE +DO +FOR +SWITCH +RETURN +BREAK +CONTINUE +GOTO +ASM +DEFAULT +CASE +STRUCT +UNION +ENUM +SIZEOF +TYPEID +DEFINED +KICKASM +LOGIC_NOT +SIMPLETYPE +BOOLEAN +KICKASM_BODY +IMPORT +INCLUDE +PRAGMA +DEFINE +DEFINE_CONTINUE +UNDEF +IFDEF +IFNDEF +IFIF +ELIF +IFELSE +ENDIF +ERROR +TOKEN_STRINGIZE +TOKEN_MERGE +NUMBER +NUMFLOAT +BINFLOAT +DECFLOAT +HEXFLOAT +NUMINT +BININTEGER +DECINTEGER +HEXINTEGER +BINDIGIT +DECDIGIT +HEXDIGIT +NAME +NAME_START +NAME_CHAR +STRING +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 +ASM_NUMFLOAT +ASM_BINFLOAT +ASM_DECFLOAT +ASM_HEXFLOAT +ASM_NUMINT +ASM_BININTEGER +ASM_DECINTEGER +ASM_HEXINTEGER +ASM_BINDIGIT +ASM_DECDIGIT +ASM_HEXDIGIT +ASM_CHAR +ASM_MULTI_REL +ASM_MULTI_NAME +ASM_NAME +ASM_NAME_START +ASM_NAME_CHAR +ASM_TAG +ASM_WS +ASM_COMMENT_LINE +ASM_COMMENT_BLOCK +IMPORT_SYSTEMFILE +IMPORT_LOCALFILE +IMPORT_WS +IMPORT_COMMENT_LINE +IMPORT_COMMENT_BLOCK + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE +ASM_MODE +IMPORT_MODE + +atn: +[4, 0, 153, 1974, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 437, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 628, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 805, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 816, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 822, 8, 79, 10, 79, 12, 79, 825, 9, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 872, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 3, 95, 934, 8, 95, 1, 96, 1, 96, 1, 96, 3, 96, 939, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 946, 8, 97, 1, 97, 5, 97, 949, 8, 97, 10, 97, 12, 97, 952, 9, 97, 1, 97, 1, 97, 4, 97, 956, 8, 97, 11, 97, 12, 97, 957, 1, 98, 5, 98, 961, 8, 98, 10, 98, 12, 98, 964, 9, 98, 1, 98, 1, 98, 4, 98, 968, 8, 98, 11, 98, 12, 98, 969, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 977, 8, 99, 1, 99, 5, 99, 980, 8, 99, 10, 99, 12, 99, 983, 9, 99, 1, 99, 1, 99, 4, 99, 987, 8, 99, 11, 99, 12, 99, 988, 1, 100, 1, 100, 1, 100, 3, 100, 994, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 999, 8, 100, 1, 101, 1, 101, 1, 101, 4, 101, 1004, 8, 101, 11, 101, 12, 101, 1005, 1, 101, 1, 101, 4, 101, 1010, 8, 101, 11, 101, 12, 101, 1011, 3, 101, 1014, 8, 101, 1, 102, 4, 102, 1017, 8, 102, 11, 102, 12, 102, 1018, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1026, 8, 103, 1, 103, 4, 103, 1029, 8, 103, 11, 103, 12, 103, 1030, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 5, 107, 1041, 8, 107, 10, 107, 12, 107, 1044, 9, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1056, 8, 110, 10, 110, 12, 110, 1059, 9, 110, 1, 110, 1, 110, 3, 110, 1063, 8, 110, 1, 110, 1, 110, 3, 110, 1067, 8, 110, 3, 110, 1069, 8, 110, 1, 110, 3, 110, 1072, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1086, 8, 111, 1, 111, 3, 111, 1089, 8, 111, 1, 111, 1, 111, 1, 112, 4, 112, 1094, 8, 112, 11, 112, 12, 112, 1095, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1104, 8, 113, 10, 113, 12, 113, 1107, 9, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1115, 8, 114, 10, 114, 12, 114, 1118, 9, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1738, 8, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 3, 135, 1782, 8, 135, 1, 136, 1, 136, 1, 136, 3, 136, 1787, 8, 136, 1, 137, 1, 137, 5, 137, 1791, 8, 137, 10, 137, 12, 137, 1794, 9, 137, 1, 137, 1, 137, 4, 137, 1798, 8, 137, 11, 137, 12, 137, 1799, 1, 138, 5, 138, 1803, 8, 138, 10, 138, 12, 138, 1806, 9, 138, 1, 138, 1, 138, 4, 138, 1810, 8, 138, 11, 138, 12, 138, 1811, 1, 139, 1, 139, 5, 139, 1816, 8, 139, 10, 139, 12, 139, 1819, 9, 139, 1, 139, 1, 139, 4, 139, 1823, 8, 139, 11, 139, 12, 139, 1824, 1, 140, 1, 140, 1, 140, 3, 140, 1830, 8, 140, 1, 141, 1, 141, 4, 141, 1834, 8, 141, 11, 141, 12, 141, 1835, 1, 142, 4, 142, 1839, 8, 142, 11, 142, 12, 142, 1840, 1, 143, 1, 143, 4, 143, 1845, 8, 143, 11, 143, 12, 143, 1846, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 1859, 8, 147, 1, 147, 1, 147, 1, 148, 1, 148, 4, 148, 1865, 8, 148, 11, 148, 12, 148, 1866, 1, 149, 1, 149, 5, 149, 1871, 8, 149, 10, 149, 12, 149, 1874, 9, 149, 1, 150, 1, 150, 5, 150, 1878, 8, 150, 10, 150, 12, 150, 1881, 9, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 154, 4, 154, 1891, 8, 154, 11, 154, 12, 154, 1892, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 5, 155, 1901, 8, 155, 10, 155, 12, 155, 1904, 9, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1912, 8, 156, 10, 156, 12, 156, 1915, 9, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 4, 157, 1924, 8, 157, 11, 157, 12, 157, 1925, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1935, 8, 158, 10, 158, 12, 158, 1938, 9, 158, 1, 158, 1, 158, 1, 158, 1, 159, 4, 159, 1944, 8, 159, 11, 159, 12, 159, 1945, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 1954, 8, 160, 10, 160, 12, 160, 1957, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1965, 8, 161, 10, 161, 12, 161, 1968, 9, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 4, 823, 1116, 1913, 1966, 0, 162, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 0, 213, 0, 215, 0, 217, 106, 219, 0, 221, 0, 223, 107, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 0, 293, 0, 295, 0, 297, 141, 299, 142, 301, 143, 303, 144, 305, 0, 307, 0, 309, 145, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2235, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 1, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 297, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 309, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 2, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 3, 327, 1, 0, 0, 0, 5, 330, 1, 0, 0, 0, 7, 332, 1, 0, 0, 0, 9, 334, 1, 0, 0, 0, 11, 336, 1, 0, 0, 0, 13, 338, 1, 0, 0, 0, 15, 340, 1, 0, 0, 0, 17, 342, 1, 0, 0, 0, 19, 344, 1, 0, 0, 0, 21, 346, 1, 0, 0, 0, 23, 349, 1, 0, 0, 0, 25, 353, 1, 0, 0, 0, 27, 355, 1, 0, 0, 0, 29, 357, 1, 0, 0, 0, 31, 360, 1, 0, 0, 0, 33, 362, 1, 0, 0, 0, 35, 364, 1, 0, 0, 0, 37, 366, 1, 0, 0, 0, 39, 368, 1, 0, 0, 0, 41, 370, 1, 0, 0, 0, 43, 373, 1, 0, 0, 0, 45, 376, 1, 0, 0, 0, 47, 378, 1, 0, 0, 0, 49, 380, 1, 0, 0, 0, 51, 382, 1, 0, 0, 0, 53, 384, 1, 0, 0, 0, 55, 387, 1, 0, 0, 0, 57, 390, 1, 0, 0, 0, 59, 393, 1, 0, 0, 0, 61, 396, 1, 0, 0, 0, 63, 398, 1, 0, 0, 0, 65, 401, 1, 0, 0, 0, 67, 404, 1, 0, 0, 0, 69, 406, 1, 0, 0, 0, 71, 409, 1, 0, 0, 0, 73, 412, 1, 0, 0, 0, 75, 436, 1, 0, 0, 0, 77, 438, 1, 0, 0, 0, 79, 446, 1, 0, 0, 0, 81, 452, 1, 0, 0, 0, 83, 459, 1, 0, 0, 0, 85, 468, 1, 0, 0, 0, 87, 476, 1, 0, 0, 0, 89, 483, 1, 0, 0, 0, 91, 492, 1, 0, 0, 0, 93, 499, 1, 0, 0, 0, 95, 511, 1, 0, 0, 0, 97, 520, 1, 0, 0, 0, 99, 533, 1, 0, 0, 0, 101, 543, 1, 0, 0, 0, 103, 548, 1, 0, 0, 0, 105, 554, 1, 0, 0, 0, 107, 560, 1, 0, 0, 0, 109, 566, 1, 0, 0, 0, 111, 571, 1, 0, 0, 0, 113, 627, 1, 0, 0, 0, 115, 629, 1, 0, 0, 0, 117, 632, 1, 0, 0, 0, 119, 637, 1, 0, 0, 0, 121, 643, 1, 0, 0, 0, 123, 646, 1, 0, 0, 0, 125, 650, 1, 0, 0, 0, 127, 657, 1, 0, 0, 0, 129, 664, 1, 0, 0, 0, 131, 670, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 684, 1, 0, 0, 0, 137, 690, 1, 0, 0, 0, 139, 698, 1, 0, 0, 0, 141, 703, 1, 0, 0, 0, 143, 710, 1, 0, 0, 0, 145, 716, 1, 0, 0, 0, 147, 721, 1, 0, 0, 0, 149, 728, 1, 0, 0, 0, 151, 735, 1, 0, 0, 0, 153, 743, 1, 0, 0, 0, 155, 751, 1, 0, 0, 0, 157, 804, 1, 0, 0, 0, 159, 815, 1, 0, 0, 0, 161, 817, 1, 0, 0, 0, 163, 829, 1, 0, 0, 0, 165, 839, 1, 0, 0, 0, 167, 850, 1, 0, 0, 0, 169, 858, 1, 0, 0, 0, 171, 871, 1, 0, 0, 0, 173, 873, 1, 0, 0, 0, 175, 880, 1, 0, 0, 0, 177, 887, 1, 0, 0, 0, 179, 895, 1, 0, 0, 0, 181, 899, 1, 0, 0, 0, 183, 905, 1, 0, 0, 0, 185, 911, 1, 0, 0, 0, 187, 918, 1, 0, 0, 0, 189, 925, 1, 0, 0, 0, 191, 928, 1, 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 938, 1, 0, 0, 0, 197, 945, 1, 0, 0, 0, 199, 962, 1, 0, 0, 0, 201, 976, 1, 0, 0, 0, 203, 993, 1, 0, 0, 0, 205, 1013, 1, 0, 0, 0, 207, 1016, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1032, 1, 0, 0, 0, 213, 1034, 1, 0, 0, 0, 215, 1036, 1, 0, 0, 0, 217, 1038, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1049, 1, 0, 0, 0, 223, 1051, 1, 0, 0, 0, 225, 1073, 1, 0, 0, 0, 227, 1093, 1, 0, 0, 0, 229, 1099, 1, 0, 0, 0, 231, 1110, 1, 0, 0, 0, 233, 1124, 1, 0, 0, 0, 235, 1737, 1, 0, 0, 0, 237, 1739, 1, 0, 0, 0, 239, 1741, 1, 0, 0, 0, 241, 1743, 1, 0, 0, 0, 243, 1745, 1, 0, 0, 0, 245, 1747, 1, 0, 0, 0, 247, 1749, 1, 0, 0, 0, 249, 1751, 1, 0, 0, 0, 251, 1753, 1, 0, 0, 0, 253, 1755, 1, 0, 0, 0, 255, 1758, 1, 0, 0, 0, 257, 1761, 1, 0, 0, 0, 259, 1763, 1, 0, 0, 0, 261, 1765, 1, 0, 0, 0, 263, 1767, 1, 0, 0, 0, 265, 1769, 1, 0, 0, 0, 267, 1771, 1, 0, 0, 0, 269, 1773, 1, 0, 0, 0, 271, 1776, 1, 0, 0, 0, 273, 1781, 1, 0, 0, 0, 275, 1786, 1, 0, 0, 0, 277, 1788, 1, 0, 0, 0, 279, 1804, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1829, 1, 0, 0, 0, 285, 1831, 1, 0, 0, 0, 287, 1838, 1, 0, 0, 0, 289, 1842, 1, 0, 0, 0, 291, 1848, 1, 0, 0, 0, 293, 1850, 1, 0, 0, 0, 295, 1852, 1, 0, 0, 0, 297, 1854, 1, 0, 0, 0, 299, 1862, 1, 0, 0, 0, 301, 1868, 1, 0, 0, 0, 303, 1875, 1, 0, 0, 0, 305, 1882, 1, 0, 0, 0, 307, 1884, 1, 0, 0, 0, 309, 1886, 1, 0, 0, 0, 311, 1890, 1, 0, 0, 0, 313, 1896, 1, 0, 0, 0, 315, 1907, 1, 0, 0, 0, 317, 1921, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1943, 1, 0, 0, 0, 323, 1949, 1, 0, 0, 0, 325, 1960, 1, 0, 0, 0, 327, 328, 5, 123, 0, 0, 328, 329, 6, 0, 0, 0, 329, 4, 1, 0, 0, 0, 330, 331, 5, 125, 0, 0, 331, 6, 1, 0, 0, 0, 332, 333, 5, 91, 0, 0, 333, 8, 1, 0, 0, 0, 334, 335, 5, 93, 0, 0, 335, 10, 1, 0, 0, 0, 336, 337, 5, 40, 0, 0, 337, 12, 1, 0, 0, 0, 338, 339, 5, 41, 0, 0, 339, 14, 1, 0, 0, 0, 340, 341, 5, 59, 0, 0, 341, 16, 1, 0, 0, 0, 342, 343, 5, 58, 0, 0, 343, 18, 1, 0, 0, 0, 344, 345, 5, 44, 0, 0, 345, 20, 1, 0, 0, 0, 346, 347, 5, 46, 0, 0, 347, 348, 5, 46, 0, 0, 348, 22, 1, 0, 0, 0, 349, 350, 5, 46, 0, 0, 350, 351, 5, 46, 0, 0, 351, 352, 5, 46, 0, 0, 352, 24, 1, 0, 0, 0, 353, 354, 5, 63, 0, 0, 354, 26, 1, 0, 0, 0, 355, 356, 5, 46, 0, 0, 356, 28, 1, 0, 0, 0, 357, 358, 5, 45, 0, 0, 358, 359, 5, 62, 0, 0, 359, 30, 1, 0, 0, 0, 360, 361, 5, 43, 0, 0, 361, 32, 1, 0, 0, 0, 362, 363, 5, 45, 0, 0, 363, 34, 1, 0, 0, 0, 364, 365, 5, 42, 0, 0, 365, 36, 1, 0, 0, 0, 366, 367, 5, 47, 0, 0, 367, 38, 1, 0, 0, 0, 368, 369, 5, 37, 0, 0, 369, 40, 1, 0, 0, 0, 370, 371, 5, 43, 0, 0, 371, 372, 5, 43, 0, 0, 372, 42, 1, 0, 0, 0, 373, 374, 5, 45, 0, 0, 374, 375, 5, 45, 0, 0, 375, 44, 1, 0, 0, 0, 376, 377, 5, 38, 0, 0, 377, 46, 1, 0, 0, 0, 378, 379, 5, 126, 0, 0, 379, 48, 1, 0, 0, 0, 380, 381, 5, 94, 0, 0, 381, 50, 1, 0, 0, 0, 382, 383, 5, 124, 0, 0, 383, 52, 1, 0, 0, 0, 384, 385, 5, 60, 0, 0, 385, 386, 5, 60, 0, 0, 386, 54, 1, 0, 0, 0, 387, 388, 5, 62, 0, 0, 388, 389, 5, 62, 0, 0, 389, 56, 1, 0, 0, 0, 390, 391, 5, 61, 0, 0, 391, 392, 5, 61, 0, 0, 392, 58, 1, 0, 0, 0, 393, 394, 5, 33, 0, 0, 394, 395, 5, 61, 0, 0, 395, 60, 1, 0, 0, 0, 396, 397, 5, 60, 0, 0, 397, 62, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 400, 5, 61, 0, 0, 400, 64, 1, 0, 0, 0, 401, 402, 5, 62, 0, 0, 402, 403, 5, 61, 0, 0, 403, 66, 1, 0, 0, 0, 404, 405, 5, 62, 0, 0, 405, 68, 1, 0, 0, 0, 406, 407, 5, 38, 0, 0, 407, 408, 5, 38, 0, 0, 408, 70, 1, 0, 0, 0, 409, 410, 5, 124, 0, 0, 410, 411, 5, 124, 0, 0, 411, 72, 1, 0, 0, 0, 412, 413, 5, 61, 0, 0, 413, 74, 1, 0, 0, 0, 414, 415, 5, 43, 0, 0, 415, 437, 5, 61, 0, 0, 416, 417, 5, 45, 0, 0, 417, 437, 5, 61, 0, 0, 418, 419, 5, 42, 0, 0, 419, 437, 5, 61, 0, 0, 420, 421, 5, 47, 0, 0, 421, 437, 5, 61, 0, 0, 422, 423, 5, 37, 0, 0, 423, 437, 5, 61, 0, 0, 424, 425, 5, 60, 0, 0, 425, 426, 5, 60, 0, 0, 426, 437, 5, 61, 0, 0, 427, 428, 5, 62, 0, 0, 428, 429, 5, 62, 0, 0, 429, 437, 5, 61, 0, 0, 430, 431, 5, 38, 0, 0, 431, 437, 5, 61, 0, 0, 432, 433, 5, 124, 0, 0, 433, 437, 5, 61, 0, 0, 434, 435, 5, 94, 0, 0, 435, 437, 5, 61, 0, 0, 436, 414, 1, 0, 0, 0, 436, 416, 1, 0, 0, 0, 436, 418, 1, 0, 0, 0, 436, 420, 1, 0, 0, 0, 436, 422, 1, 0, 0, 0, 436, 424, 1, 0, 0, 0, 436, 427, 1, 0, 0, 0, 436, 430, 1, 0, 0, 0, 436, 432, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 76, 1, 0, 0, 0, 438, 439, 5, 116, 0, 0, 439, 440, 5, 121, 0, 0, 440, 441, 5, 112, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 100, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 102, 0, 0, 445, 78, 1, 0, 0, 0, 446, 447, 5, 99, 0, 0, 447, 448, 5, 111, 0, 0, 448, 449, 5, 110, 0, 0, 449, 450, 5, 115, 0, 0, 450, 451, 5, 116, 0, 0, 451, 80, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 5, 120, 0, 0, 454, 455, 5, 116, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, 114, 0, 0, 457, 458, 5, 110, 0, 0, 458, 82, 1, 0, 0, 0, 459, 460, 5, 95, 0, 0, 460, 461, 5, 95, 0, 0, 461, 462, 5, 101, 0, 0, 462, 463, 5, 120, 0, 0, 463, 464, 5, 112, 0, 0, 464, 465, 5, 111, 0, 0, 465, 466, 5, 114, 0, 0, 466, 467, 5, 116, 0, 0, 467, 84, 1, 0, 0, 0, 468, 469, 5, 95, 0, 0, 469, 470, 5, 95, 0, 0, 470, 471, 5, 97, 0, 0, 471, 472, 5, 108, 0, 0, 472, 473, 5, 105, 0, 0, 473, 474, 5, 103, 0, 0, 474, 475, 5, 110, 0, 0, 475, 86, 1, 0, 0, 0, 476, 477, 5, 105, 0, 0, 477, 478, 5, 110, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, 5, 105, 0, 0, 480, 481, 5, 110, 0, 0, 481, 482, 5, 101, 0, 0, 482, 88, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 485, 5, 111, 0, 0, 485, 486, 5, 108, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 116, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 108, 0, 0, 490, 491, 5, 101, 0, 0, 491, 90, 1, 0, 0, 0, 492, 493, 5, 115, 0, 0, 493, 494, 5, 116, 0, 0, 494, 495, 5, 97, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 105, 0, 0, 497, 498, 5, 99, 0, 0, 498, 92, 1, 0, 0, 0, 499, 500, 5, 95, 0, 0, 500, 501, 5, 95, 0, 0, 501, 502, 5, 105, 0, 0, 502, 503, 5, 110, 0, 0, 503, 504, 5, 116, 0, 0, 504, 505, 5, 101, 0, 0, 505, 506, 5, 114, 0, 0, 506, 507, 5, 114, 0, 0, 507, 508, 5, 117, 0, 0, 508, 509, 5, 112, 0, 0, 509, 510, 5, 116, 0, 0, 510, 94, 1, 0, 0, 0, 511, 512, 5, 114, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 103, 0, 0, 514, 515, 5, 105, 0, 0, 515, 516, 5, 115, 0, 0, 516, 517, 5, 116, 0, 0, 517, 518, 5, 101, 0, 0, 518, 519, 5, 114, 0, 0, 519, 96, 1, 0, 0, 0, 520, 521, 5, 95, 0, 0, 521, 522, 5, 95, 0, 0, 522, 523, 5, 122, 0, 0, 523, 524, 5, 112, 0, 0, 524, 525, 5, 95, 0, 0, 525, 526, 5, 114, 0, 0, 526, 527, 5, 101, 0, 0, 527, 528, 5, 115, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 114, 0, 0, 530, 531, 5, 118, 0, 0, 531, 532, 5, 101, 0, 0, 532, 98, 1, 0, 0, 0, 533, 534, 5, 95, 0, 0, 534, 535, 5, 95, 0, 0, 535, 536, 5, 97, 0, 0, 536, 537, 5, 100, 0, 0, 537, 538, 5, 100, 0, 0, 538, 539, 5, 114, 0, 0, 539, 540, 5, 101, 0, 0, 540, 541, 5, 115, 0, 0, 541, 542, 5, 115, 0, 0, 542, 100, 1, 0, 0, 0, 543, 544, 5, 95, 0, 0, 544, 545, 5, 95, 0, 0, 545, 546, 5, 122, 0, 0, 546, 547, 5, 112, 0, 0, 547, 102, 1, 0, 0, 0, 548, 549, 5, 95, 0, 0, 549, 550, 5, 95, 0, 0, 550, 551, 5, 109, 0, 0, 551, 552, 5, 101, 0, 0, 552, 553, 5, 109, 0, 0, 553, 104, 1, 0, 0, 0, 554, 555, 5, 95, 0, 0, 555, 556, 5, 95, 0, 0, 556, 557, 5, 102, 0, 0, 557, 558, 5, 97, 0, 0, 558, 559, 5, 114, 0, 0, 559, 106, 1, 0, 0, 0, 560, 561, 5, 95, 0, 0, 561, 562, 5, 95, 0, 0, 562, 563, 5, 115, 0, 0, 563, 564, 5, 115, 0, 0, 564, 565, 5, 97, 0, 0, 565, 108, 1, 0, 0, 0, 566, 567, 5, 95, 0, 0, 567, 568, 5, 95, 0, 0, 568, 569, 5, 109, 0, 0, 569, 570, 5, 97, 0, 0, 570, 110, 1, 0, 0, 0, 571, 572, 5, 95, 0, 0, 572, 573, 5, 95, 0, 0, 573, 574, 5, 105, 0, 0, 574, 575, 5, 110, 0, 0, 575, 576, 5, 116, 0, 0, 576, 577, 5, 114, 0, 0, 577, 578, 5, 105, 0, 0, 578, 579, 5, 110, 0, 0, 579, 580, 5, 115, 0, 0, 580, 581, 5, 105, 0, 0, 581, 582, 5, 99, 0, 0, 582, 112, 1, 0, 0, 0, 583, 584, 5, 95, 0, 0, 584, 585, 5, 95, 0, 0, 585, 586, 5, 115, 0, 0, 586, 587, 5, 116, 0, 0, 587, 588, 5, 97, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 107, 0, 0, 590, 591, 5, 99, 0, 0, 591, 592, 5, 97, 0, 0, 592, 593, 5, 108, 0, 0, 593, 628, 5, 108, 0, 0, 594, 595, 5, 95, 0, 0, 595, 596, 5, 95, 0, 0, 596, 597, 5, 112, 0, 0, 597, 598, 5, 104, 0, 0, 598, 599, 5, 105, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 628, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 118, 0, 0, 606, 607, 5, 97, 0, 0, 607, 608, 5, 114, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 628, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 105, 0, 0, 615, 616, 5, 110, 0, 0, 616, 617, 5, 116, 0, 0, 617, 618, 5, 114, 0, 0, 618, 619, 5, 105, 0, 0, 619, 620, 5, 110, 0, 0, 620, 621, 5, 115, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 97, 0, 0, 625, 626, 5, 108, 0, 0, 626, 628, 5, 108, 0, 0, 627, 583, 1, 0, 0, 0, 627, 594, 1, 0, 0, 0, 627, 603, 1, 0, 0, 0, 627, 612, 1, 0, 0, 0, 628, 114, 1, 0, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 102, 0, 0, 631, 116, 1, 0, 0, 0, 632, 633, 5, 101, 0, 0, 633, 634, 5, 108, 0, 0, 634, 635, 5, 115, 0, 0, 635, 636, 5, 101, 0, 0, 636, 118, 1, 0, 0, 0, 637, 638, 5, 119, 0, 0, 638, 639, 5, 104, 0, 0, 639, 640, 5, 105, 0, 0, 640, 641, 5, 108, 0, 0, 641, 642, 5, 101, 0, 0, 642, 120, 1, 0, 0, 0, 643, 644, 5, 100, 0, 0, 644, 645, 5, 111, 0, 0, 645, 122, 1, 0, 0, 0, 646, 647, 5, 102, 0, 0, 647, 648, 5, 111, 0, 0, 648, 649, 5, 114, 0, 0, 649, 124, 1, 0, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 119, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 116, 0, 0, 654, 655, 5, 99, 0, 0, 655, 656, 5, 104, 0, 0, 656, 126, 1, 0, 0, 0, 657, 658, 5, 114, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 116, 0, 0, 660, 661, 5, 117, 0, 0, 661, 662, 5, 114, 0, 0, 662, 663, 5, 110, 0, 0, 663, 128, 1, 0, 0, 0, 664, 665, 5, 98, 0, 0, 665, 666, 5, 114, 0, 0, 666, 667, 5, 101, 0, 0, 667, 668, 5, 97, 0, 0, 668, 669, 5, 107, 0, 0, 669, 130, 1, 0, 0, 0, 670, 671, 5, 99, 0, 0, 671, 672, 5, 111, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 116, 0, 0, 674, 675, 5, 105, 0, 0, 675, 676, 5, 110, 0, 0, 676, 677, 5, 117, 0, 0, 677, 678, 5, 101, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 103, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 116, 0, 0, 682, 683, 5, 111, 0, 0, 683, 134, 1, 0, 0, 0, 684, 685, 5, 97, 0, 0, 685, 686, 5, 115, 0, 0, 686, 687, 5, 109, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 66, 1, 0, 689, 136, 1, 0, 0, 0, 690, 691, 5, 100, 0, 0, 691, 692, 5, 101, 0, 0, 692, 693, 5, 102, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 108, 0, 0, 696, 697, 5, 116, 0, 0, 697, 138, 1, 0, 0, 0, 698, 699, 5, 99, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 101, 0, 0, 702, 140, 1, 0, 0, 0, 703, 704, 5, 115, 0, 0, 704, 705, 5, 116, 0, 0, 705, 706, 5, 114, 0, 0, 706, 707, 5, 117, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 116, 0, 0, 709, 142, 1, 0, 0, 0, 710, 711, 5, 117, 0, 0, 711, 712, 5, 110, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 110, 0, 0, 715, 144, 1, 0, 0, 0, 716, 717, 5, 101, 0, 0, 717, 718, 5, 110, 0, 0, 718, 719, 5, 117, 0, 0, 719, 720, 5, 109, 0, 0, 720, 146, 1, 0, 0, 0, 721, 722, 5, 115, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 122, 0, 0, 724, 725, 5, 101, 0, 0, 725, 726, 5, 111, 0, 0, 726, 727, 5, 102, 0, 0, 727, 148, 1, 0, 0, 0, 728, 729, 5, 116, 0, 0, 729, 730, 5, 121, 0, 0, 730, 731, 5, 112, 0, 0, 731, 732, 5, 101, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 100, 0, 0, 734, 150, 1, 0, 0, 0, 735, 736, 5, 100, 0, 0, 736, 737, 5, 101, 0, 0, 737, 738, 5, 102, 0, 0, 738, 739, 5, 105, 0, 0, 739, 740, 5, 110, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 100, 0, 0, 742, 152, 1, 0, 0, 0, 743, 744, 5, 107, 0, 0, 744, 745, 5, 105, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 107, 0, 0, 747, 748, 5, 97, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 109, 0, 0, 750, 154, 1, 0, 0, 0, 751, 752, 5, 33, 0, 0, 752, 156, 1, 0, 0, 0, 753, 754, 5, 115, 0, 0, 754, 755, 5, 105, 0, 0, 755, 756, 5, 103, 0, 0, 756, 757, 5, 110, 0, 0, 757, 758, 5, 101, 0, 0, 758, 805, 5, 100, 0, 0, 759, 760, 5, 117, 0, 0, 760, 761, 5, 110, 0, 0, 761, 762, 5, 115, 0, 0, 762, 763, 5, 105, 0, 0, 763, 764, 5, 103, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 5, 101, 0, 0, 766, 805, 5, 100, 0, 0, 767, 768, 5, 98, 0, 0, 768, 769, 5, 121, 0, 0, 769, 770, 5, 116, 0, 0, 770, 805, 5, 101, 0, 0, 771, 772, 5, 119, 0, 0, 772, 773, 5, 111, 0, 0, 773, 774, 5, 114, 0, 0, 774, 805, 5, 100, 0, 0, 775, 776, 5, 100, 0, 0, 776, 777, 5, 119, 0, 0, 777, 778, 5, 111, 0, 0, 778, 779, 5, 114, 0, 0, 779, 805, 5, 100, 0, 0, 780, 781, 5, 98, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 111, 0, 0, 783, 805, 5, 108, 0, 0, 784, 785, 5, 99, 0, 0, 785, 786, 5, 104, 0, 0, 786, 787, 5, 97, 0, 0, 787, 805, 5, 114, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 104, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 114, 0, 0, 792, 805, 5, 116, 0, 0, 793, 794, 5, 105, 0, 0, 794, 795, 5, 110, 0, 0, 795, 805, 5, 116, 0, 0, 796, 797, 5, 108, 0, 0, 797, 798, 5, 111, 0, 0, 798, 799, 5, 110, 0, 0, 799, 805, 5, 103, 0, 0, 800, 801, 5, 118, 0, 0, 801, 802, 5, 111, 0, 0, 802, 803, 5, 105, 0, 0, 803, 805, 5, 100, 0, 0, 804, 753, 1, 0, 0, 0, 804, 759, 1, 0, 0, 0, 804, 767, 1, 0, 0, 0, 804, 771, 1, 0, 0, 0, 804, 775, 1, 0, 0, 0, 804, 780, 1, 0, 0, 0, 804, 784, 1, 0, 0, 0, 804, 788, 1, 0, 0, 0, 804, 793, 1, 0, 0, 0, 804, 796, 1, 0, 0, 0, 804, 800, 1, 0, 0, 0, 805, 158, 1, 0, 0, 0, 806, 807, 5, 116, 0, 0, 807, 808, 5, 114, 0, 0, 808, 809, 5, 117, 0, 0, 809, 816, 5, 101, 0, 0, 810, 811, 5, 102, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 108, 0, 0, 813, 814, 5, 115, 0, 0, 814, 816, 5, 101, 0, 0, 815, 806, 1, 0, 0, 0, 815, 810, 1, 0, 0, 0, 816, 160, 1, 0, 0, 0, 817, 818, 5, 123, 0, 0, 818, 819, 5, 123, 0, 0, 819, 823, 1, 0, 0, 0, 820, 822, 9, 0, 0, 0, 821, 820, 1, 0, 0, 0, 822, 825, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 823, 821, 1, 0, 0, 0, 824, 826, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 826, 827, 5, 125, 0, 0, 827, 828, 5, 125, 0, 0, 828, 162, 1, 0, 0, 0, 829, 830, 5, 35, 0, 0, 830, 831, 5, 105, 0, 0, 831, 832, 5, 109, 0, 0, 832, 833, 5, 112, 0, 0, 833, 834, 5, 111, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 116, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 6, 80, 2, 0, 838, 164, 1, 0, 0, 0, 839, 840, 5, 35, 0, 0, 840, 841, 5, 105, 0, 0, 841, 842, 5, 110, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 108, 0, 0, 844, 845, 5, 117, 0, 0, 845, 846, 5, 100, 0, 0, 846, 847, 5, 101, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 6, 81, 3, 0, 849, 166, 1, 0, 0, 0, 850, 851, 5, 35, 0, 0, 851, 852, 5, 112, 0, 0, 852, 853, 5, 114, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 103, 0, 0, 855, 856, 5, 109, 0, 0, 856, 857, 5, 97, 0, 0, 857, 168, 1, 0, 0, 0, 858, 859, 5, 35, 0, 0, 859, 860, 5, 100, 0, 0, 860, 861, 5, 101, 0, 0, 861, 862, 5, 102, 0, 0, 862, 863, 5, 105, 0, 0, 863, 864, 5, 110, 0, 0, 864, 865, 5, 101, 0, 0, 865, 170, 1, 0, 0, 0, 866, 867, 5, 92, 0, 0, 867, 872, 5, 10, 0, 0, 868, 869, 5, 92, 0, 0, 869, 870, 5, 13, 0, 0, 870, 872, 5, 10, 0, 0, 871, 866, 1, 0, 0, 0, 871, 868, 1, 0, 0, 0, 872, 172, 1, 0, 0, 0, 873, 874, 5, 35, 0, 0, 874, 875, 5, 117, 0, 0, 875, 876, 5, 110, 0, 0, 876, 877, 5, 100, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 102, 0, 0, 879, 174, 1, 0, 0, 0, 880, 881, 5, 35, 0, 0, 881, 882, 5, 105, 0, 0, 882, 883, 5, 102, 0, 0, 883, 884, 5, 100, 0, 0, 884, 885, 5, 101, 0, 0, 885, 886, 5, 102, 0, 0, 886, 176, 1, 0, 0, 0, 887, 888, 5, 35, 0, 0, 888, 889, 5, 105, 0, 0, 889, 890, 5, 102, 0, 0, 890, 891, 5, 110, 0, 0, 891, 892, 5, 100, 0, 0, 892, 893, 5, 101, 0, 0, 893, 894, 5, 102, 0, 0, 894, 178, 1, 0, 0, 0, 895, 896, 5, 35, 0, 0, 896, 897, 5, 105, 0, 0, 897, 898, 5, 102, 0, 0, 898, 180, 1, 0, 0, 0, 899, 900, 5, 35, 0, 0, 900, 901, 5, 101, 0, 0, 901, 902, 5, 108, 0, 0, 902, 903, 5, 105, 0, 0, 903, 904, 5, 102, 0, 0, 904, 182, 1, 0, 0, 0, 905, 906, 5, 35, 0, 0, 906, 907, 5, 101, 0, 0, 907, 908, 5, 108, 0, 0, 908, 909, 5, 115, 0, 0, 909, 910, 5, 101, 0, 0, 910, 184, 1, 0, 0, 0, 911, 912, 5, 35, 0, 0, 912, 913, 5, 101, 0, 0, 913, 914, 5, 110, 0, 0, 914, 915, 5, 100, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 102, 0, 0, 917, 186, 1, 0, 0, 0, 918, 919, 5, 35, 0, 0, 919, 920, 5, 101, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 114, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 114, 0, 0, 924, 188, 1, 0, 0, 0, 925, 926, 5, 35, 0, 0, 926, 927, 3, 217, 107, 0, 927, 190, 1, 0, 0, 0, 928, 929, 5, 35, 0, 0, 929, 930, 3, 217, 107, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 96, 0, 932, 934, 3, 203, 100, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 939, 3, 197, 97, 0, 936, 939, 3, 199, 98, 0, 937, 939, 3, 201, 99, 0, 938, 935, 1, 0, 0, 0, 938, 936, 1, 0, 0, 0, 938, 937, 1, 0, 0, 0, 939, 196, 1, 0, 0, 0, 940, 946, 5, 37, 0, 0, 941, 942, 5, 48, 0, 0, 942, 946, 5, 98, 0, 0, 943, 944, 5, 48, 0, 0, 944, 946, 5, 66, 0, 0, 945, 940, 1, 0, 0, 0, 945, 941, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 946, 950, 1, 0, 0, 0, 947, 949, 3, 211, 104, 0, 948, 947, 1, 0, 0, 0, 949, 952, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 953, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 953, 955, 5, 46, 0, 0, 954, 956, 3, 211, 104, 0, 955, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 955, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 198, 1, 0, 0, 0, 959, 961, 3, 213, 105, 0, 960, 959, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 965, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 967, 5, 46, 0, 0, 966, 968, 3, 213, 105, 0, 967, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 200, 1, 0, 0, 0, 971, 977, 5, 36, 0, 0, 972, 973, 5, 48, 0, 0, 973, 977, 5, 120, 0, 0, 974, 975, 5, 48, 0, 0, 975, 977, 5, 88, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 977, 981, 1, 0, 0, 0, 978, 980, 3, 215, 106, 0, 979, 978, 1, 0, 0, 0, 980, 983, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 1, 0, 0, 0, 983, 981, 1, 0, 0, 0, 984, 986, 5, 46, 0, 0, 985, 987, 3, 215, 106, 0, 986, 985, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 986, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 202, 1, 0, 0, 0, 990, 994, 3, 207, 102, 0, 991, 994, 3, 209, 103, 0, 992, 994, 3, 205, 101, 0, 993, 990, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 998, 1, 0, 0, 0, 995, 996, 7, 0, 0, 0, 996, 999, 7, 1, 0, 0, 997, 999, 7, 2, 0, 0, 998, 995, 1, 0, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 204, 1, 0, 0, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1003, 7, 3, 0, 0, 1002, 1004, 3, 211, 104, 0, 1003, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1014, 1, 0, 0, 0, 1007, 1009, 5, 37, 0, 0, 1008, 1010, 3, 211, 104, 0, 1009, 1008, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1014, 1, 0, 0, 0, 1013, 1000, 1, 0, 0, 0, 1013, 1007, 1, 0, 0, 0, 1014, 206, 1, 0, 0, 0, 1015, 1017, 3, 213, 105, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 208, 1, 0, 0, 0, 1020, 1026, 5, 36, 0, 0, 1021, 1022, 5, 48, 0, 0, 1022, 1026, 5, 120, 0, 0, 1023, 1024, 5, 48, 0, 0, 1024, 1026, 5, 88, 0, 0, 1025, 1020, 1, 0, 0, 0, 1025, 1021, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1029, 3, 215, 106, 0, 1028, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 210, 1, 0, 0, 0, 1032, 1033, 7, 4, 0, 0, 1033, 212, 1, 0, 0, 0, 1034, 1035, 7, 5, 0, 0, 1035, 214, 1, 0, 0, 0, 1036, 1037, 7, 6, 0, 0, 1037, 216, 1, 0, 0, 0, 1038, 1042, 3, 219, 108, 0, 1039, 1041, 3, 221, 109, 0, 1040, 1039, 1, 0, 0, 0, 1041, 1044, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1045, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1045, 1046, 6, 107, 4, 0, 1046, 218, 1, 0, 0, 0, 1047, 1048, 7, 7, 0, 0, 1048, 220, 1, 0, 0, 0, 1049, 1050, 7, 8, 0, 0, 1050, 222, 1, 0, 0, 0, 1051, 1057, 5, 34, 0, 0, 1052, 1053, 5, 92, 0, 0, 1053, 1056, 5, 34, 0, 0, 1054, 1056, 8, 9, 0, 0, 1055, 1052, 1, 0, 0, 0, 1055, 1054, 1, 0, 0, 0, 1056, 1059, 1, 0, 0, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1062, 5, 34, 0, 0, 1061, 1063, 7, 10, 0, 0, 1062, 1061, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1068, 1, 0, 0, 0, 1064, 1066, 7, 11, 0, 0, 1065, 1067, 7, 12, 0, 0, 1066, 1065, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1064, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1071, 1, 0, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 224, 1, 0, 0, 0, 1073, 1088, 5, 39, 0, 0, 1074, 1085, 5, 92, 0, 0, 1075, 1077, 7, 13, 0, 0, 1076, 1078, 7, 5, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 5, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1086, 1, 0, 0, 0, 1082, 1083, 5, 120, 0, 0, 1083, 1084, 7, 14, 0, 0, 1084, 1086, 7, 14, 0, 0, 1085, 1075, 1, 0, 0, 0, 1085, 1082, 1, 0, 0, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1089, 8, 15, 0, 0, 1088, 1074, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1091, 5, 39, 0, 0, 1091, 226, 1, 0, 0, 0, 1092, 1094, 7, 16, 0, 0, 1093, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1098, 6, 112, 5, 0, 1098, 228, 1, 0, 0, 0, 1099, 1100, 5, 47, 0, 0, 1100, 1101, 5, 47, 0, 0, 1101, 1105, 1, 0, 0, 0, 1102, 1104, 8, 17, 0, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1109, 6, 113, 6, 0, 1109, 230, 1, 0, 0, 0, 1110, 1111, 5, 47, 0, 0, 1111, 1112, 5, 42, 0, 0, 1112, 1116, 1, 0, 0, 0, 1113, 1115, 9, 0, 0, 0, 1114, 1113, 1, 0, 0, 0, 1115, 1118, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1119, 1, 0, 0, 0, 1118, 1116, 1, 0, 0, 0, 1119, 1120, 5, 42, 0, 0, 1120, 1121, 5, 47, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1123, 6, 114, 6, 0, 1123, 232, 1, 0, 0, 0, 1124, 1125, 5, 46, 0, 0, 1125, 1126, 5, 98, 0, 0, 1126, 1127, 5, 121, 0, 0, 1127, 1128, 5, 116, 0, 0, 1128, 1129, 5, 101, 0, 0, 1129, 234, 1, 0, 0, 0, 1130, 1131, 5, 98, 0, 0, 1131, 1132, 5, 114, 0, 0, 1132, 1738, 5, 107, 0, 0, 1133, 1134, 5, 111, 0, 0, 1134, 1135, 5, 114, 0, 0, 1135, 1738, 5, 97, 0, 0, 1136, 1137, 5, 107, 0, 0, 1137, 1138, 5, 105, 0, 0, 1138, 1738, 5, 108, 0, 0, 1139, 1140, 5, 115, 0, 0, 1140, 1141, 5, 108, 0, 0, 1141, 1738, 5, 111, 0, 0, 1142, 1143, 5, 110, 0, 0, 1143, 1144, 5, 111, 0, 0, 1144, 1738, 5, 112, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1738, 5, 108, 0, 0, 1148, 1149, 5, 112, 0, 0, 1149, 1150, 5, 104, 0, 0, 1150, 1738, 5, 112, 0, 0, 1151, 1152, 5, 97, 0, 0, 1152, 1153, 5, 110, 0, 0, 1153, 1738, 5, 99, 0, 0, 1154, 1155, 5, 98, 0, 0, 1155, 1156, 5, 112, 0, 0, 1156, 1738, 5, 108, 0, 0, 1157, 1158, 5, 99, 0, 0, 1158, 1159, 5, 108, 0, 0, 1159, 1738, 5, 99, 0, 0, 1160, 1161, 5, 106, 0, 0, 1161, 1162, 5, 115, 0, 0, 1162, 1738, 5, 114, 0, 0, 1163, 1164, 5, 97, 0, 0, 1164, 1165, 5, 110, 0, 0, 1165, 1738, 5, 100, 0, 0, 1166, 1167, 5, 114, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1738, 5, 97, 0, 0, 1169, 1170, 5, 98, 0, 0, 1170, 1171, 5, 105, 0, 0, 1171, 1738, 5, 116, 0, 0, 1172, 1173, 5, 114, 0, 0, 1173, 1174, 5, 111, 0, 0, 1174, 1738, 5, 108, 0, 0, 1175, 1176, 5, 112, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1738, 5, 97, 0, 0, 1178, 1179, 5, 112, 0, 0, 1179, 1180, 5, 108, 0, 0, 1180, 1738, 5, 112, 0, 0, 1181, 1182, 5, 98, 0, 0, 1182, 1183, 5, 109, 0, 0, 1183, 1738, 5, 105, 0, 0, 1184, 1185, 5, 115, 0, 0, 1185, 1186, 5, 101, 0, 0, 1186, 1738, 5, 99, 0, 0, 1187, 1188, 5, 114, 0, 0, 1188, 1189, 5, 116, 0, 0, 1189, 1738, 5, 105, 0, 0, 1190, 1191, 5, 101, 0, 0, 1191, 1192, 5, 111, 0, 0, 1192, 1738, 5, 114, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 114, 0, 0, 1195, 1738, 5, 101, 0, 0, 1196, 1197, 5, 108, 0, 0, 1197, 1198, 5, 115, 0, 0, 1198, 1738, 5, 114, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 104, 0, 0, 1201, 1738, 5, 97, 0, 0, 1202, 1203, 5, 97, 0, 0, 1203, 1204, 5, 108, 0, 0, 1204, 1738, 5, 114, 0, 0, 1205, 1206, 5, 106, 0, 0, 1206, 1207, 5, 109, 0, 0, 1207, 1738, 5, 112, 0, 0, 1208, 1209, 5, 98, 0, 0, 1209, 1210, 5, 118, 0, 0, 1210, 1738, 5, 99, 0, 0, 1211, 1212, 5, 99, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1738, 5, 105, 0, 0, 1214, 1215, 5, 114, 0, 0, 1215, 1216, 5, 116, 0, 0, 1216, 1738, 5, 115, 0, 0, 1217, 1218, 5, 97, 0, 0, 1218, 1219, 5, 100, 0, 0, 1219, 1738, 5, 99, 0, 0, 1220, 1221, 5, 114, 0, 0, 1221, 1222, 5, 114, 0, 0, 1222, 1738, 5, 97, 0, 0, 1223, 1224, 5, 98, 0, 0, 1224, 1225, 5, 118, 0, 0, 1225, 1738, 5, 115, 0, 0, 1226, 1227, 5, 115, 0, 0, 1227, 1228, 5, 101, 0, 0, 1228, 1738, 5, 105, 0, 0, 1229, 1230, 5, 115, 0, 0, 1230, 1231, 5, 97, 0, 0, 1231, 1738, 5, 120, 0, 0, 1232, 1233, 5, 115, 0, 0, 1233, 1234, 5, 116, 0, 0, 1234, 1738, 5, 121, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 116, 0, 0, 1237, 1738, 5, 97, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1738, 5, 120, 0, 0, 1241, 1242, 5, 100, 0, 0, 1242, 1243, 5, 101, 0, 0, 1243, 1738, 5, 121, 0, 0, 1244, 1245, 5, 116, 0, 0, 1245, 1246, 5, 120, 0, 0, 1246, 1738, 5, 97, 0, 0, 1247, 1248, 5, 120, 0, 0, 1248, 1249, 5, 97, 0, 0, 1249, 1738, 5, 97, 0, 0, 1250, 1251, 5, 98, 0, 0, 1251, 1252, 5, 99, 0, 0, 1252, 1738, 5, 99, 0, 0, 1253, 1254, 5, 97, 0, 0, 1254, 1255, 5, 104, 0, 0, 1255, 1738, 5, 120, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 121, 0, 0, 1258, 1738, 5, 97, 0, 0, 1259, 1260, 5, 116, 0, 0, 1260, 1261, 5, 120, 0, 0, 1261, 1738, 5, 115, 0, 0, 1262, 1263, 5, 116, 0, 0, 1263, 1264, 5, 97, 0, 0, 1264, 1738, 5, 115, 0, 0, 1265, 1266, 5, 115, 0, 0, 1266, 1267, 5, 104, 0, 0, 1267, 1738, 5, 121, 0, 0, 1268, 1269, 5, 115, 0, 0, 1269, 1270, 5, 104, 0, 0, 1270, 1738, 5, 120, 0, 0, 1271, 1272, 5, 108, 0, 0, 1272, 1273, 5, 100, 0, 0, 1273, 1738, 5, 121, 0, 0, 1274, 1275, 5, 108, 0, 0, 1275, 1276, 5, 100, 0, 0, 1276, 1738, 5, 97, 0, 0, 1277, 1278, 5, 108, 0, 0, 1278, 1279, 5, 100, 0, 0, 1279, 1738, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 97, 0, 0, 1282, 1738, 5, 120, 0, 0, 1283, 1284, 5, 116, 0, 0, 1284, 1285, 5, 97, 0, 0, 1285, 1738, 5, 121, 0, 0, 1286, 1287, 5, 116, 0, 0, 1287, 1288, 5, 97, 0, 0, 1288, 1738, 5, 120, 0, 0, 1289, 1290, 5, 98, 0, 0, 1290, 1291, 5, 99, 0, 0, 1291, 1738, 5, 115, 0, 0, 1292, 1293, 5, 99, 0, 0, 1293, 1294, 5, 108, 0, 0, 1294, 1738, 5, 118, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 115, 0, 0, 1297, 1738, 5, 120, 0, 0, 1298, 1299, 5, 108, 0, 0, 1299, 1300, 5, 97, 0, 0, 1300, 1738, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 112, 0, 0, 1303, 1738, 5, 121, 0, 0, 1304, 1305, 5, 99, 0, 0, 1305, 1306, 5, 109, 0, 0, 1306, 1738, 5, 112, 0, 0, 1307, 1308, 5, 99, 0, 0, 1308, 1309, 5, 112, 0, 0, 1309, 1738, 5, 120, 0, 0, 1310, 1311, 5, 100, 0, 0, 1311, 1312, 5, 99, 0, 0, 1312, 1738, 5, 112, 0, 0, 1313, 1314, 5, 100, 0, 0, 1314, 1315, 5, 101, 0, 0, 1315, 1738, 5, 99, 0, 0, 1316, 1317, 5, 105, 0, 0, 1317, 1318, 5, 110, 0, 0, 1318, 1738, 5, 99, 0, 0, 1319, 1320, 5, 97, 0, 0, 1320, 1321, 5, 120, 0, 0, 1321, 1738, 5, 115, 0, 0, 1322, 1323, 5, 98, 0, 0, 1323, 1324, 5, 110, 0, 0, 1324, 1738, 5, 101, 0, 0, 1325, 1326, 5, 99, 0, 0, 1326, 1327, 5, 108, 0, 0, 1327, 1738, 5, 100, 0, 0, 1328, 1329, 5, 115, 0, 0, 1329, 1330, 5, 98, 0, 0, 1330, 1738, 5, 99, 0, 0, 1331, 1332, 5, 105, 0, 0, 1332, 1333, 5, 115, 0, 0, 1333, 1738, 5, 99, 0, 0, 1334, 1335, 5, 105, 0, 0, 1335, 1336, 5, 110, 0, 0, 1336, 1738, 5, 120, 0, 0, 1337, 1338, 5, 98, 0, 0, 1338, 1339, 5, 101, 0, 0, 1339, 1738, 5, 113, 0, 0, 1340, 1341, 5, 115, 0, 0, 1341, 1342, 5, 101, 0, 0, 1342, 1738, 5, 100, 0, 0, 1343, 1344, 5, 100, 0, 0, 1344, 1345, 5, 101, 0, 0, 1345, 1738, 5, 120, 0, 0, 1346, 1347, 5, 105, 0, 0, 1347, 1348, 5, 110, 0, 0, 1348, 1738, 5, 121, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 111, 0, 0, 1351, 1738, 5, 114, 0, 0, 1352, 1353, 5, 98, 0, 0, 1353, 1354, 5, 98, 0, 0, 1354, 1355, 5, 114, 0, 0, 1355, 1738, 5, 48, 0, 0, 1356, 1357, 5, 98, 0, 0, 1357, 1358, 5, 98, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1738, 5, 49, 0, 0, 1360, 1361, 5, 98, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 114, 0, 0, 1363, 1738, 5, 50, 0, 0, 1364, 1365, 5, 98, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 114, 0, 0, 1367, 1738, 5, 51, 0, 0, 1368, 1369, 5, 98, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 114, 0, 0, 1371, 1738, 5, 52, 0, 0, 1372, 1373, 5, 98, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 114, 0, 0, 1375, 1738, 5, 53, 0, 0, 1376, 1377, 5, 98, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 114, 0, 0, 1379, 1738, 5, 54, 0, 0, 1380, 1381, 5, 98, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 114, 0, 0, 1383, 1738, 5, 55, 0, 0, 1384, 1385, 5, 98, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 115, 0, 0, 1387, 1738, 5, 48, 0, 0, 1388, 1389, 5, 98, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 115, 0, 0, 1391, 1738, 5, 49, 0, 0, 1392, 1393, 5, 98, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 115, 0, 0, 1395, 1738, 5, 50, 0, 0, 1396, 1397, 5, 98, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 115, 0, 0, 1399, 1738, 5, 51, 0, 0, 1400, 1401, 5, 98, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 115, 0, 0, 1403, 1738, 5, 52, 0, 0, 1404, 1405, 5, 98, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 115, 0, 0, 1407, 1738, 5, 53, 0, 0, 1408, 1409, 5, 98, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 115, 0, 0, 1411, 1738, 5, 54, 0, 0, 1412, 1413, 5, 98, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 115, 0, 0, 1415, 1738, 5, 55, 0, 0, 1416, 1417, 5, 98, 0, 0, 1417, 1418, 5, 114, 0, 0, 1418, 1738, 5, 97, 0, 0, 1419, 1420, 5, 112, 0, 0, 1420, 1421, 5, 104, 0, 0, 1421, 1738, 5, 120, 0, 0, 1422, 1423, 5, 112, 0, 0, 1423, 1424, 5, 104, 0, 0, 1424, 1738, 5, 121, 0, 0, 1425, 1426, 5, 112, 0, 0, 1426, 1427, 5, 108, 0, 0, 1427, 1738, 5, 120, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 108, 0, 0, 1430, 1738, 5, 121, 0, 0, 1431, 1432, 5, 114, 0, 0, 1432, 1433, 5, 109, 0, 0, 1433, 1434, 5, 98, 0, 0, 1434, 1738, 5, 48, 0, 0, 1435, 1436, 5, 114, 0, 0, 1436, 1437, 5, 109, 0, 0, 1437, 1438, 5, 98, 0, 0, 1438, 1738, 5, 49, 0, 0, 1439, 1440, 5, 114, 0, 0, 1440, 1441, 5, 109, 0, 0, 1441, 1442, 5, 98, 0, 0, 1442, 1738, 5, 50, 0, 0, 1443, 1444, 5, 114, 0, 0, 1444, 1445, 5, 109, 0, 0, 1445, 1446, 5, 98, 0, 0, 1446, 1738, 5, 51, 0, 0, 1447, 1448, 5, 114, 0, 0, 1448, 1449, 5, 109, 0, 0, 1449, 1450, 5, 98, 0, 0, 1450, 1738, 5, 52, 0, 0, 1451, 1452, 5, 114, 0, 0, 1452, 1453, 5, 109, 0, 0, 1453, 1454, 5, 98, 0, 0, 1454, 1738, 5, 53, 0, 0, 1455, 1456, 5, 114, 0, 0, 1456, 1457, 5, 109, 0, 0, 1457, 1458, 5, 98, 0, 0, 1458, 1738, 5, 54, 0, 0, 1459, 1460, 5, 114, 0, 0, 1460, 1461, 5, 109, 0, 0, 1461, 1462, 5, 98, 0, 0, 1462, 1738, 5, 55, 0, 0, 1463, 1464, 5, 115, 0, 0, 1464, 1465, 5, 109, 0, 0, 1465, 1466, 5, 98, 0, 0, 1466, 1738, 5, 48, 0, 0, 1467, 1468, 5, 115, 0, 0, 1468, 1469, 5, 109, 0, 0, 1469, 1470, 5, 98, 0, 0, 1470, 1738, 5, 49, 0, 0, 1471, 1472, 5, 115, 0, 0, 1472, 1473, 5, 109, 0, 0, 1473, 1474, 5, 98, 0, 0, 1474, 1738, 5, 50, 0, 0, 1475, 1476, 5, 115, 0, 0, 1476, 1477, 5, 109, 0, 0, 1477, 1478, 5, 98, 0, 0, 1478, 1738, 5, 51, 0, 0, 1479, 1480, 5, 115, 0, 0, 1480, 1481, 5, 109, 0, 0, 1481, 1482, 5, 98, 0, 0, 1482, 1738, 5, 52, 0, 0, 1483, 1484, 5, 115, 0, 0, 1484, 1485, 5, 109, 0, 0, 1485, 1486, 5, 98, 0, 0, 1486, 1738, 5, 53, 0, 0, 1487, 1488, 5, 115, 0, 0, 1488, 1489, 5, 109, 0, 0, 1489, 1490, 5, 98, 0, 0, 1490, 1738, 5, 54, 0, 0, 1491, 1492, 5, 115, 0, 0, 1492, 1493, 5, 109, 0, 0, 1493, 1494, 5, 98, 0, 0, 1494, 1738, 5, 55, 0, 0, 1495, 1496, 5, 115, 0, 0, 1496, 1497, 5, 116, 0, 0, 1497, 1738, 5, 112, 0, 0, 1498, 1499, 5, 115, 0, 0, 1499, 1500, 5, 116, 0, 0, 1500, 1738, 5, 122, 0, 0, 1501, 1502, 5, 116, 0, 0, 1502, 1503, 5, 114, 0, 0, 1503, 1738, 5, 98, 0, 0, 1504, 1505, 5, 116, 0, 0, 1505, 1506, 5, 115, 0, 0, 1506, 1738, 5, 98, 0, 0, 1507, 1508, 5, 119, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1738, 5, 105, 0, 0, 1510, 1511, 5, 99, 0, 0, 1511, 1512, 5, 108, 0, 0, 1512, 1738, 5, 101, 0, 0, 1513, 1514, 5, 115, 0, 0, 1514, 1515, 5, 101, 0, 0, 1515, 1738, 5, 101, 0, 0, 1516, 1517, 5, 116, 0, 0, 1517, 1518, 5, 115, 0, 0, 1518, 1738, 5, 121, 0, 0, 1519, 1520, 5, 108, 0, 0, 1520, 1521, 5, 98, 0, 0, 1521, 1522, 5, 112, 0, 0, 1522, 1738, 5, 108, 0, 0, 1523, 1524, 5, 105, 0, 0, 1524, 1525, 5, 110, 0, 0, 1525, 1738, 5, 122, 0, 0, 1526, 1527, 5, 116, 0, 0, 1527, 1528, 5, 121, 0, 0, 1528, 1738, 5, 115, 0, 0, 1529, 1530, 5, 108, 0, 0, 1530, 1531, 5, 98, 0, 0, 1531, 1532, 5, 109, 0, 0, 1532, 1738, 5, 105, 0, 0, 1533, 1534, 5, 100, 0, 0, 1534, 1535, 5, 101, 0, 0, 1535, 1738, 5, 122, 0, 0, 1536, 1537, 5, 110, 0, 0, 1537, 1538, 5, 101, 0, 0, 1538, 1738, 5, 103, 0, 0, 1539, 1540, 5, 97, 0, 0, 1540, 1541, 5, 115, 0, 0, 1541, 1738, 5, 114, 0, 0, 1542, 1543, 5, 116, 0, 0, 1543, 1544, 5, 97, 0, 0, 1544, 1738, 5, 122, 0, 0, 1545, 1546, 5, 108, 0, 0, 1546, 1547, 5, 98, 0, 0, 1547, 1548, 5, 118, 0, 0, 1548, 1738, 5, 99, 0, 0, 1549, 1550, 5, 116, 0, 0, 1550, 1551, 5, 97, 0, 0, 1551, 1738, 5, 98, 0, 0, 1552, 1553, 5, 109, 0, 0, 1553, 1554, 5, 97, 0, 0, 1554, 1738, 5, 112, 0, 0, 1555, 1556, 5, 114, 0, 0, 1556, 1557, 5, 116, 0, 0, 1557, 1738, 5, 110, 0, 0, 1558, 1559, 5, 108, 0, 0, 1559, 1560, 5, 98, 0, 0, 1560, 1561, 5, 115, 0, 0, 1561, 1738, 5, 114, 0, 0, 1562, 1563, 5, 116, 0, 0, 1563, 1564, 5, 122, 0, 0, 1564, 1738, 5, 97, 0, 0, 1565, 1566, 5, 108, 0, 0, 1566, 1567, 5, 98, 0, 0, 1567, 1568, 5, 118, 0, 0, 1568, 1738, 5, 115, 0, 0, 1569, 1570, 5, 116, 0, 0, 1570, 1571, 5, 98, 0, 0, 1571, 1738, 5, 97, 0, 0, 1572, 1573, 5, 108, 0, 0, 1573, 1574, 5, 98, 0, 0, 1574, 1575, 5, 114, 0, 0, 1575, 1738, 5, 97, 0, 0, 1576, 1577, 5, 108, 0, 0, 1577, 1578, 5, 98, 0, 0, 1578, 1579, 5, 99, 0, 0, 1579, 1738, 5, 99, 0, 0, 1580, 1581, 5, 108, 0, 0, 1581, 1582, 5, 100, 0, 0, 1582, 1738, 5, 122, 0, 0, 1583, 1584, 5, 108, 0, 0, 1584, 1585, 5, 98, 0, 0, 1585, 1586, 5, 99, 0, 0, 1586, 1738, 5, 115, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1589, 5, 112, 0, 0, 1589, 1738, 5, 122, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1592, 5, 101, 0, 0, 1592, 1738, 5, 119, 0, 0, 1593, 1594, 5, 97, 0, 0, 1594, 1595, 5, 115, 0, 0, 1595, 1738, 5, 119, 0, 0, 1596, 1597, 5, 108, 0, 0, 1597, 1598, 5, 98, 0, 0, 1598, 1599, 5, 110, 0, 0, 1599, 1738, 5, 101, 0, 0, 1600, 1601, 5, 112, 0, 0, 1601, 1602, 5, 104, 0, 0, 1602, 1738, 5, 122, 0, 0, 1603, 1604, 5, 105, 0, 0, 1604, 1605, 5, 110, 0, 0, 1605, 1738, 5, 119, 0, 0, 1606, 1607, 5, 114, 0, 0, 1607, 1608, 5, 111, 0, 0, 1608, 1738, 5, 119, 0, 0, 1609, 1610, 5, 108, 0, 0, 1610, 1611, 5, 98, 0, 0, 1611, 1612, 5, 101, 0, 0, 1612, 1738, 5, 113, 0, 0, 1613, 1614, 5, 112, 0, 0, 1614, 1615, 5, 104, 0, 0, 1615, 1738, 5, 119, 0, 0, 1616, 1617, 5, 112, 0, 0, 1617, 1618, 5, 108, 0, 0, 1618, 1738, 5, 122, 0, 0, 1619, 1620, 5, 101, 0, 0, 1620, 1621, 5, 111, 0, 0, 1621, 1738, 5, 109, 0, 0, 1622, 1623, 5, 97, 0, 0, 1623, 1624, 5, 100, 0, 0, 1624, 1625, 5, 99, 0, 0, 1625, 1738, 5, 113, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 110, 0, 0, 1628, 1629, 5, 100, 0, 0, 1629, 1738, 5, 113, 0, 0, 1630, 1631, 5, 97, 0, 0, 1631, 1632, 5, 115, 0, 0, 1632, 1633, 5, 108, 0, 0, 1633, 1738, 5, 113, 0, 0, 1634, 1635, 5, 97, 0, 0, 1635, 1636, 5, 115, 0, 0, 1636, 1637, 5, 114, 0, 0, 1637, 1738, 5, 113, 0, 0, 1638, 1639, 5, 98, 0, 0, 1639, 1640, 5, 105, 0, 0, 1640, 1641, 5, 116, 0, 0, 1641, 1738, 5, 113, 0, 0, 1642, 1643, 5, 99, 0, 0, 1643, 1644, 5, 112, 0, 0, 1644, 1738, 5, 113, 0, 0, 1645, 1646, 5, 100, 0, 0, 1646, 1647, 5, 101, 0, 0, 1647, 1738, 5, 113, 0, 0, 1648, 1649, 5, 101, 0, 0, 1649, 1650, 5, 111, 0, 0, 1650, 1651, 5, 114, 0, 0, 1651, 1738, 5, 113, 0, 0, 1652, 1653, 5, 105, 0, 0, 1653, 1654, 5, 110, 0, 0, 1654, 1738, 5, 113, 0, 0, 1655, 1656, 5, 108, 0, 0, 1656, 1657, 5, 100, 0, 0, 1657, 1738, 5, 113, 0, 0, 1658, 1659, 5, 108, 0, 0, 1659, 1660, 5, 115, 0, 0, 1660, 1661, 5, 114, 0, 0, 1661, 1738, 5, 113, 0, 0, 1662, 1663, 5, 111, 0, 0, 1663, 1664, 5, 114, 0, 0, 1664, 1738, 5, 113, 0, 0, 1665, 1666, 5, 114, 0, 0, 1666, 1667, 5, 111, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1738, 5, 113, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 114, 0, 0, 1672, 1738, 5, 113, 0, 0, 1673, 1674, 5, 115, 0, 0, 1674, 1675, 5, 98, 0, 0, 1675, 1676, 5, 99, 0, 0, 1676, 1738, 5, 113, 0, 0, 1677, 1678, 5, 115, 0, 0, 1678, 1679, 5, 116, 0, 0, 1679, 1738, 5, 113, 0, 0, 1680, 1681, 5, 115, 0, 0, 1681, 1682, 5, 120, 0, 0, 1682, 1738, 5, 121, 0, 0, 1683, 1684, 5, 115, 0, 0, 1684, 1685, 5, 116, 0, 0, 1685, 1738, 5, 48, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1738, 5, 49, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 116, 0, 0, 1691, 1738, 5, 50, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 97, 0, 0, 1694, 1738, 5, 121, 0, 0, 1695, 1696, 5, 116, 0, 0, 1696, 1697, 5, 109, 0, 0, 1697, 1738, 5, 97, 0, 0, 1698, 1699, 5, 98, 0, 0, 1699, 1700, 5, 115, 0, 0, 1700, 1738, 5, 114, 0, 0, 1701, 1702, 5, 116, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1738, 5, 109, 0, 0, 1704, 1705, 5, 99, 0, 0, 1705, 1706, 5, 115, 0, 0, 1706, 1738, 5, 108, 0, 0, 1707, 1708, 5, 99, 0, 0, 1708, 1709, 5, 108, 0, 0, 1709, 1738, 5, 97, 0, 0, 1710, 1711, 5, 99, 0, 0, 1711, 1712, 5, 108, 0, 0, 1712, 1738, 5, 120, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 108, 0, 0, 1715, 1738, 5, 121, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 115, 0, 0, 1718, 1738, 5, 104, 0, 0, 1719, 1720, 5, 115, 0, 0, 1720, 1721, 5, 101, 0, 0, 1721, 1738, 5, 116, 0, 0, 1722, 1723, 5, 116, 0, 0, 1723, 1724, 5, 115, 0, 0, 1724, 1738, 5, 116, 0, 0, 1725, 1726, 5, 116, 0, 0, 1726, 1727, 5, 105, 0, 0, 1727, 1738, 5, 97, 0, 0, 1728, 1729, 5, 116, 0, 0, 1729, 1730, 5, 100, 0, 0, 1730, 1738, 5, 100, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 105, 0, 0, 1733, 1738, 5, 110, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1738, 5, 105, 0, 0, 1737, 1130, 1, 0, 0, 0, 1737, 1133, 1, 0, 0, 0, 1737, 1136, 1, 0, 0, 0, 1737, 1139, 1, 0, 0, 0, 1737, 1142, 1, 0, 0, 0, 1737, 1145, 1, 0, 0, 0, 1737, 1148, 1, 0, 0, 0, 1737, 1151, 1, 0, 0, 0, 1737, 1154, 1, 0, 0, 0, 1737, 1157, 1, 0, 0, 0, 1737, 1160, 1, 0, 0, 0, 1737, 1163, 1, 0, 0, 0, 1737, 1166, 1, 0, 0, 0, 1737, 1169, 1, 0, 0, 0, 1737, 1172, 1, 0, 0, 0, 1737, 1175, 1, 0, 0, 0, 1737, 1178, 1, 0, 0, 0, 1737, 1181, 1, 0, 0, 0, 1737, 1184, 1, 0, 0, 0, 1737, 1187, 1, 0, 0, 0, 1737, 1190, 1, 0, 0, 0, 1737, 1193, 1, 0, 0, 0, 1737, 1196, 1, 0, 0, 0, 1737, 1199, 1, 0, 0, 0, 1737, 1202, 1, 0, 0, 0, 1737, 1205, 1, 0, 0, 0, 1737, 1208, 1, 0, 0, 0, 1737, 1211, 1, 0, 0, 0, 1737, 1214, 1, 0, 0, 0, 1737, 1217, 1, 0, 0, 0, 1737, 1220, 1, 0, 0, 0, 1737, 1223, 1, 0, 0, 0, 1737, 1226, 1, 0, 0, 0, 1737, 1229, 1, 0, 0, 0, 1737, 1232, 1, 0, 0, 0, 1737, 1235, 1, 0, 0, 0, 1737, 1238, 1, 0, 0, 0, 1737, 1241, 1, 0, 0, 0, 1737, 1244, 1, 0, 0, 0, 1737, 1247, 1, 0, 0, 0, 1737, 1250, 1, 0, 0, 0, 1737, 1253, 1, 0, 0, 0, 1737, 1256, 1, 0, 0, 0, 1737, 1259, 1, 0, 0, 0, 1737, 1262, 1, 0, 0, 0, 1737, 1265, 1, 0, 0, 0, 1737, 1268, 1, 0, 0, 0, 1737, 1271, 1, 0, 0, 0, 1737, 1274, 1, 0, 0, 0, 1737, 1277, 1, 0, 0, 0, 1737, 1280, 1, 0, 0, 0, 1737, 1283, 1, 0, 0, 0, 1737, 1286, 1, 0, 0, 0, 1737, 1289, 1, 0, 0, 0, 1737, 1292, 1, 0, 0, 0, 1737, 1295, 1, 0, 0, 0, 1737, 1298, 1, 0, 0, 0, 1737, 1301, 1, 0, 0, 0, 1737, 1304, 1, 0, 0, 0, 1737, 1307, 1, 0, 0, 0, 1737, 1310, 1, 0, 0, 0, 1737, 1313, 1, 0, 0, 0, 1737, 1316, 1, 0, 0, 0, 1737, 1319, 1, 0, 0, 0, 1737, 1322, 1, 0, 0, 0, 1737, 1325, 1, 0, 0, 0, 1737, 1328, 1, 0, 0, 0, 1737, 1331, 1, 0, 0, 0, 1737, 1334, 1, 0, 0, 0, 1737, 1337, 1, 0, 0, 0, 1737, 1340, 1, 0, 0, 0, 1737, 1343, 1, 0, 0, 0, 1737, 1346, 1, 0, 0, 0, 1737, 1349, 1, 0, 0, 0, 1737, 1352, 1, 0, 0, 0, 1737, 1356, 1, 0, 0, 0, 1737, 1360, 1, 0, 0, 0, 1737, 1364, 1, 0, 0, 0, 1737, 1368, 1, 0, 0, 0, 1737, 1372, 1, 0, 0, 0, 1737, 1376, 1, 0, 0, 0, 1737, 1380, 1, 0, 0, 0, 1737, 1384, 1, 0, 0, 0, 1737, 1388, 1, 0, 0, 0, 1737, 1392, 1, 0, 0, 0, 1737, 1396, 1, 0, 0, 0, 1737, 1400, 1, 0, 0, 0, 1737, 1404, 1, 0, 0, 0, 1737, 1408, 1, 0, 0, 0, 1737, 1412, 1, 0, 0, 0, 1737, 1416, 1, 0, 0, 0, 1737, 1419, 1, 0, 0, 0, 1737, 1422, 1, 0, 0, 0, 1737, 1425, 1, 0, 0, 0, 1737, 1428, 1, 0, 0, 0, 1737, 1431, 1, 0, 0, 0, 1737, 1435, 1, 0, 0, 0, 1737, 1439, 1, 0, 0, 0, 1737, 1443, 1, 0, 0, 0, 1737, 1447, 1, 0, 0, 0, 1737, 1451, 1, 0, 0, 0, 1737, 1455, 1, 0, 0, 0, 1737, 1459, 1, 0, 0, 0, 1737, 1463, 1, 0, 0, 0, 1737, 1467, 1, 0, 0, 0, 1737, 1471, 1, 0, 0, 0, 1737, 1475, 1, 0, 0, 0, 1737, 1479, 1, 0, 0, 0, 1737, 1483, 1, 0, 0, 0, 1737, 1487, 1, 0, 0, 0, 1737, 1491, 1, 0, 0, 0, 1737, 1495, 1, 0, 0, 0, 1737, 1498, 1, 0, 0, 0, 1737, 1501, 1, 0, 0, 0, 1737, 1504, 1, 0, 0, 0, 1737, 1507, 1, 0, 0, 0, 1737, 1510, 1, 0, 0, 0, 1737, 1513, 1, 0, 0, 0, 1737, 1516, 1, 0, 0, 0, 1737, 1519, 1, 0, 0, 0, 1737, 1523, 1, 0, 0, 0, 1737, 1526, 1, 0, 0, 0, 1737, 1529, 1, 0, 0, 0, 1737, 1533, 1, 0, 0, 0, 1737, 1536, 1, 0, 0, 0, 1737, 1539, 1, 0, 0, 0, 1737, 1542, 1, 0, 0, 0, 1737, 1545, 1, 0, 0, 0, 1737, 1549, 1, 0, 0, 0, 1737, 1552, 1, 0, 0, 0, 1737, 1555, 1, 0, 0, 0, 1737, 1558, 1, 0, 0, 0, 1737, 1562, 1, 0, 0, 0, 1737, 1565, 1, 0, 0, 0, 1737, 1569, 1, 0, 0, 0, 1737, 1572, 1, 0, 0, 0, 1737, 1576, 1, 0, 0, 0, 1737, 1580, 1, 0, 0, 0, 1737, 1583, 1, 0, 0, 0, 1737, 1587, 1, 0, 0, 0, 1737, 1590, 1, 0, 0, 0, 1737, 1593, 1, 0, 0, 0, 1737, 1596, 1, 0, 0, 0, 1737, 1600, 1, 0, 0, 0, 1737, 1603, 1, 0, 0, 0, 1737, 1606, 1, 0, 0, 0, 1737, 1609, 1, 0, 0, 0, 1737, 1613, 1, 0, 0, 0, 1737, 1616, 1, 0, 0, 0, 1737, 1619, 1, 0, 0, 0, 1737, 1622, 1, 0, 0, 0, 1737, 1626, 1, 0, 0, 0, 1737, 1630, 1, 0, 0, 0, 1737, 1634, 1, 0, 0, 0, 1737, 1638, 1, 0, 0, 0, 1737, 1642, 1, 0, 0, 0, 1737, 1645, 1, 0, 0, 0, 1737, 1648, 1, 0, 0, 0, 1737, 1652, 1, 0, 0, 0, 1737, 1655, 1, 0, 0, 0, 1737, 1658, 1, 0, 0, 0, 1737, 1662, 1, 0, 0, 0, 1737, 1665, 1, 0, 0, 0, 1737, 1669, 1, 0, 0, 0, 1737, 1673, 1, 0, 0, 0, 1737, 1677, 1, 0, 0, 0, 1737, 1680, 1, 0, 0, 0, 1737, 1683, 1, 0, 0, 0, 1737, 1686, 1, 0, 0, 0, 1737, 1689, 1, 0, 0, 0, 1737, 1692, 1, 0, 0, 0, 1737, 1695, 1, 0, 0, 0, 1737, 1698, 1, 0, 0, 0, 1737, 1701, 1, 0, 0, 0, 1737, 1704, 1, 0, 0, 0, 1737, 1707, 1, 0, 0, 0, 1737, 1710, 1, 0, 0, 0, 1737, 1713, 1, 0, 0, 0, 1737, 1716, 1, 0, 0, 0, 1737, 1719, 1, 0, 0, 0, 1737, 1722, 1, 0, 0, 0, 1737, 1725, 1, 0, 0, 0, 1737, 1728, 1, 0, 0, 0, 1737, 1731, 1, 0, 0, 0, 1737, 1734, 1, 0, 0, 0, 1738, 236, 1, 0, 0, 0, 1739, 1740, 5, 35, 0, 0, 1740, 238, 1, 0, 0, 0, 1741, 1742, 5, 58, 0, 0, 1742, 240, 1, 0, 0, 0, 1743, 1744, 5, 44, 0, 0, 1744, 242, 1, 0, 0, 0, 1745, 1746, 5, 40, 0, 0, 1746, 244, 1, 0, 0, 0, 1747, 1748, 5, 41, 0, 0, 1748, 246, 1, 0, 0, 0, 1749, 1750, 5, 91, 0, 0, 1750, 248, 1, 0, 0, 0, 1751, 1752, 5, 93, 0, 0, 1752, 250, 1, 0, 0, 0, 1753, 1754, 5, 46, 0, 0, 1754, 252, 1, 0, 0, 0, 1755, 1756, 5, 60, 0, 0, 1756, 1757, 5, 60, 0, 0, 1757, 254, 1, 0, 0, 0, 1758, 1759, 5, 62, 0, 0, 1759, 1760, 5, 62, 0, 0, 1760, 256, 1, 0, 0, 0, 1761, 1762, 5, 43, 0, 0, 1762, 258, 1, 0, 0, 0, 1763, 1764, 5, 45, 0, 0, 1764, 260, 1, 0, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 262, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 264, 1, 0, 0, 0, 1769, 1770, 5, 42, 0, 0, 1770, 266, 1, 0, 0, 0, 1771, 1772, 5, 47, 0, 0, 1772, 268, 1, 0, 0, 0, 1773, 1774, 5, 123, 0, 0, 1774, 1775, 6, 133, 7, 0, 1775, 270, 1, 0, 0, 0, 1776, 1777, 5, 125, 0, 0, 1777, 1778, 6, 134, 8, 0, 1778, 272, 1, 0, 0, 0, 1779, 1782, 3, 275, 136, 0, 1780, 1782, 3, 283, 140, 0, 1781, 1779, 1, 0, 0, 0, 1781, 1780, 1, 0, 0, 0, 1782, 274, 1, 0, 0, 0, 1783, 1787, 3, 277, 137, 0, 1784, 1787, 3, 279, 138, 0, 1785, 1787, 3, 281, 139, 0, 1786, 1783, 1, 0, 0, 0, 1786, 1784, 1, 0, 0, 0, 1786, 1785, 1, 0, 0, 0, 1787, 276, 1, 0, 0, 0, 1788, 1792, 5, 37, 0, 0, 1789, 1791, 3, 291, 144, 0, 1790, 1789, 1, 0, 0, 0, 1791, 1794, 1, 0, 0, 0, 1792, 1790, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 1795, 1, 0, 0, 0, 1794, 1792, 1, 0, 0, 0, 1795, 1797, 5, 46, 0, 0, 1796, 1798, 3, 291, 144, 0, 1797, 1796, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 278, 1, 0, 0, 0, 1801, 1803, 3, 293, 145, 0, 1802, 1801, 1, 0, 0, 0, 1803, 1806, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1809, 5, 46, 0, 0, 1808, 1810, 3, 293, 145, 0, 1809, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1809, 1, 0, 0, 0, 1811, 1812, 1, 0, 0, 0, 1812, 280, 1, 0, 0, 0, 1813, 1817, 5, 36, 0, 0, 1814, 1816, 3, 295, 146, 0, 1815, 1814, 1, 0, 0, 0, 1816, 1819, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1817, 1, 0, 0, 0, 1820, 1822, 5, 46, 0, 0, 1821, 1823, 3, 295, 146, 0, 1822, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1822, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 282, 1, 0, 0, 0, 1826, 1830, 3, 287, 142, 0, 1827, 1830, 3, 289, 143, 0, 1828, 1830, 3, 285, 141, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1829, 1828, 1, 0, 0, 0, 1830, 284, 1, 0, 0, 0, 1831, 1833, 5, 37, 0, 0, 1832, 1834, 3, 291, 144, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 286, 1, 0, 0, 0, 1837, 1839, 3, 293, 145, 0, 1838, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1838, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 288, 1, 0, 0, 0, 1842, 1844, 5, 36, 0, 0, 1843, 1845, 3, 295, 146, 0, 1844, 1843, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1844, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 290, 1, 0, 0, 0, 1848, 1849, 7, 4, 0, 0, 1849, 292, 1, 0, 0, 0, 1850, 1851, 7, 5, 0, 0, 1851, 294, 1, 0, 0, 0, 1852, 1853, 7, 6, 0, 0, 1853, 296, 1, 0, 0, 0, 1854, 1858, 5, 39, 0, 0, 1855, 1856, 5, 92, 0, 0, 1856, 1859, 7, 18, 0, 0, 1857, 1859, 8, 15, 0, 0, 1858, 1855, 1, 0, 0, 0, 1858, 1857, 1, 0, 0, 0, 1859, 1860, 1, 0, 0, 0, 1860, 1861, 5, 39, 0, 0, 1861, 298, 1, 0, 0, 0, 1862, 1864, 3, 301, 149, 0, 1863, 1865, 7, 19, 0, 0, 1864, 1863, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 300, 1, 0, 0, 0, 1868, 1872, 5, 33, 0, 0, 1869, 1871, 3, 307, 152, 0, 1870, 1869, 1, 0, 0, 0, 1871, 1874, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1872, 1873, 1, 0, 0, 0, 1873, 302, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1875, 1879, 3, 305, 151, 0, 1876, 1878, 3, 307, 152, 0, 1877, 1876, 1, 0, 0, 0, 1878, 1881, 1, 0, 0, 0, 1879, 1877, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 304, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1883, 7, 7, 0, 0, 1883, 306, 1, 0, 0, 0, 1884, 1885, 7, 8, 0, 0, 1885, 308, 1, 0, 0, 0, 1886, 1887, 5, 64, 0, 0, 1887, 1888, 3, 303, 150, 0, 1888, 310, 1, 0, 0, 0, 1889, 1891, 7, 16, 0, 0, 1890, 1889, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 6, 154, 5, 0, 1895, 312, 1, 0, 0, 0, 1896, 1897, 5, 47, 0, 0, 1897, 1898, 5, 47, 0, 0, 1898, 1902, 1, 0, 0, 0, 1899, 1901, 8, 17, 0, 0, 1900, 1899, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1905, 1906, 6, 155, 6, 0, 1906, 314, 1, 0, 0, 0, 1907, 1908, 5, 47, 0, 0, 1908, 1909, 5, 42, 0, 0, 1909, 1913, 1, 0, 0, 0, 1910, 1912, 9, 0, 0, 0, 1911, 1910, 1, 0, 0, 0, 1912, 1915, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1916, 1917, 5, 42, 0, 0, 1917, 1918, 5, 47, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 6, 156, 6, 0, 1920, 316, 1, 0, 0, 0, 1921, 1923, 5, 60, 0, 0, 1922, 1924, 7, 20, 0, 0, 1923, 1922, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 5, 62, 0, 0, 1928, 1929, 6, 157, 9, 0, 1929, 318, 1, 0, 0, 0, 1930, 1936, 5, 34, 0, 0, 1931, 1932, 5, 92, 0, 0, 1932, 1935, 5, 34, 0, 0, 1933, 1935, 8, 9, 0, 0, 1934, 1931, 1, 0, 0, 0, 1934, 1933, 1, 0, 0, 0, 1935, 1938, 1, 0, 0, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1939, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1939, 1940, 5, 34, 0, 0, 1940, 1941, 6, 158, 10, 0, 1941, 320, 1, 0, 0, 0, 1942, 1944, 7, 16, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1948, 6, 159, 5, 0, 1948, 322, 1, 0, 0, 0, 1949, 1950, 5, 47, 0, 0, 1950, 1951, 5, 47, 0, 0, 1951, 1955, 1, 0, 0, 0, 1952, 1954, 8, 17, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1958, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1958, 1959, 6, 160, 6, 0, 1959, 324, 1, 0, 0, 0, 1960, 1961, 5, 47, 0, 0, 1961, 1962, 5, 42, 0, 0, 1962, 1966, 1, 0, 0, 0, 1963, 1965, 9, 0, 0, 0, 1964, 1963, 1, 0, 0, 0, 1965, 1968, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1969, 1, 0, 0, 0, 1968, 1966, 1, 0, 0, 0, 1969, 1970, 5, 42, 0, 0, 1970, 1971, 5, 47, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 6, 161, 6, 0, 1973, 326, 1, 0, 0, 0, 67, 0, 1, 2, 436, 627, 804, 815, 823, 871, 933, 938, 945, 950, 957, 962, 969, 976, 981, 988, 993, 998, 1005, 1011, 1013, 1018, 1025, 1030, 1042, 1055, 1057, 1062, 1066, 1068, 1071, 1077, 1080, 1085, 1088, 1095, 1105, 1116, 1737, 1781, 1786, 1792, 1799, 1804, 1811, 1817, 1824, 1829, 1835, 1840, 1846, 1858, 1866, 1872, 1879, 1892, 1902, 1913, 1925, 1934, 1936, 1945, 1955, 1966, 11, 1, 0, 0, 1, 66, 1, 1, 80, 2, 1, 81, 3, 1, 107, 4, 0, 1, 0, 0, 2, 0, 1, 133, 5, 1, 134, 6, 1, 157, 7, 1, 158, 8] \ No newline at end of file diff --git a/gen/KickCLexer.java b/gen/KickCLexer.java new file mode 100644 index 000000000..95c1819b9 --- /dev/null +++ b/gen/KickCLexer.java @@ -0,0 +1,1596 @@ +// Generated from D:/Users/svenv/OneDrive/Documents/GitHub/kickc/src/main/antlr4/dk/camelot64/kickc/parser\KickCLexer.g4 by ANTLR 4.10.1 + + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class KickCLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + TYPEDEFNAME=1, CURLY_BEGIN=2, CURLY_END=3, BRACKET_BEGIN=4, BRACKET_END=5, + PAR_BEGIN=6, PAR_END=7, SEMICOLON=8, COLON=9, COMMA=10, RANGE=11, PARAM_LIST=12, + CONDITION=13, DOT=14, ARROW=15, PLUS=16, MINUS=17, ASTERISK=18, DIVIDE=19, + MODULO=20, INC=21, DEC=22, AND=23, BIT_NOT=24, BIT_XOR=25, BIT_OR=26, + SHIFT_LEFT=27, SHIFT_RIGHT=28, EQUAL=29, NOT_EQUAL=30, LESS_THAN=31, LESS_THAN_EQUAL=32, + GREATER_THAN_EQUAL=33, GREATER_THAN=34, LOGIC_AND=35, LOGIC_OR=36, ASSIGN=37, + ASSIGN_COMPOUND=38, TYPEDEF=39, CONST=40, EXTERN=41, EXPORT=42, ALIGN=43, + INLINE=44, VOLATILE=45, STATIC=46, INTERRUPT=47, REGISTER=48, LOCAL_RESERVE=49, + ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, FORM_SSA=54, + FORM_MA=55, INTRINSIC=56, CALLINGCONVENTION=57, IF=58, ELSE=59, WHILE=60, + DO=61, FOR=62, SWITCH=63, RETURN=64, BREAK=65, CONTINUE=66, GOTO=67, ASM=68, + DEFAULT=69, CASE=70, STRUCT=71, UNION=72, ENUM=73, SIZEOF=74, TYPEID=75, + DEFINED=76, KICKASM=77, LOGIC_NOT=78, SIMPLETYPE=79, BOOLEAN=80, KICKASM_BODY=81, + IMPORT=82, INCLUDE=83, PRAGMA=84, DEFINE=85, DEFINE_CONTINUE=86, UNDEF=87, + IFDEF=88, IFNDEF=89, IFIF=90, ELIF=91, IFELSE=92, ENDIF=93, ERROR=94, + TOKEN_STRINGIZE=95, TOKEN_MERGE=96, NUMBER=97, NUMFLOAT=98, BINFLOAT=99, + DECFLOAT=100, HEXFLOAT=101, NUMINT=102, BININTEGER=103, DECINTEGER=104, + HEXINTEGER=105, NAME=106, STRING=107, CHAR=108, WS=109, COMMENT_LINE=110, + COMMENT_BLOCK=111, ASM_BYTE=112, ASM_MNEMONIC=113, ASM_IMM=114, ASM_COLON=115, + ASM_COMMA=116, ASM_PAR_BEGIN=117, ASM_PAR_END=118, ASM_BRACKET_BEGIN=119, + ASM_BRACKET_END=120, ASM_DOT=121, ASM_SHIFT_LEFT=122, ASM_SHIFT_RIGHT=123, + ASM_PLUS=124, ASM_MINUS=125, ASM_LESS_THAN=126, ASM_GREATER_THAN=127, + ASM_MULTIPLY=128, ASM_DIVIDE=129, ASM_CURLY_BEGIN=130, ASM_CURLY_END=131, + ASM_NUMBER=132, ASM_NUMFLOAT=133, ASM_BINFLOAT=134, ASM_DECFLOAT=135, + ASM_HEXFLOAT=136, ASM_NUMINT=137, ASM_BININTEGER=138, ASM_DECINTEGER=139, + ASM_HEXINTEGER=140, ASM_CHAR=141, ASM_MULTI_REL=142, ASM_MULTI_NAME=143, + ASM_NAME=144, ASM_TAG=145, ASM_WS=146, ASM_COMMENT_LINE=147, ASM_COMMENT_BLOCK=148, + IMPORT_SYSTEMFILE=149, IMPORT_LOCALFILE=150, IMPORT_WS=151, IMPORT_COMMENT_LINE=152, + IMPORT_COMMENT_BLOCK=153; + public static final int + ASM_MODE=1, IMPORT_MODE=2; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE", "ASM_MODE", "IMPORT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", "PAR_BEGIN", + "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", "CONDITION", + "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", "INC", + "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", + "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", + "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", + "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", + "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", + "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", + "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", + "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", + "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", + "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", + "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", "STRING", + "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", + "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", + "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_BINDIGIT", + "ASM_DECDIGIT", "ASM_HEXDIGIT", "ASM_CHAR", "ASM_MULTI_REL", "ASM_MULTI_NAME", + "ASM_NAME", "ASM_NAME_START", "ASM_NAME_CHAR", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", + "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", + "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, null, null, "';'", null, null, "'..'", + "'...'", "'?'", null, "'->'", null, null, null, null, "'%'", "'++'", + "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, + "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", + "'extern'", "'__export'", "'__align'", "'inline'", "'volatile'", "'static'", + "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", + "'__mem'", "'__far'", "'__ssa'", "'__ma'", "'__intrinsic'", null, "'if'", + "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", + "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", "'union'", + "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", "'!'", null, + null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", null, + "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", "'#endif'", + "'#error'", null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, "'.byte'", null, "'#'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "TYPEDEFNAME", "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", + "PAR_BEGIN", "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", + "CONDITION", "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", + "INC", "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", + "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", + "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", + "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", + "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", + "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", + "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", + "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", + "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", + "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", + "STRING", "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", + "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", + "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL", + "ASM_MULTI_NAME", "ASM_NAME", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", + "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", + "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + + /** The C-Parser. Used for importing C-files and communicating with the Parser about typedefs. */ + CParser cParser; + /** True if the next CURLY starts ASM_MODE */ + boolean asmEnter = false; + /** Counts the nested curlies inside ASM_MODE to determine when to exit ASM_MODE */ + int asmCurlyCount = 0; + + public KickCLexer(CharStream input, CParser cParser) { + this(input); + this.cParser = cParser; + } + + + public KickCLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "KickCLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + @Override + public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { + switch (ruleIndex) { + case 0: + CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); + break; + case 66: + ASM_action((RuleContext)_localctx, actionIndex); + break; + case 80: + IMPORT_action((RuleContext)_localctx, actionIndex); + break; + case 81: + INCLUDE_action((RuleContext)_localctx, actionIndex); + break; + case 107: + NAME_action((RuleContext)_localctx, actionIndex); + break; + case 133: + ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); + break; + case 134: + ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); + break; + case 157: + IMPORT_SYSTEMFILE_action((RuleContext)_localctx, actionIndex); + break; + case 158: + IMPORT_LOCALFILE_action((RuleContext)_localctx, actionIndex); + break; + } + } + private void CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 0: + if(asmEnter) { pushMode(ASM_MODE); asmEnter=false; } + break; + } + } + private void ASM_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 1: + asmEnter=true; + break; + } + } + private void IMPORT_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 2: + pushMode(IMPORT_MODE); + break; + } + } + private void INCLUDE_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 3: + pushMode(IMPORT_MODE); + break; + } + } + private void NAME_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 4: + if(cParser.isTypedef(getText())) setType(TYPEDEFNAME); + break; + } + } + private void ASM_CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 5: + asmCurlyCount++; + break; + } + } + private void ASM_CURLY_END_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 6: + asmCurlyCount--; if(asmCurlyCount<0) { popMode(); } + break; + } + } + private void IMPORT_SYSTEMFILE_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 7: + popMode(); + break; + } + } + private void IMPORT_LOCALFILE_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 8: + popMode(); + break; + } + } + + public static final String _serializedATN = + "\u0004\u0000\u0099\u07b6\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ + "\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007"+ + "\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007"+ + "\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b"+ + "\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007"+ + "\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002"+ + "\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002"+ + "\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002"+ + "\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002"+ + "\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002"+ + "\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002"+ + "\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#"+ + "\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ + "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ + "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+ + "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ + "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ + "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ + "A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+ + "F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+ + "K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+ + "P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+ + "U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+ + "Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+ + "_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002"+ + "d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002"+ + "i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002"+ + "n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002"+ + "s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002"+ + "x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007{\u0002|\u0007|\u0002"+ + "}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002\u0080\u0007\u0080"+ + "\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002\u0083\u0007\u0083"+ + "\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002\u0086\u0007\u0086"+ + "\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002\u0089\u0007\u0089"+ + "\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b\u0002\u008c\u0007\u008c"+ + "\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e\u0002\u008f\u0007\u008f"+ + "\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091\u0002\u0092\u0007\u0092"+ + "\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094\u0002\u0095\u0007\u0095"+ + "\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097\u0002\u0098\u0007\u0098"+ + "\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007\u009b"+ + "\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007\u009e"+ + "\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007\u00a1"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005"+ + "\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001"+ + "\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001"+ + "\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ + "\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+ + "\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ + "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0003$\u01b5\b$\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + "+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001"+ + "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ + "/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u00012\u00012\u0001"+ + "2\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u00014\u0001"+ + "4\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u00015\u0001"+ + "6\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00037\u0274\b7\u00018\u00018\u0001"+ + "8\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001"+ + ":\u0001:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001"+ + ">\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001"+ + "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ + "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001"+ + "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ + "H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001"+ + "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0003M\u0325\bM\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0003N\u0330\bN\u0001O\u0001O\u0001O\u0001O\u0005"+ + "O\u0336\bO\nO\fO\u0339\tO\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001"+ + "P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0003T\u0368"+ + "\bT\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ + "V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+ + "W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001"+ + "Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001[\u0001"+ + "[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ + "\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001"+ + "_\u0003_\u03a6\b_\u0001`\u0001`\u0001`\u0003`\u03ab\b`\u0001a\u0001a\u0001"+ + "a\u0001a\u0001a\u0003a\u03b2\ba\u0001a\u0005a\u03b5\ba\na\fa\u03b8\ta"+ + "\u0001a\u0001a\u0004a\u03bc\ba\u000ba\fa\u03bd\u0001b\u0005b\u03c1\bb"+ + "\nb\fb\u03c4\tb\u0001b\u0001b\u0004b\u03c8\bb\u000bb\fb\u03c9\u0001c\u0001"+ + "c\u0001c\u0001c\u0001c\u0003c\u03d1\bc\u0001c\u0005c\u03d4\bc\nc\fc\u03d7"+ + "\tc\u0001c\u0001c\u0004c\u03db\bc\u000bc\fc\u03dc\u0001d\u0001d\u0001"+ + "d\u0003d\u03e2\bd\u0001d\u0001d\u0001d\u0003d\u03e7\bd\u0001e\u0001e\u0001"+ + "e\u0004e\u03ec\be\u000be\fe\u03ed\u0001e\u0001e\u0004e\u03f2\be\u000b"+ + "e\fe\u03f3\u0003e\u03f6\be\u0001f\u0004f\u03f9\bf\u000bf\ff\u03fa\u0001"+ + "g\u0001g\u0001g\u0001g\u0001g\u0003g\u0402\bg\u0001g\u0004g\u0405\bg\u000b"+ + "g\fg\u0406\u0001h\u0001h\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0005"+ + "k\u0411\bk\nk\fk\u0414\tk\u0001k\u0001k\u0001l\u0001l\u0001m\u0001m\u0001"+ + "n\u0001n\u0001n\u0001n\u0005n\u0420\bn\nn\fn\u0423\tn\u0001n\u0001n\u0003"+ + "n\u0427\bn\u0001n\u0001n\u0003n\u042b\bn\u0003n\u042d\bn\u0001n\u0003"+ + "n\u0430\bn\u0001o\u0001o\u0001o\u0001o\u0003o\u0436\bo\u0001o\u0003o\u0439"+ + "\bo\u0001o\u0001o\u0001o\u0003o\u043e\bo\u0001o\u0003o\u0441\bo\u0001"+ + "o\u0001o\u0001p\u0004p\u0446\bp\u000bp\fp\u0447\u0001p\u0001p\u0001q\u0001"+ + "q\u0001q\u0001q\u0005q\u0450\bq\nq\fq\u0453\tq\u0001q\u0001q\u0001r\u0001"+ + "r\u0001r\u0001r\u0005r\u045b\br\nr\fr\u045e\tr\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0003t\u06ca\bt\u0001u\u0001u\u0001v\u0001"+ + "v\u0001w\u0001w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001"+ + "{\u0001|\u0001|\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f"+ + "\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082"+ + "\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085"+ + "\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087"+ + "\u0001\u0087\u0003\u0087\u06f6\b\u0087\u0001\u0088\u0001\u0088\u0001\u0088"+ + "\u0003\u0088\u06fb\b\u0088\u0001\u0089\u0001\u0089\u0005\u0089\u06ff\b"+ + "\u0089\n\u0089\f\u0089\u0702\t\u0089\u0001\u0089\u0001\u0089\u0004\u0089"+ + "\u0706\b\u0089\u000b\u0089\f\u0089\u0707\u0001\u008a\u0005\u008a\u070b"+ + "\b\u008a\n\u008a\f\u008a\u070e\t\u008a\u0001\u008a\u0001\u008a\u0004\u008a"+ + "\u0712\b\u008a\u000b\u008a\f\u008a\u0713\u0001\u008b\u0001\u008b\u0005"+ + "\u008b\u0718\b\u008b\n\u008b\f\u008b\u071b\t\u008b\u0001\u008b\u0001\u008b"+ + "\u0004\u008b\u071f\b\u008b\u000b\u008b\f\u008b\u0720\u0001\u008c\u0001"+ + "\u008c\u0001\u008c\u0003\u008c\u0726\b\u008c\u0001\u008d\u0001\u008d\u0004"+ + "\u008d\u072a\b\u008d\u000b\u008d\f\u008d\u072b\u0001\u008e\u0004\u008e"+ + "\u072f\b\u008e\u000b\u008e\f\u008e\u0730\u0001\u008f\u0001\u008f\u0004"+ + "\u008f\u0735\b\u008f\u000b\u008f\f\u008f\u0736\u0001\u0090\u0001\u0090"+ + "\u0001\u0091\u0001\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093"+ + "\u0001\u0093\u0001\u0093\u0003\u0093\u0743\b\u0093\u0001\u0093\u0001\u0093"+ + "\u0001\u0094\u0001\u0094\u0004\u0094\u0749\b\u0094\u000b\u0094\f\u0094"+ + "\u074a\u0001\u0095\u0001\u0095\u0005\u0095\u074f\b\u0095\n\u0095\f\u0095"+ + "\u0752\t\u0095\u0001\u0096\u0001\u0096\u0005\u0096\u0756\b\u0096\n\u0096"+ + "\f\u0096\u0759\t\u0096\u0001\u0097\u0001\u0097\u0001\u0098\u0001\u0098"+ + "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0004\u009a\u0763\b\u009a"+ + "\u000b\u009a\f\u009a\u0764\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b"+ + "\u0001\u009b\u0001\u009b\u0005\u009b\u076d\b\u009b\n\u009b\f\u009b\u0770"+ + "\t\u009b\u0001\u009b\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001"+ + "\u009c\u0005\u009c\u0778\b\u009c\n\u009c\f\u009c\u077b\t\u009c\u0001\u009c"+ + "\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ + "\u0004\u009d\u0784\b\u009d\u000b\u009d\f\u009d\u0785\u0001\u009d\u0001"+ + "\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0005"+ + "\u009e\u078f\b\u009e\n\u009e\f\u009e\u0792\t\u009e\u0001\u009e\u0001\u009e"+ + "\u0001\u009e\u0001\u009f\u0004\u009f\u0798\b\u009f\u000b\u009f\f\u009f"+ + "\u0799\u0001\u009f\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ + "\u00a0\u0005\u00a0\u07a2\b\u00a0\n\u00a0\f\u00a0\u07a5\t\u00a0\u0001\u00a0"+ + "\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0005\u00a1"+ + "\u07ad\b\u00a1\n\u00a1\f\u00a1\u07b0\t\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ + "\u00a1\u0001\u00a1\u0001\u00a1\u0004\u0337\u045c\u0779\u07ae\u0000\u00a2"+ + "\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+ + "\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+ + "\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+ + "1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+ + "Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085"+ + "C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097L\u0099"+ + "M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00ad"+ + "W\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1"+ + "a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3\u0000"+ + "\u00d5\u0000\u00d7\u0000\u00d9j\u00db\u0000\u00dd\u0000\u00dfk\u00e1l"+ + "\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ + "v\u00f7w\u00f9x\u00fby\u00fdz\u00ff{\u0101|\u0103}\u0105~\u0107\u007f"+ + "\u0109\u0080\u010b\u0081\u010d\u0082\u010f\u0083\u0111\u0084\u0113\u0085"+ + "\u0115\u0086\u0117\u0087\u0119\u0088\u011b\u0089\u011d\u008a\u011f\u008b"+ + "\u0121\u008c\u0123\u0000\u0125\u0000\u0127\u0000\u0129\u008d\u012b\u008e"+ + "\u012d\u008f\u012f\u0090\u0131\u0000\u0133\u0000\u0135\u0091\u0137\u0092"+ + "\u0139\u0093\u013b\u0094\u013d\u0095\u013f\u0096\u0141\u0097\u0143\u0098"+ + "\u0145\u0099\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSUUssuu\n\u0000"+ + "BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb\u0001\u00000"+ + "1\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004\u000009AZ__"+ + "az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000aammsu\u0007"+ + "\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'\u0004\u0000"+ + "\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\"\'\'ffnnrr\u0002"+ + "\u0000++--\u0005\u0000-9AZ\\\\__az\u08bb\u0000\u0003\u0001\u0000\u0000"+ + "\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+ + "\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+ + "\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+ + "\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+ + "\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+ + "\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+ + "\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+ + "!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+ + "\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+ + "\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+ + "\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+ + "\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+ + "\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+ + "\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+ + "\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+ + "\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+ + "\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+ + "\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+ + "\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+ + "\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+ + "\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+ + "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+ + "\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+ + "\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000"+ + "\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000"+ + "\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y"+ + "\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000"+ + "\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000"+ + "\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000"+ + "\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000"+ + "\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000"+ + "\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000"+ + "\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000"+ + "\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000"+ + "\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000"+ + "\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000"+ + "\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000"+ + "\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000"+ + "\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000"+ + "\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000"+ + "\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000"+ + "\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000"+ + "\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000"+ + "\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000"+ + "\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000"+ + "\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000"+ + "\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000"+ + "\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000"+ + "\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000"+ + "\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000"+ + "\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000"+ + "\u0000\u0000\u0001\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001\u0000"+ + "\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001\u0000"+ + "\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001\u0000"+ + "\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001\u0000"+ + "\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001\u0000"+ + "\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001\u0000"+ + "\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001\u0000"+ + "\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001\u0000"+ + "\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001\u0000"+ + "\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001\u0000"+ + "\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001\u0000"+ + "\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001\u0000"+ + "\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001\u0000"+ + "\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001\u0000"+ + "\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0129\u0001\u0000"+ + "\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001\u0000"+ + "\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0135\u0001\u0000"+ + "\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001\u0000"+ + "\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0002\u013d\u0001\u0000"+ + "\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001\u0000"+ + "\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001\u0000"+ + "\u0000\u0000\u0003\u0147\u0001\u0000\u0000\u0000\u0005\u014a\u0001\u0000"+ + "\u0000\u0000\u0007\u014c\u0001\u0000\u0000\u0000\t\u014e\u0001\u0000\u0000"+ + "\u0000\u000b\u0150\u0001\u0000\u0000\u0000\r\u0152\u0001\u0000\u0000\u0000"+ + "\u000f\u0154\u0001\u0000\u0000\u0000\u0011\u0156\u0001\u0000\u0000\u0000"+ + "\u0013\u0158\u0001\u0000\u0000\u0000\u0015\u015a\u0001\u0000\u0000\u0000"+ + "\u0017\u015d\u0001\u0000\u0000\u0000\u0019\u0161\u0001\u0000\u0000\u0000"+ + "\u001b\u0163\u0001\u0000\u0000\u0000\u001d\u0165\u0001\u0000\u0000\u0000"+ + "\u001f\u0168\u0001\u0000\u0000\u0000!\u016a\u0001\u0000\u0000\u0000#\u016c"+ + "\u0001\u0000\u0000\u0000%\u016e\u0001\u0000\u0000\u0000\'\u0170\u0001"+ + "\u0000\u0000\u0000)\u0172\u0001\u0000\u0000\u0000+\u0175\u0001\u0000\u0000"+ + "\u0000-\u0178\u0001\u0000\u0000\u0000/\u017a\u0001\u0000\u0000\u00001"+ + "\u017c\u0001\u0000\u0000\u00003\u017e\u0001\u0000\u0000\u00005\u0180\u0001"+ + "\u0000\u0000\u00007\u0183\u0001\u0000\u0000\u00009\u0186\u0001\u0000\u0000"+ + "\u0000;\u0189\u0001\u0000\u0000\u0000=\u018c\u0001\u0000\u0000\u0000?"+ + "\u018e\u0001\u0000\u0000\u0000A\u0191\u0001\u0000\u0000\u0000C\u0194\u0001"+ + "\u0000\u0000\u0000E\u0196\u0001\u0000\u0000\u0000G\u0199\u0001\u0000\u0000"+ + "\u0000I\u019c\u0001\u0000\u0000\u0000K\u01b4\u0001\u0000\u0000\u0000M"+ + "\u01b6\u0001\u0000\u0000\u0000O\u01be\u0001\u0000\u0000\u0000Q\u01c4\u0001"+ + "\u0000\u0000\u0000S\u01cb\u0001\u0000\u0000\u0000U\u01d4\u0001\u0000\u0000"+ + "\u0000W\u01dc\u0001\u0000\u0000\u0000Y\u01e3\u0001\u0000\u0000\u0000["+ + "\u01ec\u0001\u0000\u0000\u0000]\u01f3\u0001\u0000\u0000\u0000_\u01ff\u0001"+ + "\u0000\u0000\u0000a\u0208\u0001\u0000\u0000\u0000c\u0215\u0001\u0000\u0000"+ + "\u0000e\u021f\u0001\u0000\u0000\u0000g\u0224\u0001\u0000\u0000\u0000i"+ + "\u022a\u0001\u0000\u0000\u0000k\u0230\u0001\u0000\u0000\u0000m\u0236\u0001"+ + "\u0000\u0000\u0000o\u023b\u0001\u0000\u0000\u0000q\u0273\u0001\u0000\u0000"+ + "\u0000s\u0275\u0001\u0000\u0000\u0000u\u0278\u0001\u0000\u0000\u0000w"+ + "\u027d\u0001\u0000\u0000\u0000y\u0283\u0001\u0000\u0000\u0000{\u0286\u0001"+ + "\u0000\u0000\u0000}\u028a\u0001\u0000\u0000\u0000\u007f\u0291\u0001\u0000"+ + "\u0000\u0000\u0081\u0298\u0001\u0000\u0000\u0000\u0083\u029e\u0001\u0000"+ + "\u0000\u0000\u0085\u02a7\u0001\u0000\u0000\u0000\u0087\u02ac\u0001\u0000"+ + "\u0000\u0000\u0089\u02b2\u0001\u0000\u0000\u0000\u008b\u02ba\u0001\u0000"+ + "\u0000\u0000\u008d\u02bf\u0001\u0000\u0000\u0000\u008f\u02c6\u0001\u0000"+ + "\u0000\u0000\u0091\u02cc\u0001\u0000\u0000\u0000\u0093\u02d1\u0001\u0000"+ + "\u0000\u0000\u0095\u02d8\u0001\u0000\u0000\u0000\u0097\u02df\u0001\u0000"+ + "\u0000\u0000\u0099\u02e7\u0001\u0000\u0000\u0000\u009b\u02ef\u0001\u0000"+ + "\u0000\u0000\u009d\u0324\u0001\u0000\u0000\u0000\u009f\u032f\u0001\u0000"+ + "\u0000\u0000\u00a1\u0331\u0001\u0000\u0000\u0000\u00a3\u033d\u0001\u0000"+ + "\u0000\u0000\u00a5\u0347\u0001\u0000\u0000\u0000\u00a7\u0352\u0001\u0000"+ + "\u0000\u0000\u00a9\u035a\u0001\u0000\u0000\u0000\u00ab\u0367\u0001\u0000"+ + "\u0000\u0000\u00ad\u0369\u0001\u0000\u0000\u0000\u00af\u0370\u0001\u0000"+ + "\u0000\u0000\u00b1\u0377\u0001\u0000\u0000\u0000\u00b3\u037f\u0001\u0000"+ + "\u0000\u0000\u00b5\u0383\u0001\u0000\u0000\u0000\u00b7\u0389\u0001\u0000"+ + "\u0000\u0000\u00b9\u038f\u0001\u0000\u0000\u0000\u00bb\u0396\u0001\u0000"+ + "\u0000\u0000\u00bd\u039d\u0001\u0000\u0000\u0000\u00bf\u03a0\u0001\u0000"+ + "\u0000\u0000\u00c1\u03a5\u0001\u0000\u0000\u0000\u00c3\u03aa\u0001\u0000"+ + "\u0000\u0000\u00c5\u03b1\u0001\u0000\u0000\u0000\u00c7\u03c2\u0001\u0000"+ + "\u0000\u0000\u00c9\u03d0\u0001\u0000\u0000\u0000\u00cb\u03e1\u0001\u0000"+ + "\u0000\u0000\u00cd\u03f5\u0001\u0000\u0000\u0000\u00cf\u03f8\u0001\u0000"+ + "\u0000\u0000\u00d1\u0401\u0001\u0000\u0000\u0000\u00d3\u0408\u0001\u0000"+ + "\u0000\u0000\u00d5\u040a\u0001\u0000\u0000\u0000\u00d7\u040c\u0001\u0000"+ + "\u0000\u0000\u00d9\u040e\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000"+ + "\u0000\u0000\u00dd\u0419\u0001\u0000\u0000\u0000\u00df\u041b\u0001\u0000"+ + "\u0000\u0000\u00e1\u0431\u0001\u0000\u0000\u0000\u00e3\u0445\u0001\u0000"+ + "\u0000\u0000\u00e5\u044b\u0001\u0000\u0000\u0000\u00e7\u0456\u0001\u0000"+ + "\u0000\u0000\u00e9\u0464\u0001\u0000\u0000\u0000\u00eb\u06c9\u0001\u0000"+ + "\u0000\u0000\u00ed\u06cb\u0001\u0000\u0000\u0000\u00ef\u06cd\u0001\u0000"+ + "\u0000\u0000\u00f1\u06cf\u0001\u0000\u0000\u0000\u00f3\u06d1\u0001\u0000"+ + "\u0000\u0000\u00f5\u06d3\u0001\u0000\u0000\u0000\u00f7\u06d5\u0001\u0000"+ + "\u0000\u0000\u00f9\u06d7\u0001\u0000\u0000\u0000\u00fb\u06d9\u0001\u0000"+ + "\u0000\u0000\u00fd\u06db\u0001\u0000\u0000\u0000\u00ff\u06de\u0001\u0000"+ + "\u0000\u0000\u0101\u06e1\u0001\u0000\u0000\u0000\u0103\u06e3\u0001\u0000"+ + "\u0000\u0000\u0105\u06e5\u0001\u0000\u0000\u0000\u0107\u06e7\u0001\u0000"+ + "\u0000\u0000\u0109\u06e9\u0001\u0000\u0000\u0000\u010b\u06eb\u0001\u0000"+ + "\u0000\u0000\u010d\u06ed\u0001\u0000\u0000\u0000\u010f\u06f0\u0001\u0000"+ + "\u0000\u0000\u0111\u06f5\u0001\u0000\u0000\u0000\u0113\u06fa\u0001\u0000"+ + "\u0000\u0000\u0115\u06fc\u0001\u0000\u0000\u0000\u0117\u070c\u0001\u0000"+ + "\u0000\u0000\u0119\u0715\u0001\u0000\u0000\u0000\u011b\u0725\u0001\u0000"+ + "\u0000\u0000\u011d\u0727\u0001\u0000\u0000\u0000\u011f\u072e\u0001\u0000"+ + "\u0000\u0000\u0121\u0732\u0001\u0000\u0000\u0000\u0123\u0738\u0001\u0000"+ + "\u0000\u0000\u0125\u073a\u0001\u0000\u0000\u0000\u0127\u073c\u0001\u0000"+ + "\u0000\u0000\u0129\u073e\u0001\u0000\u0000\u0000\u012b\u0746\u0001\u0000"+ + "\u0000\u0000\u012d\u074c\u0001\u0000\u0000\u0000\u012f\u0753\u0001\u0000"+ + "\u0000\u0000\u0131\u075a\u0001\u0000\u0000\u0000\u0133\u075c\u0001\u0000"+ + "\u0000\u0000\u0135\u075e\u0001\u0000\u0000\u0000\u0137\u0762\u0001\u0000"+ + "\u0000\u0000\u0139\u0768\u0001\u0000\u0000\u0000\u013b\u0773\u0001\u0000"+ + "\u0000\u0000\u013d\u0781\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000"+ + "\u0000\u0000\u0141\u0797\u0001\u0000\u0000\u0000\u0143\u079d\u0001\u0000"+ + "\u0000\u0000\u0145\u07a8\u0001\u0000\u0000\u0000\u0147\u0148\u0005{\u0000"+ + "\u0000\u0148\u0149\u0006\u0000\u0000\u0000\u0149\u0004\u0001\u0000\u0000"+ + "\u0000\u014a\u014b\u0005}\u0000\u0000\u014b\u0006\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0005[\u0000\u0000\u014d\b\u0001\u0000\u0000\u0000\u014e"+ + "\u014f\u0005]\u0000\u0000\u014f\n\u0001\u0000\u0000\u0000\u0150\u0151"+ + "\u0005(\u0000\u0000\u0151\f\u0001\u0000\u0000\u0000\u0152\u0153\u0005"+ + ")\u0000\u0000\u0153\u000e\u0001\u0000\u0000\u0000\u0154\u0155\u0005;\u0000"+ + "\u0000\u0155\u0010\u0001\u0000\u0000\u0000\u0156\u0157\u0005:\u0000\u0000"+ + "\u0157\u0012\u0001\u0000\u0000\u0000\u0158\u0159\u0005,\u0000\u0000\u0159"+ + "\u0014\u0001\u0000\u0000\u0000\u015a\u015b\u0005.\u0000\u0000\u015b\u015c"+ + "\u0005.\u0000\u0000\u015c\u0016\u0001\u0000\u0000\u0000\u015d\u015e\u0005"+ + ".\u0000\u0000\u015e\u015f\u0005.\u0000\u0000\u015f\u0160\u0005.\u0000"+ + "\u0000\u0160\u0018\u0001\u0000\u0000\u0000\u0161\u0162\u0005?\u0000\u0000"+ + "\u0162\u001a\u0001\u0000\u0000\u0000\u0163\u0164\u0005.\u0000\u0000\u0164"+ + "\u001c\u0001\u0000\u0000\u0000\u0165\u0166\u0005-\u0000\u0000\u0166\u0167"+ + "\u0005>\u0000\u0000\u0167\u001e\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ + "+\u0000\u0000\u0169 \u0001\u0000\u0000\u0000\u016a\u016b\u0005-\u0000"+ + "\u0000\u016b\"\u0001\u0000\u0000\u0000\u016c\u016d\u0005*\u0000\u0000"+ + "\u016d$\u0001\u0000\u0000\u0000\u016e\u016f\u0005/\u0000\u0000\u016f&"+ + "\u0001\u0000\u0000\u0000\u0170\u0171\u0005%\u0000\u0000\u0171(\u0001\u0000"+ + "\u0000\u0000\u0172\u0173\u0005+\u0000\u0000\u0173\u0174\u0005+\u0000\u0000"+ + "\u0174*\u0001\u0000\u0000\u0000\u0175\u0176\u0005-\u0000\u0000\u0176\u0177"+ + "\u0005-\u0000\u0000\u0177,\u0001\u0000\u0000\u0000\u0178\u0179\u0005&"+ + "\u0000\u0000\u0179.\u0001\u0000\u0000\u0000\u017a\u017b\u0005~\u0000\u0000"+ + "\u017b0\u0001\u0000\u0000\u0000\u017c\u017d\u0005^\u0000\u0000\u017d2"+ + "\u0001\u0000\u0000\u0000\u017e\u017f\u0005|\u0000\u0000\u017f4\u0001\u0000"+ + "\u0000\u0000\u0180\u0181\u0005<\u0000\u0000\u0181\u0182\u0005<\u0000\u0000"+ + "\u01826\u0001\u0000\u0000\u0000\u0183\u0184\u0005>\u0000\u0000\u0184\u0185"+ + "\u0005>\u0000\u0000\u01858\u0001\u0000\u0000\u0000\u0186\u0187\u0005="+ + "\u0000\u0000\u0187\u0188\u0005=\u0000\u0000\u0188:\u0001\u0000\u0000\u0000"+ + "\u0189\u018a\u0005!\u0000\u0000\u018a\u018b\u0005=\u0000\u0000\u018b<"+ + "\u0001\u0000\u0000\u0000\u018c\u018d\u0005<\u0000\u0000\u018d>\u0001\u0000"+ + "\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f\u0190\u0005=\u0000\u0000"+ + "\u0190@\u0001\u0000\u0000\u0000\u0191\u0192\u0005>\u0000\u0000\u0192\u0193"+ + "\u0005=\u0000\u0000\u0193B\u0001\u0000\u0000\u0000\u0194\u0195\u0005>"+ + "\u0000\u0000\u0195D\u0001\u0000\u0000\u0000\u0196\u0197\u0005&\u0000\u0000"+ + "\u0197\u0198\u0005&\u0000\u0000\u0198F\u0001\u0000\u0000\u0000\u0199\u019a"+ + "\u0005|\u0000\u0000\u019a\u019b\u0005|\u0000\u0000\u019bH\u0001\u0000"+ + "\u0000\u0000\u019c\u019d\u0005=\u0000\u0000\u019dJ\u0001\u0000\u0000\u0000"+ + "\u019e\u019f\u0005+\u0000\u0000\u019f\u01b5\u0005=\u0000\u0000\u01a0\u01a1"+ + "\u0005-\u0000\u0000\u01a1\u01b5\u0005=\u0000\u0000\u01a2\u01a3\u0005*"+ + "\u0000\u0000\u01a3\u01b5\u0005=\u0000\u0000\u01a4\u01a5\u0005/\u0000\u0000"+ + "\u01a5\u01b5\u0005=\u0000\u0000\u01a6\u01a7\u0005%\u0000\u0000\u01a7\u01b5"+ + "\u0005=\u0000\u0000\u01a8\u01a9\u0005<\u0000\u0000\u01a9\u01aa\u0005<"+ + "\u0000\u0000\u01aa\u01b5\u0005=\u0000\u0000\u01ab\u01ac\u0005>\u0000\u0000"+ + "\u01ac\u01ad\u0005>\u0000\u0000\u01ad\u01b5\u0005=\u0000\u0000\u01ae\u01af"+ + "\u0005&\u0000\u0000\u01af\u01b5\u0005=\u0000\u0000\u01b0\u01b1\u0005|"+ + "\u0000\u0000\u01b1\u01b5\u0005=\u0000\u0000\u01b2\u01b3\u0005^\u0000\u0000"+ + "\u01b3\u01b5\u0005=\u0000\u0000\u01b4\u019e\u0001\u0000\u0000\u0000\u01b4"+ + "\u01a0\u0001\u0000\u0000\u0000\u01b4\u01a2\u0001\u0000\u0000\u0000\u01b4"+ + "\u01a4\u0001\u0000\u0000\u0000\u01b4\u01a6\u0001\u0000\u0000\u0000\u01b4"+ + "\u01a8\u0001\u0000\u0000\u0000\u01b4\u01ab\u0001\u0000\u0000\u0000\u01b4"+ + "\u01ae\u0001\u0000\u0000\u0000\u01b4\u01b0\u0001\u0000\u0000\u0000\u01b4"+ + "\u01b2\u0001\u0000\u0000\u0000\u01b5L\u0001\u0000\u0000\u0000\u01b6\u01b7"+ + "\u0005t\u0000\u0000\u01b7\u01b8\u0005y\u0000\u0000\u01b8\u01b9\u0005p"+ + "\u0000\u0000\u01b9\u01ba\u0005e\u0000\u0000\u01ba\u01bb\u0005d\u0000\u0000"+ + "\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005f\u0000\u0000\u01bdN"+ + "\u0001\u0000\u0000\u0000\u01be\u01bf\u0005c\u0000\u0000\u01bf\u01c0\u0005"+ + "o\u0000\u0000\u01c0\u01c1\u0005n\u0000\u0000\u01c1\u01c2\u0005s\u0000"+ + "\u0000\u01c2\u01c3\u0005t\u0000\u0000\u01c3P\u0001\u0000\u0000\u0000\u01c4"+ + "\u01c5\u0005e\u0000\u0000\u01c5\u01c6\u0005x\u0000\u0000\u01c6\u01c7\u0005"+ + "t\u0000\u0000\u01c7\u01c8\u0005e\u0000\u0000\u01c8\u01c9\u0005r\u0000"+ + "\u0000\u01c9\u01ca\u0005n\u0000\u0000\u01caR\u0001\u0000\u0000\u0000\u01cb"+ + "\u01cc\u0005_\u0000\u0000\u01cc\u01cd\u0005_\u0000\u0000\u01cd\u01ce\u0005"+ + "e\u0000\u0000\u01ce\u01cf\u0005x\u0000\u0000\u01cf\u01d0\u0005p\u0000"+ + "\u0000\u01d0\u01d1\u0005o\u0000\u0000\u01d1\u01d2\u0005r\u0000\u0000\u01d2"+ + "\u01d3\u0005t\u0000\u0000\u01d3T\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005"+ + "_\u0000\u0000\u01d5\u01d6\u0005_\u0000\u0000\u01d6\u01d7\u0005a\u0000"+ + "\u0000\u01d7\u01d8\u0005l\u0000\u0000\u01d8\u01d9\u0005i\u0000\u0000\u01d9"+ + "\u01da\u0005g\u0000\u0000\u01da\u01db\u0005n\u0000\u0000\u01dbV\u0001"+ + "\u0000\u0000\u0000\u01dc\u01dd\u0005i\u0000\u0000\u01dd\u01de\u0005n\u0000"+ + "\u0000\u01de\u01df\u0005l\u0000\u0000\u01df\u01e0\u0005i\u0000\u0000\u01e0"+ + "\u01e1\u0005n\u0000\u0000\u01e1\u01e2\u0005e\u0000\u0000\u01e2X\u0001"+ + "\u0000\u0000\u0000\u01e3\u01e4\u0005v\u0000\u0000\u01e4\u01e5\u0005o\u0000"+ + "\u0000\u01e5\u01e6\u0005l\u0000\u0000\u01e6\u01e7\u0005a\u0000\u0000\u01e7"+ + "\u01e8\u0005t\u0000\u0000\u01e8\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005"+ + "l\u0000\u0000\u01ea\u01eb\u0005e\u0000\u0000\u01ebZ\u0001\u0000\u0000"+ + "\u0000\u01ec\u01ed\u0005s\u0000\u0000\u01ed\u01ee\u0005t\u0000\u0000\u01ee"+ + "\u01ef\u0005a\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0\u01f1\u0005"+ + "i\u0000\u0000\u01f1\u01f2\u0005c\u0000\u0000\u01f2\\\u0001\u0000\u0000"+ + "\u0000\u01f3\u01f4\u0005_\u0000\u0000\u01f4\u01f5\u0005_\u0000\u0000\u01f5"+ + "\u01f6\u0005i\u0000\u0000\u01f6\u01f7\u0005n\u0000\u0000\u01f7\u01f8\u0005"+ + "t\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9\u01fa\u0005r\u0000"+ + "\u0000\u01fa\u01fb\u0005r\u0000\u0000\u01fb\u01fc\u0005u\u0000\u0000\u01fc"+ + "\u01fd\u0005p\u0000\u0000\u01fd\u01fe\u0005t\u0000\u0000\u01fe^\u0001"+ + "\u0000\u0000\u0000\u01ff\u0200\u0005r\u0000\u0000\u0200\u0201\u0005e\u0000"+ + "\u0000\u0201\u0202\u0005g\u0000\u0000\u0202\u0203\u0005i\u0000\u0000\u0203"+ + "\u0204\u0005s\u0000\u0000\u0204\u0205\u0005t\u0000\u0000\u0205\u0206\u0005"+ + "e\u0000\u0000\u0206\u0207\u0005r\u0000\u0000\u0207`\u0001\u0000\u0000"+ + "\u0000\u0208\u0209\u0005_\u0000\u0000\u0209\u020a\u0005_\u0000\u0000\u020a"+ + "\u020b\u0005z\u0000\u0000\u020b\u020c\u0005p\u0000\u0000\u020c\u020d\u0005"+ + "_\u0000\u0000\u020d\u020e\u0005r\u0000\u0000\u020e\u020f\u0005e\u0000"+ + "\u0000\u020f\u0210\u0005s\u0000\u0000\u0210\u0211\u0005e\u0000\u0000\u0211"+ + "\u0212\u0005r\u0000\u0000\u0212\u0213\u0005v\u0000\u0000\u0213\u0214\u0005"+ + "e\u0000\u0000\u0214b\u0001\u0000\u0000\u0000\u0215\u0216\u0005_\u0000"+ + "\u0000\u0216\u0217\u0005_\u0000\u0000\u0217\u0218\u0005a\u0000\u0000\u0218"+ + "\u0219\u0005d\u0000\u0000\u0219\u021a\u0005d\u0000\u0000\u021a\u021b\u0005"+ + "r\u0000\u0000\u021b\u021c\u0005e\u0000\u0000\u021c\u021d\u0005s\u0000"+ + "\u0000\u021d\u021e\u0005s\u0000\u0000\u021ed\u0001\u0000\u0000\u0000\u021f"+ + "\u0220\u0005_\u0000\u0000\u0220\u0221\u0005_\u0000\u0000\u0221\u0222\u0005"+ + "z\u0000\u0000\u0222\u0223\u0005p\u0000\u0000\u0223f\u0001\u0000\u0000"+ + "\u0000\u0224\u0225\u0005_\u0000\u0000\u0225\u0226\u0005_\u0000\u0000\u0226"+ + "\u0227\u0005m\u0000\u0000\u0227\u0228\u0005e\u0000\u0000\u0228\u0229\u0005"+ + "m\u0000\u0000\u0229h\u0001\u0000\u0000\u0000\u022a\u022b\u0005_\u0000"+ + "\u0000\u022b\u022c\u0005_\u0000\u0000\u022c\u022d\u0005f\u0000\u0000\u022d"+ + "\u022e\u0005a\u0000\u0000\u022e\u022f\u0005r\u0000\u0000\u022fj\u0001"+ + "\u0000\u0000\u0000\u0230\u0231\u0005_\u0000\u0000\u0231\u0232\u0005_\u0000"+ + "\u0000\u0232\u0233\u0005s\u0000\u0000\u0233\u0234\u0005s\u0000\u0000\u0234"+ + "\u0235\u0005a\u0000\u0000\u0235l\u0001\u0000\u0000\u0000\u0236\u0237\u0005"+ + "_\u0000\u0000\u0237\u0238\u0005_\u0000\u0000\u0238\u0239\u0005m\u0000"+ + "\u0000\u0239\u023a\u0005a\u0000\u0000\u023an\u0001\u0000\u0000\u0000\u023b"+ + "\u023c\u0005_\u0000\u0000\u023c\u023d\u0005_\u0000\u0000\u023d\u023e\u0005"+ + "i\u0000\u0000\u023e\u023f\u0005n\u0000\u0000\u023f\u0240\u0005t\u0000"+ + "\u0000\u0240\u0241\u0005r\u0000\u0000\u0241\u0242\u0005i\u0000\u0000\u0242"+ + "\u0243\u0005n\u0000\u0000\u0243\u0244\u0005s\u0000\u0000\u0244\u0245\u0005"+ + "i\u0000\u0000\u0245\u0246\u0005c\u0000\u0000\u0246p\u0001\u0000\u0000"+ + "\u0000\u0247\u0248\u0005_\u0000\u0000\u0248\u0249\u0005_\u0000\u0000\u0249"+ + "\u024a\u0005s\u0000\u0000\u024a\u024b\u0005t\u0000\u0000\u024b\u024c\u0005"+ + "a\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d\u024e\u0005k\u0000"+ + "\u0000\u024e\u024f\u0005c\u0000\u0000\u024f\u0250\u0005a\u0000\u0000\u0250"+ + "\u0251\u0005l\u0000\u0000\u0251\u0274\u0005l\u0000\u0000\u0252\u0253\u0005"+ + "_\u0000\u0000\u0253\u0254\u0005_\u0000\u0000\u0254\u0255\u0005p\u0000"+ + "\u0000\u0255\u0256\u0005h\u0000\u0000\u0256\u0257\u0005i\u0000\u0000\u0257"+ + "\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259\u025a\u0005"+ + "l\u0000\u0000\u025a\u0274\u0005l\u0000\u0000\u025b\u025c\u0005_\u0000"+ + "\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005v\u0000\u0000\u025e"+ + "\u025f\u0005a\u0000\u0000\u025f\u0260\u0005r\u0000\u0000\u0260\u0261\u0005"+ + "c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005l\u0000"+ + "\u0000\u0263\u0274\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000\u0000\u0265"+ + "\u0266\u0005_\u0000\u0000\u0266\u0267\u0005i\u0000\u0000\u0267\u0268\u0005"+ + "n\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269\u026a\u0005r\u0000"+ + "\u0000\u026a\u026b\u0005i\u0000\u0000\u026b\u026c\u0005n\u0000\u0000\u026c"+ + "\u026d\u0005s\u0000\u0000\u026d\u026e\u0005i\u0000\u0000\u026e\u026f\u0005"+ + "c\u0000\u0000\u026f\u0270\u0005c\u0000\u0000\u0270\u0271\u0005a\u0000"+ + "\u0000\u0271\u0272\u0005l\u0000\u0000\u0272\u0274\u0005l\u0000\u0000\u0273"+ + "\u0247\u0001\u0000\u0000\u0000\u0273\u0252\u0001\u0000\u0000\u0000\u0273"+ + "\u025b\u0001\u0000\u0000\u0000\u0273\u0264\u0001\u0000\u0000\u0000\u0274"+ + "r\u0001\u0000\u0000\u0000\u0275\u0276\u0005i\u0000\u0000\u0276\u0277\u0005"+ + "f\u0000\u0000\u0277t\u0001\u0000\u0000\u0000\u0278\u0279\u0005e\u0000"+ + "\u0000\u0279\u027a\u0005l\u0000\u0000\u027a\u027b\u0005s\u0000\u0000\u027b"+ + "\u027c\u0005e\u0000\u0000\u027cv\u0001\u0000\u0000\u0000\u027d\u027e\u0005"+ + "w\u0000\u0000\u027e\u027f\u0005h\u0000\u0000\u027f\u0280\u0005i\u0000"+ + "\u0000\u0280\u0281\u0005l\u0000\u0000\u0281\u0282\u0005e\u0000\u0000\u0282"+ + "x\u0001\u0000\u0000\u0000\u0283\u0284\u0005d\u0000\u0000\u0284\u0285\u0005"+ + "o\u0000\u0000\u0285z\u0001\u0000\u0000\u0000\u0286\u0287\u0005f\u0000"+ + "\u0000\u0287\u0288\u0005o\u0000\u0000\u0288\u0289\u0005r\u0000\u0000\u0289"+ + "|\u0001\u0000\u0000\u0000\u028a\u028b\u0005s\u0000\u0000\u028b\u028c\u0005"+ + "w\u0000\u0000\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005t\u0000"+ + "\u0000\u028e\u028f\u0005c\u0000\u0000\u028f\u0290\u0005h\u0000\u0000\u0290"+ + "~\u0001\u0000\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292\u0293\u0005"+ + "e\u0000\u0000\u0293\u0294\u0005t\u0000\u0000\u0294\u0295\u0005u\u0000"+ + "\u0000\u0295\u0296\u0005r\u0000\u0000\u0296\u0297\u0005n\u0000\u0000\u0297"+ + "\u0080\u0001\u0000\u0000\u0000\u0298\u0299\u0005b\u0000\u0000\u0299\u029a"+ + "\u0005r\u0000\u0000\u029a\u029b\u0005e\u0000\u0000\u029b\u029c\u0005a"+ + "\u0000\u0000\u029c\u029d\u0005k\u0000\u0000\u029d\u0082\u0001\u0000\u0000"+ + "\u0000\u029e\u029f\u0005c\u0000\u0000\u029f\u02a0\u0005o\u0000\u0000\u02a0"+ + "\u02a1\u0005n\u0000\u0000\u02a1\u02a2\u0005t\u0000\u0000\u02a2\u02a3\u0005"+ + "i\u0000\u0000\u02a3\u02a4\u0005n\u0000\u0000\u02a4\u02a5\u0005u\u0000"+ + "\u0000\u02a5\u02a6\u0005e\u0000\u0000\u02a6\u0084\u0001\u0000\u0000\u0000"+ + "\u02a7\u02a8\u0005g\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9\u02aa"+ + "\u0005t\u0000\u0000\u02aa\u02ab\u0005o\u0000\u0000\u02ab\u0086\u0001\u0000"+ + "\u0000\u0000\u02ac\u02ad\u0005a\u0000\u0000\u02ad\u02ae\u0005s\u0000\u0000"+ + "\u02ae\u02af\u0005m\u0000\u0000\u02af\u02b0\u0001\u0000\u0000\u0000\u02b0"+ + "\u02b1\u0006B\u0001\u0000\u02b1\u0088\u0001\u0000\u0000\u0000\u02b2\u02b3"+ + "\u0005d\u0000\u0000\u02b3\u02b4\u0005e\u0000\u0000\u02b4\u02b5\u0005f"+ + "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005u\u0000\u0000"+ + "\u02b7\u02b8\u0005l\u0000\u0000\u02b8\u02b9\u0005t\u0000\u0000\u02b9\u008a"+ + "\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005c\u0000\u0000\u02bb\u02bc\u0005"+ + "a\u0000\u0000\u02bc\u02bd\u0005s\u0000\u0000\u02bd\u02be\u0005e\u0000"+ + "\u0000\u02be\u008c\u0001\u0000\u0000\u0000\u02bf\u02c0\u0005s\u0000\u0000"+ + "\u02c0\u02c1\u0005t\u0000\u0000\u02c1\u02c2\u0005r\u0000\u0000\u02c2\u02c3"+ + "\u0005u\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005t"+ + "\u0000\u0000\u02c5\u008e\u0001\u0000\u0000\u0000\u02c6\u02c7\u0005u\u0000"+ + "\u0000\u02c7\u02c8\u0005n\u0000\u0000\u02c8\u02c9\u0005i\u0000\u0000\u02c9"+ + "\u02ca\u0005o\u0000\u0000\u02ca\u02cb\u0005n\u0000\u0000\u02cb\u0090\u0001"+ + "\u0000\u0000\u0000\u02cc\u02cd\u0005e\u0000\u0000\u02cd\u02ce\u0005n\u0000"+ + "\u0000\u02ce\u02cf\u0005u\u0000\u0000\u02cf\u02d0\u0005m\u0000\u0000\u02d0"+ + "\u0092\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005s\u0000\u0000\u02d2\u02d3"+ + "\u0005i\u0000\u0000\u02d3\u02d4\u0005z\u0000\u0000\u02d4\u02d5\u0005e"+ + "\u0000\u0000\u02d5\u02d6\u0005o\u0000\u0000\u02d6\u02d7\u0005f\u0000\u0000"+ + "\u02d7\u0094\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005t\u0000\u0000\u02d9"+ + "\u02da\u0005y\u0000\u0000\u02da\u02db\u0005p\u0000\u0000\u02db\u02dc\u0005"+ + "e\u0000\u0000\u02dc\u02dd\u0005i\u0000\u0000\u02dd\u02de\u0005d\u0000"+ + "\u0000\u02de\u0096\u0001\u0000\u0000\u0000\u02df\u02e0\u0005d\u0000\u0000"+ + "\u02e0\u02e1\u0005e\u0000\u0000\u02e1\u02e2\u0005f\u0000\u0000\u02e2\u02e3"+ + "\u0005i\u0000\u0000\u02e3\u02e4\u0005n\u0000\u0000\u02e4\u02e5\u0005e"+ + "\u0000\u0000\u02e5\u02e6\u0005d\u0000\u0000\u02e6\u0098\u0001\u0000\u0000"+ + "\u0000\u02e7\u02e8\u0005k\u0000\u0000\u02e8\u02e9\u0005i\u0000\u0000\u02e9"+ + "\u02ea\u0005c\u0000\u0000\u02ea\u02eb\u0005k\u0000\u0000\u02eb\u02ec\u0005"+ + "a\u0000\u0000\u02ec\u02ed\u0005s\u0000\u0000\u02ed\u02ee\u0005m\u0000"+ + "\u0000\u02ee\u009a\u0001\u0000\u0000\u0000\u02ef\u02f0\u0005!\u0000\u0000"+ + "\u02f0\u009c\u0001\u0000\u0000\u0000\u02f1\u02f2\u0005s\u0000\u0000\u02f2"+ + "\u02f3\u0005i\u0000\u0000\u02f3\u02f4\u0005g\u0000\u0000\u02f4\u02f5\u0005"+ + "n\u0000\u0000\u02f5\u02f6\u0005e\u0000\u0000\u02f6\u0325\u0005d\u0000"+ + "\u0000\u02f7\u02f8\u0005u\u0000\u0000\u02f8\u02f9\u0005n\u0000\u0000\u02f9"+ + "\u02fa\u0005s\u0000\u0000\u02fa\u02fb\u0005i\u0000\u0000\u02fb\u02fc\u0005"+ + "g\u0000\u0000\u02fc\u02fd\u0005n\u0000\u0000\u02fd\u02fe\u0005e\u0000"+ + "\u0000\u02fe\u0325\u0005d\u0000\u0000\u02ff\u0300\u0005b\u0000\u0000\u0300"+ + "\u0301\u0005y\u0000\u0000\u0301\u0302\u0005t\u0000\u0000\u0302\u0325\u0005"+ + "e\u0000\u0000\u0303\u0304\u0005w\u0000\u0000\u0304\u0305\u0005o\u0000"+ + "\u0000\u0305\u0306\u0005r\u0000\u0000\u0306\u0325\u0005d\u0000\u0000\u0307"+ + "\u0308\u0005d\u0000\u0000\u0308\u0309\u0005w\u0000\u0000\u0309\u030a\u0005"+ + "o\u0000\u0000\u030a\u030b\u0005r\u0000\u0000\u030b\u0325\u0005d\u0000"+ + "\u0000\u030c\u030d\u0005b\u0000\u0000\u030d\u030e\u0005o\u0000\u0000\u030e"+ + "\u030f\u0005o\u0000\u0000\u030f\u0325\u0005l\u0000\u0000\u0310\u0311\u0005"+ + "c\u0000\u0000\u0311\u0312\u0005h\u0000\u0000\u0312\u0313\u0005a\u0000"+ + "\u0000\u0313\u0325\u0005r\u0000\u0000\u0314\u0315\u0005s\u0000\u0000\u0315"+ + "\u0316\u0005h\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317\u0318\u0005"+ + "r\u0000\u0000\u0318\u0325\u0005t\u0000\u0000\u0319\u031a\u0005i\u0000"+ + "\u0000\u031a\u031b\u0005n\u0000\u0000\u031b\u0325\u0005t\u0000\u0000\u031c"+ + "\u031d\u0005l\u0000\u0000\u031d\u031e\u0005o\u0000\u0000\u031e\u031f\u0005"+ + "n\u0000\u0000\u031f\u0325\u0005g\u0000\u0000\u0320\u0321\u0005v\u0000"+ + "\u0000\u0321\u0322\u0005o\u0000\u0000\u0322\u0323\u0005i\u0000\u0000\u0323"+ + "\u0325\u0005d\u0000\u0000\u0324\u02f1\u0001\u0000\u0000\u0000\u0324\u02f7"+ + "\u0001\u0000\u0000\u0000\u0324\u02ff\u0001\u0000\u0000\u0000\u0324\u0303"+ + "\u0001\u0000\u0000\u0000\u0324\u0307\u0001\u0000\u0000\u0000\u0324\u030c"+ + "\u0001\u0000\u0000\u0000\u0324\u0310\u0001\u0000\u0000\u0000\u0324\u0314"+ + "\u0001\u0000\u0000\u0000\u0324\u0319\u0001\u0000\u0000\u0000\u0324\u031c"+ + "\u0001\u0000\u0000\u0000\u0324\u0320\u0001\u0000\u0000\u0000\u0325\u009e"+ + "\u0001\u0000\u0000\u0000\u0326\u0327\u0005t\u0000\u0000\u0327\u0328\u0005"+ + "r\u0000\u0000\u0328\u0329\u0005u\u0000\u0000\u0329\u0330\u0005e\u0000"+ + "\u0000\u032a\u032b\u0005f\u0000\u0000\u032b\u032c\u0005a\u0000\u0000\u032c"+ + "\u032d\u0005l\u0000\u0000\u032d\u032e\u0005s\u0000\u0000\u032e\u0330\u0005"+ + "e\u0000\u0000\u032f\u0326\u0001\u0000\u0000\u0000\u032f\u032a\u0001\u0000"+ + "\u0000\u0000\u0330\u00a0\u0001\u0000\u0000\u0000\u0331\u0332\u0005{\u0000"+ + "\u0000\u0332\u0333\u0005{\u0000\u0000\u0333\u0337\u0001\u0000\u0000\u0000"+ + "\u0334\u0336\t\u0000\u0000\u0000\u0335\u0334\u0001\u0000\u0000\u0000\u0336"+ + "\u0339\u0001\u0000\u0000\u0000\u0337\u0338\u0001\u0000\u0000\u0000\u0337"+ + "\u0335\u0001\u0000\u0000\u0000\u0338\u033a\u0001\u0000\u0000\u0000\u0339"+ + "\u0337\u0001\u0000\u0000\u0000\u033a\u033b\u0005}\u0000\u0000\u033b\u033c"+ + "\u0005}\u0000\u0000\u033c\u00a2\u0001\u0000\u0000\u0000\u033d\u033e\u0005"+ + "#\u0000\u0000\u033e\u033f\u0005i\u0000\u0000\u033f\u0340\u0005m\u0000"+ + "\u0000\u0340\u0341\u0005p\u0000\u0000\u0341\u0342\u0005o\u0000\u0000\u0342"+ + "\u0343\u0005r\u0000\u0000\u0343\u0344\u0005t\u0000\u0000\u0344\u0345\u0001"+ + "\u0000\u0000\u0000\u0345\u0346\u0006P\u0002\u0000\u0346\u00a4\u0001\u0000"+ + "\u0000\u0000\u0347\u0348\u0005#\u0000\u0000\u0348\u0349\u0005i\u0000\u0000"+ + "\u0349\u034a\u0005n\u0000\u0000\u034a\u034b\u0005c\u0000\u0000\u034b\u034c"+ + "\u0005l\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005d"+ + "\u0000\u0000\u034e\u034f\u0005e\u0000\u0000\u034f\u0350\u0001\u0000\u0000"+ + "\u0000\u0350\u0351\u0006Q\u0003\u0000\u0351\u00a6\u0001\u0000\u0000\u0000"+ + "\u0352\u0353\u0005#\u0000\u0000\u0353\u0354\u0005p\u0000\u0000\u0354\u0355"+ + "\u0005r\u0000\u0000\u0355\u0356\u0005a\u0000\u0000\u0356\u0357\u0005g"+ + "\u0000\u0000\u0357\u0358\u0005m\u0000\u0000\u0358\u0359\u0005a\u0000\u0000"+ + "\u0359\u00a8\u0001\u0000\u0000\u0000\u035a\u035b\u0005#\u0000\u0000\u035b"+ + "\u035c\u0005d\u0000\u0000\u035c\u035d\u0005e\u0000\u0000\u035d\u035e\u0005"+ + "f\u0000\u0000\u035e\u035f\u0005i\u0000\u0000\u035f\u0360\u0005n\u0000"+ + "\u0000\u0360\u0361\u0005e\u0000\u0000\u0361\u00aa\u0001\u0000\u0000\u0000"+ + "\u0362\u0363\u0005\\\u0000\u0000\u0363\u0368\u0005\n\u0000\u0000\u0364"+ + "\u0365\u0005\\\u0000\u0000\u0365\u0366\u0005\r\u0000\u0000\u0366\u0368"+ + "\u0005\n\u0000\u0000\u0367\u0362\u0001\u0000\u0000\u0000\u0367\u0364\u0001"+ + "\u0000\u0000\u0000\u0368\u00ac\u0001\u0000\u0000\u0000\u0369\u036a\u0005"+ + "#\u0000\u0000\u036a\u036b\u0005u\u0000\u0000\u036b\u036c\u0005n\u0000"+ + "\u0000\u036c\u036d\u0005d\u0000\u0000\u036d\u036e\u0005e\u0000\u0000\u036e"+ + "\u036f\u0005f\u0000\u0000\u036f\u00ae\u0001\u0000\u0000\u0000\u0370\u0371"+ + "\u0005#\u0000\u0000\u0371\u0372\u0005i\u0000\u0000\u0372\u0373\u0005f"+ + "\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u0375\u0005e\u0000\u0000"+ + "\u0375\u0376\u0005f\u0000\u0000\u0376\u00b0\u0001\u0000\u0000\u0000\u0377"+ + "\u0378\u0005#\u0000\u0000\u0378\u0379\u0005i\u0000\u0000\u0379\u037a\u0005"+ + "f\u0000\u0000\u037a\u037b\u0005n\u0000\u0000\u037b\u037c\u0005d\u0000"+ + "\u0000\u037c\u037d\u0005e\u0000\u0000\u037d\u037e\u0005f\u0000\u0000\u037e"+ + "\u00b2\u0001\u0000\u0000\u0000\u037f\u0380\u0005#\u0000\u0000\u0380\u0381"+ + "\u0005i\u0000\u0000\u0381\u0382\u0005f\u0000\u0000\u0382\u00b4\u0001\u0000"+ + "\u0000\u0000\u0383\u0384\u0005#\u0000\u0000\u0384\u0385\u0005e\u0000\u0000"+ + "\u0385\u0386\u0005l\u0000\u0000\u0386\u0387\u0005i\u0000\u0000\u0387\u0388"+ + "\u0005f\u0000\u0000\u0388\u00b6\u0001\u0000\u0000\u0000\u0389\u038a\u0005"+ + "#\u0000\u0000\u038a\u038b\u0005e\u0000\u0000\u038b\u038c\u0005l\u0000"+ + "\u0000\u038c\u038d\u0005s\u0000\u0000\u038d\u038e\u0005e\u0000\u0000\u038e"+ + "\u00b8\u0001\u0000\u0000\u0000\u038f\u0390\u0005#\u0000\u0000\u0390\u0391"+ + "\u0005e\u0000\u0000\u0391\u0392\u0005n\u0000\u0000\u0392\u0393\u0005d"+ + "\u0000\u0000\u0393\u0394\u0005i\u0000\u0000\u0394\u0395\u0005f\u0000\u0000"+ + "\u0395\u00ba\u0001\u0000\u0000\u0000\u0396\u0397\u0005#\u0000\u0000\u0397"+ + "\u0398\u0005e\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399\u039a\u0005"+ + "r\u0000\u0000\u039a\u039b\u0005o\u0000\u0000\u039b\u039c\u0005r\u0000"+ + "\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005#\u0000\u0000"+ + "\u039e\u039f\u0003\u00d9k\u0000\u039f\u00be\u0001\u0000\u0000\u0000\u03a0"+ + "\u03a1\u0005#\u0000\u0000\u03a1\u03a2\u0003\u00d9k\u0000\u03a2\u00c0\u0001"+ + "\u0000\u0000\u0000\u03a3\u03a6\u0003\u00c3`\u0000\u03a4\u03a6\u0003\u00cb"+ + "d\u0000\u03a5\u03a3\u0001\u0000\u0000\u0000\u03a5\u03a4\u0001\u0000\u0000"+ + "\u0000\u03a6\u00c2\u0001\u0000\u0000\u0000\u03a7\u03ab\u0003\u00c5a\u0000"+ + "\u03a8\u03ab\u0003\u00c7b\u0000\u03a9\u03ab\u0003\u00c9c\u0000\u03aa\u03a7"+ + "\u0001\u0000\u0000\u0000\u03aa\u03a8\u0001\u0000\u0000\u0000\u03aa\u03a9"+ + "\u0001\u0000\u0000\u0000\u03ab\u00c4\u0001\u0000\u0000\u0000\u03ac\u03b2"+ + "\u0005%\u0000\u0000\u03ad\u03ae\u00050\u0000\u0000\u03ae\u03b2\u0005b"+ + "\u0000\u0000\u03af\u03b0\u00050\u0000\u0000\u03b0\u03b2\u0005B\u0000\u0000"+ + "\u03b1\u03ac\u0001\u0000\u0000\u0000\u03b1\u03ad\u0001\u0000\u0000\u0000"+ + "\u03b1\u03af\u0001\u0000\u0000\u0000\u03b2\u03b6\u0001\u0000\u0000\u0000"+ + "\u03b3\u03b5\u0003\u00d3h\u0000\u03b4\u03b3\u0001\u0000\u0000\u0000\u03b5"+ + "\u03b8\u0001\u0000\u0000\u0000\u03b6\u03b4\u0001\u0000\u0000\u0000\u03b6"+ + "\u03b7\u0001\u0000\u0000\u0000\u03b7\u03b9\u0001\u0000\u0000\u0000\u03b8"+ + "\u03b6\u0001\u0000\u0000\u0000\u03b9\u03bb\u0005.\u0000\u0000\u03ba\u03bc"+ + "\u0003\u00d3h\u0000\u03bb\u03ba\u0001\u0000\u0000\u0000\u03bc\u03bd\u0001"+ + "\u0000\u0000\u0000\u03bd\u03bb\u0001\u0000\u0000\u0000\u03bd\u03be\u0001"+ + "\u0000\u0000\u0000\u03be\u00c6\u0001\u0000\u0000\u0000\u03bf\u03c1\u0003"+ + "\u00d5i\u0000\u03c0\u03bf\u0001\u0000\u0000\u0000\u03c1\u03c4\u0001\u0000"+ + "\u0000\u0000\u03c2\u03c0\u0001\u0000\u0000\u0000\u03c2\u03c3\u0001\u0000"+ + "\u0000\u0000\u03c3\u03c5\u0001\u0000\u0000\u0000\u03c4\u03c2\u0001\u0000"+ + "\u0000\u0000\u03c5\u03c7\u0005.\u0000\u0000\u03c6\u03c8\u0003\u00d5i\u0000"+ + "\u03c7\u03c6\u0001\u0000\u0000\u0000\u03c8\u03c9\u0001\u0000\u0000\u0000"+ + "\u03c9\u03c7\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001\u0000\u0000\u0000"+ + "\u03ca\u00c8\u0001\u0000\u0000\u0000\u03cb\u03d1\u0005$\u0000\u0000\u03cc"+ + "\u03cd\u00050\u0000\u0000\u03cd\u03d1\u0005x\u0000\u0000\u03ce\u03cf\u0005"+ + "0\u0000\u0000\u03cf\u03d1\u0005X\u0000\u0000\u03d0\u03cb\u0001\u0000\u0000"+ + "\u0000\u03d0\u03cc\u0001\u0000\u0000\u0000\u03d0\u03ce\u0001\u0000\u0000"+ + "\u0000\u03d1\u03d5\u0001\u0000\u0000\u0000\u03d2\u03d4\u0003\u00d7j\u0000"+ + "\u03d3\u03d2\u0001\u0000\u0000\u0000\u03d4\u03d7\u0001\u0000\u0000\u0000"+ + "\u03d5\u03d3\u0001\u0000\u0000\u0000\u03d5\u03d6\u0001\u0000\u0000\u0000"+ + "\u03d6\u03d8\u0001\u0000\u0000\u0000\u03d7\u03d5\u0001\u0000\u0000\u0000"+ + "\u03d8\u03da\u0005.\u0000\u0000\u03d9\u03db\u0003\u00d7j\u0000\u03da\u03d9"+ + "\u0001\u0000\u0000\u0000\u03db\u03dc\u0001\u0000\u0000\u0000\u03dc\u03da"+ + "\u0001\u0000\u0000\u0000\u03dc\u03dd\u0001\u0000\u0000\u0000\u03dd\u00ca"+ + "\u0001\u0000\u0000\u0000\u03de\u03e2\u0003\u00cff\u0000\u03df\u03e2\u0003"+ + "\u00d1g\u0000\u03e0\u03e2\u0003\u00cde\u0000\u03e1\u03de\u0001\u0000\u0000"+ + "\u0000\u03e1\u03df\u0001\u0000\u0000\u0000\u03e1\u03e0\u0001\u0000\u0000"+ + "\u0000\u03e2\u03e6\u0001\u0000\u0000\u0000\u03e3\u03e4\u0007\u0000\u0000"+ + "\u0000\u03e4\u03e7\u0007\u0001\u0000\u0000\u03e5\u03e7\u0007\u0002\u0000"+ + "\u0000\u03e6\u03e3\u0001\u0000\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ + "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u00cc\u0001\u0000\u0000"+ + "\u0000\u03e8\u03e9\u00050\u0000\u0000\u03e9\u03eb\u0007\u0003\u0000\u0000"+ + "\u03ea\u03ec\u0003\u00d3h\u0000\u03eb\u03ea\u0001\u0000\u0000\u0000\u03ec"+ + "\u03ed\u0001\u0000\u0000\u0000\u03ed\u03eb\u0001\u0000\u0000\u0000\u03ed"+ + "\u03ee\u0001\u0000\u0000\u0000\u03ee\u03f6\u0001\u0000\u0000\u0000\u03ef"+ + "\u03f1\u0005%\u0000\u0000\u03f0\u03f2\u0003\u00d3h\u0000\u03f1\u03f0\u0001"+ + "\u0000\u0000\u0000\u03f2\u03f3\u0001\u0000\u0000\u0000\u03f3\u03f1\u0001"+ + "\u0000\u0000\u0000\u03f3\u03f4\u0001\u0000\u0000\u0000\u03f4\u03f6\u0001"+ + "\u0000\u0000\u0000\u03f5\u03e8\u0001\u0000\u0000\u0000\u03f5\u03ef\u0001"+ + "\u0000\u0000\u0000\u03f6\u00ce\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003"+ + "\u00d5i\u0000\u03f8\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fa\u0001\u0000"+ + "\u0000\u0000\u03fa\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000"+ + "\u0000\u0000\u03fb\u00d0\u0001\u0000\u0000\u0000\u03fc\u0402\u0005$\u0000"+ + "\u0000\u03fd\u03fe\u00050\u0000\u0000\u03fe\u0402\u0005x\u0000\u0000\u03ff"+ + "\u0400\u00050\u0000\u0000\u0400\u0402\u0005X\u0000\u0000\u0401\u03fc\u0001"+ + "\u0000\u0000\u0000\u0401\u03fd\u0001\u0000\u0000\u0000\u0401\u03ff\u0001"+ + "\u0000\u0000\u0000\u0402\u0404\u0001\u0000\u0000\u0000\u0403\u0405\u0003"+ + "\u00d7j\u0000\u0404\u0403\u0001\u0000\u0000\u0000\u0405\u0406\u0001\u0000"+ + "\u0000\u0000\u0406\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ + "\u0000\u0000\u0407\u00d2\u0001\u0000\u0000\u0000\u0408\u0409\u0007\u0004"+ + "\u0000\u0000\u0409\u00d4\u0001\u0000\u0000\u0000\u040a\u040b\u0007\u0005"+ + "\u0000\u0000\u040b\u00d6\u0001\u0000\u0000\u0000\u040c\u040d\u0007\u0006"+ + "\u0000\u0000\u040d\u00d8\u0001\u0000\u0000\u0000\u040e\u0412\u0003\u00db"+ + "l\u0000\u040f\u0411\u0003\u00ddm\u0000\u0410\u040f\u0001\u0000\u0000\u0000"+ + "\u0411\u0414\u0001\u0000\u0000\u0000\u0412\u0410\u0001\u0000\u0000\u0000"+ + "\u0412\u0413\u0001\u0000\u0000\u0000\u0413\u0415\u0001\u0000\u0000\u0000"+ + "\u0414\u0412\u0001\u0000\u0000\u0000\u0415\u0416\u0006k\u0004\u0000\u0416"+ + "\u00da\u0001\u0000\u0000\u0000\u0417\u0418\u0007\u0007\u0000\u0000\u0418"+ + "\u00dc\u0001\u0000\u0000\u0000\u0419\u041a\u0007\b\u0000\u0000\u041a\u00de"+ + "\u0001\u0000\u0000\u0000\u041b\u0421\u0005\"\u0000\u0000\u041c\u041d\u0005"+ + "\\\u0000\u0000\u041d\u0420\u0005\"\u0000\u0000\u041e\u0420\b\t\u0000\u0000"+ + "\u041f\u041c\u0001\u0000\u0000\u0000\u041f\u041e\u0001\u0000\u0000\u0000"+ + "\u0420\u0423\u0001\u0000\u0000\u0000\u0421\u041f\u0001\u0000\u0000\u0000"+ + "\u0421\u0422\u0001\u0000\u0000\u0000\u0422\u0424\u0001\u0000\u0000\u0000"+ + "\u0423\u0421\u0001\u0000\u0000\u0000\u0424\u0426\u0005\"\u0000\u0000\u0425"+ + "\u0427\u0007\n\u0000\u0000\u0426\u0425\u0001\u0000\u0000\u0000\u0426\u0427"+ + "\u0001\u0000\u0000\u0000\u0427\u042c\u0001\u0000\u0000\u0000\u0428\u042a"+ + "\u0007\u000b\u0000\u0000\u0429\u042b\u0007\f\u0000\u0000\u042a\u0429\u0001"+ + "\u0000\u0000\u0000\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001"+ + "\u0000\u0000\u0000\u042c\u0428\u0001\u0000\u0000\u0000\u042c\u042d\u0001"+ + "\u0000\u0000\u0000\u042d\u042f\u0001\u0000\u0000\u0000\u042e\u0430\u0007"+ + "\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430\u0001\u0000"+ + "\u0000\u0000\u0430\u00e0\u0001\u0000\u0000\u0000\u0431\u0440\u0005\'\u0000"+ + "\u0000\u0432\u043d\u0005\\\u0000\u0000\u0433\u0435\u0007\r\u0000\u0000"+ + "\u0434\u0436\u0007\u0005\u0000\u0000\u0435\u0434\u0001\u0000\u0000\u0000"+ + "\u0435\u0436\u0001\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000"+ + "\u0437\u0439\u0007\u0005\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000"+ + "\u0438\u0439\u0001\u0000\u0000\u0000\u0439\u043e\u0001\u0000\u0000\u0000"+ + "\u043a\u043b\u0005x\u0000\u0000\u043b\u043c\u0007\u000e\u0000\u0000\u043c"+ + "\u043e\u0007\u000e\u0000\u0000\u043d\u0433\u0001\u0000\u0000\u0000\u043d"+ + "\u043a\u0001\u0000\u0000\u0000\u043e\u0441\u0001\u0000\u0000\u0000\u043f"+ + "\u0441\b\u000f\u0000\u0000\u0440\u0432\u0001\u0000\u0000\u0000\u0440\u043f"+ + "\u0001\u0000\u0000\u0000\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0443"+ + "\u0005\'\u0000\u0000\u0443\u00e2\u0001\u0000\u0000\u0000\u0444\u0446\u0007"+ + "\u0010\u0000\u0000\u0445\u0444\u0001\u0000\u0000\u0000\u0446\u0447\u0001"+ + "\u0000\u0000\u0000\u0447\u0445\u0001\u0000\u0000\u0000\u0447\u0448\u0001"+ + "\u0000\u0000\u0000\u0448\u0449\u0001\u0000\u0000\u0000\u0449\u044a\u0006"+ + "p\u0005\u0000\u044a\u00e4\u0001\u0000\u0000\u0000\u044b\u044c\u0005/\u0000"+ + "\u0000\u044c\u044d\u0005/\u0000\u0000\u044d\u0451\u0001\u0000\u0000\u0000"+ + "\u044e\u0450\b\u0011\u0000\u0000\u044f\u044e\u0001\u0000\u0000\u0000\u0450"+ + "\u0453\u0001\u0000\u0000\u0000\u0451\u044f\u0001\u0000\u0000\u0000\u0451"+ + "\u0452\u0001\u0000\u0000\u0000\u0452\u0454\u0001\u0000\u0000\u0000\u0453"+ + "\u0451\u0001\u0000\u0000\u0000\u0454\u0455\u0006q\u0006\u0000\u0455\u00e6"+ + "\u0001\u0000\u0000\u0000\u0456\u0457\u0005/\u0000\u0000\u0457\u0458\u0005"+ + "*\u0000\u0000\u0458\u045c\u0001\u0000\u0000\u0000\u0459\u045b\t\u0000"+ + "\u0000\u0000\u045a\u0459\u0001\u0000\u0000\u0000\u045b\u045e\u0001\u0000"+ + "\u0000\u0000\u045c\u045d\u0001\u0000\u0000\u0000\u045c\u045a\u0001\u0000"+ + "\u0000\u0000\u045d\u045f\u0001\u0000\u0000\u0000\u045e\u045c\u0001\u0000"+ + "\u0000\u0000\u045f\u0460\u0005*\u0000\u0000\u0460\u0461\u0005/\u0000\u0000"+ + "\u0461\u0462\u0001\u0000\u0000\u0000\u0462\u0463\u0006r\u0006\u0000\u0463"+ + "\u00e8\u0001\u0000\u0000\u0000\u0464\u0465\u0005.\u0000\u0000\u0465\u0466"+ + "\u0005b\u0000\u0000\u0466\u0467\u0005y\u0000\u0000\u0467\u0468\u0005t"+ + "\u0000\u0000\u0468\u0469\u0005e\u0000\u0000\u0469\u00ea\u0001\u0000\u0000"+ + "\u0000\u046a\u046b\u0005b\u0000\u0000\u046b\u046c\u0005r\u0000\u0000\u046c"+ + "\u06ca\u0005k\u0000\u0000\u046d\u046e\u0005o\u0000\u0000\u046e\u046f\u0005"+ + "r\u0000\u0000\u046f\u06ca\u0005a\u0000\u0000\u0470\u0471\u0005k\u0000"+ + "\u0000\u0471\u0472\u0005i\u0000\u0000\u0472\u06ca\u0005l\u0000\u0000\u0473"+ + "\u0474\u0005s\u0000\u0000\u0474\u0475\u0005l\u0000\u0000\u0475\u06ca\u0005"+ + "o\u0000\u0000\u0476\u0477\u0005n\u0000\u0000\u0477\u0478\u0005o\u0000"+ + "\u0000\u0478\u06ca\u0005p\u0000\u0000\u0479\u047a\u0005a\u0000\u0000\u047a"+ + "\u047b\u0005s\u0000\u0000\u047b\u06ca\u0005l\u0000\u0000\u047c\u047d\u0005"+ + "p\u0000\u0000\u047d\u047e\u0005h\u0000\u0000\u047e\u06ca\u0005p\u0000"+ + "\u0000\u047f\u0480\u0005a\u0000\u0000\u0480\u0481\u0005n\u0000\u0000\u0481"+ + "\u06ca\u0005c\u0000\u0000\u0482\u0483\u0005b\u0000\u0000\u0483\u0484\u0005"+ + "p\u0000\u0000\u0484\u06ca\u0005l\u0000\u0000\u0485\u0486\u0005c\u0000"+ + "\u0000\u0486\u0487\u0005l\u0000\u0000\u0487\u06ca\u0005c\u0000\u0000\u0488"+ + "\u0489\u0005j\u0000\u0000\u0489\u048a\u0005s\u0000\u0000\u048a\u06ca\u0005"+ + "r\u0000\u0000\u048b\u048c\u0005a\u0000\u0000\u048c\u048d\u0005n\u0000"+ + "\u0000\u048d\u06ca\u0005d\u0000\u0000\u048e\u048f\u0005r\u0000\u0000\u048f"+ + "\u0490\u0005l\u0000\u0000\u0490\u06ca\u0005a\u0000\u0000\u0491\u0492\u0005"+ + "b\u0000\u0000\u0492\u0493\u0005i\u0000\u0000\u0493\u06ca\u0005t\u0000"+ + "\u0000\u0494\u0495\u0005r\u0000\u0000\u0495\u0496\u0005o\u0000\u0000\u0496"+ + "\u06ca\u0005l\u0000\u0000\u0497\u0498\u0005p\u0000\u0000\u0498\u0499\u0005"+ + "l\u0000\u0000\u0499\u06ca\u0005a\u0000\u0000\u049a\u049b\u0005p\u0000"+ + "\u0000\u049b\u049c\u0005l\u0000\u0000\u049c\u06ca\u0005p\u0000\u0000\u049d"+ + "\u049e\u0005b\u0000\u0000\u049e\u049f\u0005m\u0000\u0000\u049f\u06ca\u0005"+ + "i\u0000\u0000\u04a0\u04a1\u0005s\u0000\u0000\u04a1\u04a2\u0005e\u0000"+ + "\u0000\u04a2\u06ca\u0005c\u0000\u0000\u04a3\u04a4\u0005r\u0000\u0000\u04a4"+ + "\u04a5\u0005t\u0000\u0000\u04a5\u06ca\u0005i\u0000\u0000\u04a6\u04a7\u0005"+ + "e\u0000\u0000\u04a7\u04a8\u0005o\u0000\u0000\u04a8\u06ca\u0005r\u0000"+ + "\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005r\u0000\u0000\u04ab"+ + "\u06ca\u0005e\u0000\u0000\u04ac\u04ad\u0005l\u0000\u0000\u04ad\u04ae\u0005"+ + "s\u0000\u0000\u04ae\u06ca\u0005r\u0000\u0000\u04af\u04b0\u0005p\u0000"+ + "\u0000\u04b0\u04b1\u0005h\u0000\u0000\u04b1\u06ca\u0005a\u0000\u0000\u04b2"+ + "\u04b3\u0005a\u0000\u0000\u04b3\u04b4\u0005l\u0000\u0000\u04b4\u06ca\u0005"+ + "r\u0000\u0000\u04b5\u04b6\u0005j\u0000\u0000\u04b6\u04b7\u0005m\u0000"+ + "\u0000\u04b7\u06ca\u0005p\u0000\u0000\u04b8\u04b9\u0005b\u0000\u0000\u04b9"+ + "\u04ba\u0005v\u0000\u0000\u04ba\u06ca\u0005c\u0000\u0000\u04bb\u04bc\u0005"+ + "c\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06ca\u0005i\u0000"+ + "\u0000\u04be\u04bf\u0005r\u0000\u0000\u04bf\u04c0\u0005t\u0000\u0000\u04c0"+ + "\u06ca\u0005s\u0000\u0000\u04c1\u04c2\u0005a\u0000\u0000\u04c2\u04c3\u0005"+ + "d\u0000\u0000\u04c3\u06ca\u0005c\u0000\u0000\u04c4\u04c5\u0005r\u0000"+ + "\u0000\u04c5\u04c6\u0005r\u0000\u0000\u04c6\u06ca\u0005a\u0000\u0000\u04c7"+ + "\u04c8\u0005b\u0000\u0000\u04c8\u04c9\u0005v\u0000\u0000\u04c9\u06ca\u0005"+ + "s\u0000\u0000\u04ca\u04cb\u0005s\u0000\u0000\u04cb\u04cc\u0005e\u0000"+ + "\u0000\u04cc\u06ca\u0005i\u0000\u0000\u04cd\u04ce\u0005s\u0000\u0000\u04ce"+ + "\u04cf\u0005a\u0000\u0000\u04cf\u06ca\u0005x\u0000\u0000\u04d0\u04d1\u0005"+ + "s\u0000\u0000\u04d1\u04d2\u0005t\u0000\u0000\u04d2\u06ca\u0005y\u0000"+ + "\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005t\u0000\u0000\u04d5"+ + "\u06ca\u0005a\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7\u04d8\u0005"+ + "t\u0000\u0000\u04d8\u06ca\u0005x\u0000\u0000\u04d9\u04da\u0005d\u0000"+ + "\u0000\u04da\u04db\u0005e\u0000\u0000\u04db\u06ca\u0005y\u0000\u0000\u04dc"+ + "\u04dd\u0005t\u0000\u0000\u04dd\u04de\u0005x\u0000\u0000\u04de\u06ca\u0005"+ + "a\u0000\u0000\u04df\u04e0\u0005x\u0000\u0000\u04e0\u04e1\u0005a\u0000"+ + "\u0000\u04e1\u06ca\u0005a\u0000\u0000\u04e2\u04e3\u0005b\u0000\u0000\u04e3"+ + "\u04e4\u0005c\u0000\u0000\u04e4\u06ca\u0005c\u0000\u0000\u04e5\u04e6\u0005"+ + "a\u0000\u0000\u04e6\u04e7\u0005h\u0000\u0000\u04e7\u06ca\u0005x\u0000"+ + "\u0000\u04e8\u04e9\u0005t\u0000\u0000\u04e9\u04ea\u0005y\u0000\u0000\u04ea"+ + "\u06ca\u0005a\u0000\u0000\u04eb\u04ec\u0005t\u0000\u0000\u04ec\u04ed\u0005"+ + "x\u0000\u0000\u04ed\u06ca\u0005s\u0000\u0000\u04ee\u04ef\u0005t\u0000"+ + "\u0000\u04ef\u04f0\u0005a\u0000\u0000\u04f0\u06ca\u0005s\u0000\u0000\u04f1"+ + "\u04f2\u0005s\u0000\u0000\u04f2\u04f3\u0005h\u0000\u0000\u04f3\u06ca\u0005"+ + "y\u0000\u0000\u04f4\u04f5\u0005s\u0000\u0000\u04f5\u04f6\u0005h\u0000"+ + "\u0000\u04f6\u06ca\u0005x\u0000\u0000\u04f7\u04f8\u0005l\u0000\u0000\u04f8"+ + "\u04f9\u0005d\u0000\u0000\u04f9\u06ca\u0005y\u0000\u0000\u04fa\u04fb\u0005"+ + "l\u0000\u0000\u04fb\u04fc\u0005d\u0000\u0000\u04fc\u06ca\u0005a\u0000"+ + "\u0000\u04fd\u04fe\u0005l\u0000\u0000\u04fe\u04ff\u0005d\u0000\u0000\u04ff"+ + "\u06ca\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501\u0502\u0005"+ + "a\u0000\u0000\u0502\u06ca\u0005x\u0000\u0000\u0503\u0504\u0005t\u0000"+ + "\u0000\u0504\u0505\u0005a\u0000\u0000\u0505\u06ca\u0005y\u0000\u0000\u0506"+ + "\u0507\u0005t\u0000\u0000\u0507\u0508\u0005a\u0000\u0000\u0508\u06ca\u0005"+ + "x\u0000\u0000\u0509\u050a\u0005b\u0000\u0000\u050a\u050b\u0005c\u0000"+ + "\u0000\u050b\u06ca\u0005s\u0000\u0000\u050c\u050d\u0005c\u0000\u0000\u050d"+ + "\u050e\u0005l\u0000\u0000\u050e\u06ca\u0005v\u0000\u0000\u050f\u0510\u0005"+ + "t\u0000\u0000\u0510\u0511\u0005s\u0000\u0000\u0511\u06ca\u0005x\u0000"+ + "\u0000\u0512\u0513\u0005l\u0000\u0000\u0513\u0514\u0005a\u0000\u0000\u0514"+ + "\u06ca\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516\u0517\u0005"+ + "p\u0000\u0000\u0517\u06ca\u0005y\u0000\u0000\u0518\u0519\u0005c\u0000"+ + "\u0000\u0519\u051a\u0005m\u0000\u0000\u051a\u06ca\u0005p\u0000\u0000\u051b"+ + "\u051c\u0005c\u0000\u0000\u051c\u051d\u0005p\u0000\u0000\u051d\u06ca\u0005"+ + "x\u0000\u0000\u051e\u051f\u0005d\u0000\u0000\u051f\u0520\u0005c\u0000"+ + "\u0000\u0520\u06ca\u0005p\u0000\u0000\u0521\u0522\u0005d\u0000\u0000\u0522"+ + "\u0523\u0005e\u0000\u0000\u0523\u06ca\u0005c\u0000\u0000\u0524\u0525\u0005"+ + "i\u0000\u0000\u0525\u0526\u0005n\u0000\u0000\u0526\u06ca\u0005c\u0000"+ + "\u0000\u0527\u0528\u0005a\u0000\u0000\u0528\u0529\u0005x\u0000\u0000\u0529"+ + "\u06ca\u0005s\u0000\u0000\u052a\u052b\u0005b\u0000\u0000\u052b\u052c\u0005"+ + "n\u0000\u0000\u052c\u06ca\u0005e\u0000\u0000\u052d\u052e\u0005c\u0000"+ + "\u0000\u052e\u052f\u0005l\u0000\u0000\u052f\u06ca\u0005d\u0000\u0000\u0530"+ + "\u0531\u0005s\u0000\u0000\u0531\u0532\u0005b\u0000\u0000\u0532\u06ca\u0005"+ + "c\u0000\u0000\u0533\u0534\u0005i\u0000\u0000\u0534\u0535\u0005s\u0000"+ + "\u0000\u0535\u06ca\u0005c\u0000\u0000\u0536\u0537\u0005i\u0000\u0000\u0537"+ + "\u0538\u0005n\u0000\u0000\u0538\u06ca\u0005x\u0000\u0000\u0539\u053a\u0005"+ + "b\u0000\u0000\u053a\u053b\u0005e\u0000\u0000\u053b\u06ca\u0005q\u0000"+ + "\u0000\u053c\u053d\u0005s\u0000\u0000\u053d\u053e\u0005e\u0000\u0000\u053e"+ + "\u06ca\u0005d\u0000\u0000\u053f\u0540\u0005d\u0000\u0000\u0540\u0541\u0005"+ + "e\u0000\u0000\u0541\u06ca\u0005x\u0000\u0000\u0542\u0543\u0005i\u0000"+ + "\u0000\u0543\u0544\u0005n\u0000\u0000\u0544\u06ca\u0005y\u0000\u0000\u0545"+ + "\u0546\u0005r\u0000\u0000\u0546\u0547\u0005o\u0000\u0000\u0547\u06ca\u0005"+ + "r\u0000\u0000\u0548\u0549\u0005b\u0000\u0000\u0549\u054a\u0005b\u0000"+ + "\u0000\u054a\u054b\u0005r\u0000\u0000\u054b\u06ca\u00050\u0000\u0000\u054c"+ + "\u054d\u0005b\u0000\u0000\u054d\u054e\u0005b\u0000\u0000\u054e\u054f\u0005"+ + "r\u0000\u0000\u054f\u06ca\u00051\u0000\u0000\u0550\u0551\u0005b\u0000"+ + "\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005r\u0000\u0000\u0553"+ + "\u06ca\u00052\u0000\u0000\u0554\u0555\u0005b\u0000\u0000\u0555\u0556\u0005"+ + "b\u0000\u0000\u0556\u0557\u0005r\u0000\u0000\u0557\u06ca\u00053\u0000"+ + "\u0000\u0558\u0559\u0005b\u0000\u0000\u0559\u055a\u0005b\u0000\u0000\u055a"+ + "\u055b\u0005r\u0000\u0000\u055b\u06ca\u00054\u0000\u0000\u055c\u055d\u0005"+ + "b\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005r\u0000"+ + "\u0000\u055f\u06ca\u00055\u0000\u0000\u0560\u0561\u0005b\u0000\u0000\u0561"+ + "\u0562\u0005b\u0000\u0000\u0562\u0563\u0005r\u0000\u0000\u0563\u06ca\u0005"+ + "6\u0000\u0000\u0564\u0565\u0005b\u0000\u0000\u0565\u0566\u0005b\u0000"+ + "\u0000\u0566\u0567\u0005r\u0000\u0000\u0567\u06ca\u00057\u0000\u0000\u0568"+ + "\u0569\u0005b\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a\u056b\u0005"+ + "s\u0000\u0000\u056b\u06ca\u00050\u0000\u0000\u056c\u056d\u0005b\u0000"+ + "\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005s\u0000\u0000\u056f"+ + "\u06ca\u00051\u0000\u0000\u0570\u0571\u0005b\u0000\u0000\u0571\u0572\u0005"+ + "b\u0000\u0000\u0572\u0573\u0005s\u0000\u0000\u0573\u06ca\u00052\u0000"+ + "\u0000\u0574\u0575\u0005b\u0000\u0000\u0575\u0576\u0005b\u0000\u0000\u0576"+ + "\u0577\u0005s\u0000\u0000\u0577\u06ca\u00053\u0000\u0000\u0578\u0579\u0005"+ + "b\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005s\u0000"+ + "\u0000\u057b\u06ca\u00054\u0000\u0000\u057c\u057d\u0005b\u0000\u0000\u057d"+ + "\u057e\u0005b\u0000\u0000\u057e\u057f\u0005s\u0000\u0000\u057f\u06ca\u0005"+ + "5\u0000\u0000\u0580\u0581\u0005b\u0000\u0000\u0581\u0582\u0005b\u0000"+ + "\u0000\u0582\u0583\u0005s\u0000\u0000\u0583\u06ca\u00056\u0000\u0000\u0584"+ + "\u0585\u0005b\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586\u0587\u0005"+ + "s\u0000\u0000\u0587\u06ca\u00057\u0000\u0000\u0588\u0589\u0005b\u0000"+ + "\u0000\u0589\u058a\u0005r\u0000\u0000\u058a\u06ca\u0005a\u0000\u0000\u058b"+ + "\u058c\u0005p\u0000\u0000\u058c\u058d\u0005h\u0000\u0000\u058d\u06ca\u0005"+ + "x\u0000\u0000\u058e\u058f\u0005p\u0000\u0000\u058f\u0590\u0005h\u0000"+ + "\u0000\u0590\u06ca\u0005y\u0000\u0000\u0591\u0592\u0005p\u0000\u0000\u0592"+ + "\u0593\u0005l\u0000\u0000\u0593\u06ca\u0005x\u0000\u0000\u0594\u0595\u0005"+ + "p\u0000\u0000\u0595\u0596\u0005l\u0000\u0000\u0596\u06ca\u0005y\u0000"+ + "\u0000\u0597\u0598\u0005r\u0000\u0000\u0598\u0599\u0005m\u0000\u0000\u0599"+ + "\u059a\u0005b\u0000\u0000\u059a\u06ca\u00050\u0000\u0000\u059b\u059c\u0005"+ + "r\u0000\u0000\u059c\u059d\u0005m\u0000\u0000\u059d\u059e\u0005b\u0000"+ + "\u0000\u059e\u06ca\u00051\u0000\u0000\u059f\u05a0\u0005r\u0000\u0000\u05a0"+ + "\u05a1\u0005m\u0000\u0000\u05a1\u05a2\u0005b\u0000\u0000\u05a2\u06ca\u0005"+ + "2\u0000\u0000\u05a3\u05a4\u0005r\u0000\u0000\u05a4\u05a5\u0005m\u0000"+ + "\u0000\u05a5\u05a6\u0005b\u0000\u0000\u05a6\u06ca\u00053\u0000\u0000\u05a7"+ + "\u05a8\u0005r\u0000\u0000\u05a8\u05a9\u0005m\u0000\u0000\u05a9\u05aa\u0005"+ + "b\u0000\u0000\u05aa\u06ca\u00054\u0000\u0000\u05ab\u05ac\u0005r\u0000"+ + "\u0000\u05ac\u05ad\u0005m\u0000\u0000\u05ad\u05ae\u0005b\u0000\u0000\u05ae"+ + "\u06ca\u00055\u0000\u0000\u05af\u05b0\u0005r\u0000\u0000\u05b0\u05b1\u0005"+ + "m\u0000\u0000\u05b1\u05b2\u0005b\u0000\u0000\u05b2\u06ca\u00056\u0000"+ + "\u0000\u05b3\u05b4\u0005r\u0000\u0000\u05b4\u05b5\u0005m\u0000\u0000\u05b5"+ + "\u05b6\u0005b\u0000\u0000\u05b6\u06ca\u00057\u0000\u0000\u05b7\u05b8\u0005"+ + "s\u0000\u0000\u05b8\u05b9\u0005m\u0000\u0000\u05b9\u05ba\u0005b\u0000"+ + "\u0000\u05ba\u06ca\u00050\u0000\u0000\u05bb\u05bc\u0005s\u0000\u0000\u05bc"+ + "\u05bd\u0005m\u0000\u0000\u05bd\u05be\u0005b\u0000\u0000\u05be\u06ca\u0005"+ + "1\u0000\u0000\u05bf\u05c0\u0005s\u0000\u0000\u05c0\u05c1\u0005m\u0000"+ + "\u0000\u05c1\u05c2\u0005b\u0000\u0000\u05c2\u06ca\u00052\u0000\u0000\u05c3"+ + "\u05c4\u0005s\u0000\u0000\u05c4\u05c5\u0005m\u0000\u0000\u05c5\u05c6\u0005"+ + "b\u0000\u0000\u05c6\u06ca\u00053\u0000\u0000\u05c7\u05c8\u0005s\u0000"+ + "\u0000\u05c8\u05c9\u0005m\u0000\u0000\u05c9\u05ca\u0005b\u0000\u0000\u05ca"+ + "\u06ca\u00054\u0000\u0000\u05cb\u05cc\u0005s\u0000\u0000\u05cc\u05cd\u0005"+ + "m\u0000\u0000\u05cd\u05ce\u0005b\u0000\u0000\u05ce\u06ca\u00055\u0000"+ + "\u0000\u05cf\u05d0\u0005s\u0000\u0000\u05d0\u05d1\u0005m\u0000\u0000\u05d1"+ + "\u05d2\u0005b\u0000\u0000\u05d2\u06ca\u00056\u0000\u0000\u05d3\u05d4\u0005"+ + "s\u0000\u0000\u05d4\u05d5\u0005m\u0000\u0000\u05d5\u05d6\u0005b\u0000"+ + "\u0000\u05d6\u06ca\u00057\u0000\u0000\u05d7\u05d8\u0005s\u0000\u0000\u05d8"+ + "\u05d9\u0005t\u0000\u0000\u05d9\u06ca\u0005p\u0000\u0000\u05da\u05db\u0005"+ + "s\u0000\u0000\u05db\u05dc\u0005t\u0000\u0000\u05dc\u06ca\u0005z\u0000"+ + "\u0000\u05dd\u05de\u0005t\u0000\u0000\u05de\u05df\u0005r\u0000\u0000\u05df"+ + "\u06ca\u0005b\u0000\u0000\u05e0\u05e1\u0005t\u0000\u0000\u05e1\u05e2\u0005"+ + "s\u0000\u0000\u05e2\u06ca\u0005b\u0000\u0000\u05e3\u05e4\u0005w\u0000"+ + "\u0000\u05e4\u05e5\u0005a\u0000\u0000\u05e5\u06ca\u0005i\u0000\u0000\u05e6"+ + "\u05e7\u0005c\u0000\u0000\u05e7\u05e8\u0005l\u0000\u0000\u05e8\u06ca\u0005"+ + "e\u0000\u0000\u05e9\u05ea\u0005s\u0000\u0000\u05ea\u05eb\u0005e\u0000"+ + "\u0000\u05eb\u06ca\u0005e\u0000\u0000\u05ec\u05ed\u0005t\u0000\u0000\u05ed"+ + "\u05ee\u0005s\u0000\u0000\u05ee\u06ca\u0005y\u0000\u0000\u05ef\u05f0\u0005"+ + "l\u0000\u0000\u05f0\u05f1\u0005b\u0000\u0000\u05f1\u05f2\u0005p\u0000"+ + "\u0000\u05f2\u06ca\u0005l\u0000\u0000\u05f3\u05f4\u0005i\u0000\u0000\u05f4"+ + "\u05f5\u0005n\u0000\u0000\u05f5\u06ca\u0005z\u0000\u0000\u05f6\u05f7\u0005"+ + "t\u0000\u0000\u05f7\u05f8\u0005y\u0000\u0000\u05f8\u06ca\u0005s\u0000"+ + "\u0000\u05f9\u05fa\u0005l\u0000\u0000\u05fa\u05fb\u0005b\u0000\u0000\u05fb"+ + "\u05fc\u0005m\u0000\u0000\u05fc\u06ca\u0005i\u0000\u0000\u05fd\u05fe\u0005"+ + "d\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff\u06ca\u0005z\u0000"+ + "\u0000\u0600\u0601\u0005n\u0000\u0000\u0601\u0602\u0005e\u0000\u0000\u0602"+ + "\u06ca\u0005g\u0000\u0000\u0603\u0604\u0005a\u0000\u0000\u0604\u0605\u0005"+ + "s\u0000\u0000\u0605\u06ca\u0005r\u0000\u0000\u0606\u0607\u0005t\u0000"+ + "\u0000\u0607\u0608\u0005a\u0000\u0000\u0608\u06ca\u0005z\u0000\u0000\u0609"+ + "\u060a\u0005l\u0000\u0000\u060a\u060b\u0005b\u0000\u0000\u060b\u060c\u0005"+ + "v\u0000\u0000\u060c\u06ca\u0005c\u0000\u0000\u060d\u060e\u0005t\u0000"+ + "\u0000\u060e\u060f\u0005a\u0000\u0000\u060f\u06ca\u0005b\u0000\u0000\u0610"+ + "\u0611\u0005m\u0000\u0000\u0611\u0612\u0005a\u0000\u0000\u0612\u06ca\u0005"+ + "p\u0000\u0000\u0613\u0614\u0005r\u0000\u0000\u0614\u0615\u0005t\u0000"+ + "\u0000\u0615\u06ca\u0005n\u0000\u0000\u0616\u0617\u0005l\u0000\u0000\u0617"+ + "\u0618\u0005b\u0000\u0000\u0618\u0619\u0005s\u0000\u0000\u0619\u06ca\u0005"+ + "r\u0000\u0000\u061a\u061b\u0005t\u0000\u0000\u061b\u061c\u0005z\u0000"+ + "\u0000\u061c\u06ca\u0005a\u0000\u0000\u061d\u061e\u0005l\u0000\u0000\u061e"+ + "\u061f\u0005b\u0000\u0000\u061f\u0620\u0005v\u0000\u0000\u0620\u06ca\u0005"+ + "s\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622\u0623\u0005b\u0000"+ + "\u0000\u0623\u06ca\u0005a\u0000\u0000\u0624\u0625\u0005l\u0000\u0000\u0625"+ + "\u0626\u0005b\u0000\u0000\u0626\u0627\u0005r\u0000\u0000\u0627\u06ca\u0005"+ + "a\u0000\u0000\u0628\u0629\u0005l\u0000\u0000\u0629\u062a\u0005b\u0000"+ + "\u0000\u062a\u062b\u0005c\u0000\u0000\u062b\u06ca\u0005c\u0000\u0000\u062c"+ + "\u062d\u0005l\u0000\u0000\u062d\u062e\u0005d\u0000\u0000\u062e\u06ca\u0005"+ + "z\u0000\u0000\u062f\u0630\u0005l\u0000\u0000\u0630\u0631\u0005b\u0000"+ + "\u0000\u0631\u0632\u0005c\u0000\u0000\u0632\u06ca\u0005s\u0000\u0000\u0633"+ + "\u0634\u0005c\u0000\u0000\u0634\u0635\u0005p\u0000\u0000\u0635\u06ca\u0005"+ + "z\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u0638\u0005e\u0000"+ + "\u0000\u0638\u06ca\u0005w\u0000\u0000\u0639\u063a\u0005a\u0000\u0000\u063a"+ + "\u063b\u0005s\u0000\u0000\u063b\u06ca\u0005w\u0000\u0000\u063c\u063d\u0005"+ + "l\u0000\u0000\u063d\u063e\u0005b\u0000\u0000\u063e\u063f\u0005n\u0000"+ + "\u0000\u063f\u06ca\u0005e\u0000\u0000\u0640\u0641\u0005p\u0000\u0000\u0641"+ + "\u0642\u0005h\u0000\u0000\u0642\u06ca\u0005z\u0000\u0000\u0643\u0644\u0005"+ + "i\u0000\u0000\u0644\u0645\u0005n\u0000\u0000\u0645\u06ca\u0005w\u0000"+ + "\u0000\u0646\u0647\u0005r\u0000\u0000\u0647\u0648\u0005o\u0000\u0000\u0648"+ + "\u06ca\u0005w\u0000\u0000\u0649\u064a\u0005l\u0000\u0000\u064a\u064b\u0005"+ + "b\u0000\u0000\u064b\u064c\u0005e\u0000\u0000\u064c\u06ca\u0005q\u0000"+ + "\u0000\u064d\u064e\u0005p\u0000\u0000\u064e\u064f\u0005h\u0000\u0000\u064f"+ + "\u06ca\u0005w\u0000\u0000\u0650\u0651\u0005p\u0000\u0000\u0651\u0652\u0005"+ + "l\u0000\u0000\u0652\u06ca\u0005z\u0000\u0000\u0653\u0654\u0005e\u0000"+ + "\u0000\u0654\u0655\u0005o\u0000\u0000\u0655\u06ca\u0005m\u0000\u0000\u0656"+ + "\u0657\u0005a\u0000\u0000\u0657\u0658\u0005d\u0000\u0000\u0658\u0659\u0005"+ + "c\u0000\u0000\u0659\u06ca\u0005q\u0000\u0000\u065a\u065b\u0005a\u0000"+ + "\u0000\u065b\u065c\u0005n\u0000\u0000\u065c\u065d\u0005d\u0000\u0000\u065d"+ + "\u06ca\u0005q\u0000\u0000\u065e\u065f\u0005a\u0000\u0000\u065f\u0660\u0005"+ + "s\u0000\u0000\u0660\u0661\u0005l\u0000\u0000\u0661\u06ca\u0005q\u0000"+ + "\u0000\u0662\u0663\u0005a\u0000\u0000\u0663\u0664\u0005s\u0000\u0000\u0664"+ + "\u0665\u0005r\u0000\u0000\u0665\u06ca\u0005q\u0000\u0000\u0666\u0667\u0005"+ + "b\u0000\u0000\u0667\u0668\u0005i\u0000\u0000\u0668\u0669\u0005t\u0000"+ + "\u0000\u0669\u06ca\u0005q\u0000\u0000\u066a\u066b\u0005c\u0000\u0000\u066b"+ + "\u066c\u0005p\u0000\u0000\u066c\u06ca\u0005q\u0000\u0000\u066d\u066e\u0005"+ + "d\u0000\u0000\u066e\u066f\u0005e\u0000\u0000\u066f\u06ca\u0005q\u0000"+ + "\u0000\u0670\u0671\u0005e\u0000\u0000\u0671\u0672\u0005o\u0000\u0000\u0672"+ + "\u0673\u0005r\u0000\u0000\u0673\u06ca\u0005q\u0000\u0000\u0674\u0675\u0005"+ + "i\u0000\u0000\u0675\u0676\u0005n\u0000\u0000\u0676\u06ca\u0005q\u0000"+ + "\u0000\u0677\u0678\u0005l\u0000\u0000\u0678\u0679\u0005d\u0000\u0000\u0679"+ + "\u06ca\u0005q\u0000\u0000\u067a\u067b\u0005l\u0000\u0000\u067b\u067c\u0005"+ + "s\u0000\u0000\u067c\u067d\u0005r\u0000\u0000\u067d\u06ca\u0005q\u0000"+ + "\u0000\u067e\u067f\u0005o\u0000\u0000\u067f\u0680\u0005r\u0000\u0000\u0680"+ + "\u06ca\u0005q\u0000\u0000\u0681\u0682\u0005r\u0000\u0000\u0682\u0683\u0005"+ + "o\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u06ca\u0005q\u0000"+ + "\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ + "\u0688\u0005r\u0000\u0000\u0688\u06ca\u0005q\u0000\u0000\u0689\u068a\u0005"+ + "s\u0000\u0000\u068a\u068b\u0005b\u0000\u0000\u068b\u068c\u0005c\u0000"+ + "\u0000\u068c\u06ca\u0005q\u0000\u0000\u068d\u068e\u0005s\u0000\u0000\u068e"+ + "\u068f\u0005t\u0000\u0000\u068f\u06ca\u0005q\u0000\u0000\u0690\u0691\u0005"+ + "s\u0000\u0000\u0691\u0692\u0005x\u0000\u0000\u0692\u06ca\u0005y\u0000"+ + "\u0000\u0693\u0694\u0005s\u0000\u0000\u0694\u0695\u0005t\u0000\u0000\u0695"+ + "\u06ca\u00050\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697\u0698\u0005"+ + "t\u0000\u0000\u0698\u06ca\u00051\u0000\u0000\u0699\u069a\u0005s\u0000"+ + "\u0000\u069a\u069b\u0005t\u0000\u0000\u069b\u06ca\u00052\u0000\u0000\u069c"+ + "\u069d\u0005s\u0000\u0000\u069d\u069e\u0005a\u0000\u0000\u069e\u06ca\u0005"+ + "y\u0000\u0000\u069f\u06a0\u0005t\u0000\u0000\u06a0\u06a1\u0005m\u0000"+ + "\u0000\u06a1\u06ca\u0005a\u0000\u0000\u06a2\u06a3\u0005b\u0000\u0000\u06a3"+ + "\u06a4\u0005s\u0000\u0000\u06a4\u06ca\u0005r\u0000\u0000\u06a5\u06a6\u0005"+ + "t\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06ca\u0005m\u0000"+ + "\u0000\u06a8\u06a9\u0005c\u0000\u0000\u06a9\u06aa\u0005s\u0000\u0000\u06aa"+ + "\u06ca\u0005l\u0000\u0000\u06ab\u06ac\u0005c\u0000\u0000\u06ac\u06ad\u0005"+ + "l\u0000\u0000\u06ad\u06ca\u0005a\u0000\u0000\u06ae\u06af\u0005c\u0000"+ + "\u0000\u06af\u06b0\u0005l\u0000\u0000\u06b0\u06ca\u0005x\u0000\u0000\u06b1"+ + "\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005l\u0000\u0000\u06b3\u06ca\u0005"+ + "y\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005s\u0000"+ + "\u0000\u06b6\u06ca\u0005h\u0000\u0000\u06b7\u06b8\u0005s\u0000\u0000\u06b8"+ + "\u06b9\u0005e\u0000\u0000\u06b9\u06ca\u0005t\u0000\u0000\u06ba\u06bb\u0005"+ + "t\u0000\u0000\u06bb\u06bc\u0005s\u0000\u0000\u06bc\u06ca\u0005t\u0000"+ + "\u0000\u06bd\u06be\u0005t\u0000\u0000\u06be\u06bf\u0005i\u0000\u0000\u06bf"+ + "\u06ca\u0005a\u0000\u0000\u06c0\u06c1\u0005t\u0000\u0000\u06c1\u06c2\u0005"+ + "d\u0000\u0000\u06c2\u06ca\u0005d\u0000\u0000\u06c3\u06c4\u0005t\u0000"+ + "\u0000\u06c4\u06c5\u0005i\u0000\u0000\u06c5\u06ca\u0005n\u0000\u0000\u06c6"+ + "\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8\u06ca\u0005"+ + "i\u0000\u0000\u06c9\u046a\u0001\u0000\u0000\u0000\u06c9\u046d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0470\u0001\u0000\u0000\u0000\u06c9\u0473\u0001\u0000"+ + "\u0000\u0000\u06c9\u0476\u0001\u0000\u0000\u0000\u06c9\u0479\u0001\u0000"+ + "\u0000\u0000\u06c9\u047c\u0001\u0000\u0000\u0000\u06c9\u047f\u0001\u0000"+ + "\u0000\u0000\u06c9\u0482\u0001\u0000\u0000\u0000\u06c9\u0485\u0001\u0000"+ + "\u0000\u0000\u06c9\u0488\u0001\u0000\u0000\u0000\u06c9\u048b\u0001\u0000"+ + "\u0000\u0000\u06c9\u048e\u0001\u0000\u0000\u0000\u06c9\u0491\u0001\u0000"+ + "\u0000\u0000\u06c9\u0494\u0001\u0000\u0000\u0000\u06c9\u0497\u0001\u0000"+ + "\u0000\u0000\u06c9\u049a\u0001\u0000\u0000\u0000\u06c9\u049d\u0001\u0000"+ + "\u0000\u0000\u06c9\u04a0\u0001\u0000\u0000\u0000\u06c9\u04a3\u0001\u0000"+ + "\u0000\u0000\u06c9\u04a6\u0001\u0000\u0000\u0000\u06c9\u04a9\u0001\u0000"+ + "\u0000\u0000\u06c9\u04ac\u0001\u0000\u0000\u0000\u06c9\u04af\u0001\u0000"+ + "\u0000\u0000\u06c9\u04b2\u0001\u0000\u0000\u0000\u06c9\u04b5\u0001\u0000"+ + "\u0000\u0000\u06c9\u04b8\u0001\u0000\u0000\u0000\u06c9\u04bb\u0001\u0000"+ + "\u0000\u0000\u06c9\u04be\u0001\u0000\u0000\u0000\u06c9\u04c1\u0001\u0000"+ + "\u0000\u0000\u06c9\u04c4\u0001\u0000\u0000\u0000\u06c9\u04c7\u0001\u0000"+ + "\u0000\u0000\u06c9\u04ca\u0001\u0000\u0000\u0000\u06c9\u04cd\u0001\u0000"+ + "\u0000\u0000\u06c9\u04d0\u0001\u0000\u0000\u0000\u06c9\u04d3\u0001\u0000"+ + "\u0000\u0000\u06c9\u04d6\u0001\u0000\u0000\u0000\u06c9\u04d9\u0001\u0000"+ + "\u0000\u0000\u06c9\u04dc\u0001\u0000\u0000\u0000\u06c9\u04df\u0001\u0000"+ + "\u0000\u0000\u06c9\u04e2\u0001\u0000\u0000\u0000\u06c9\u04e5\u0001\u0000"+ + "\u0000\u0000\u06c9\u04e8\u0001\u0000\u0000\u0000\u06c9\u04eb\u0001\u0000"+ + "\u0000\u0000\u06c9\u04ee\u0001\u0000\u0000\u0000\u06c9\u04f1\u0001\u0000"+ + "\u0000\u0000\u06c9\u04f4\u0001\u0000\u0000\u0000\u06c9\u04f7\u0001\u0000"+ + "\u0000\u0000\u06c9\u04fa\u0001\u0000\u0000\u0000\u06c9\u04fd\u0001\u0000"+ + "\u0000\u0000\u06c9\u0500\u0001\u0000\u0000\u0000\u06c9\u0503\u0001\u0000"+ + "\u0000\u0000\u06c9\u0506\u0001\u0000\u0000\u0000\u06c9\u0509\u0001\u0000"+ + "\u0000\u0000\u06c9\u050c\u0001\u0000\u0000\u0000\u06c9\u050f\u0001\u0000"+ + "\u0000\u0000\u06c9\u0512\u0001\u0000\u0000\u0000\u06c9\u0515\u0001\u0000"+ + "\u0000\u0000\u06c9\u0518\u0001\u0000\u0000\u0000\u06c9\u051b\u0001\u0000"+ + "\u0000\u0000\u06c9\u051e\u0001\u0000\u0000\u0000\u06c9\u0521\u0001\u0000"+ + "\u0000\u0000\u06c9\u0524\u0001\u0000\u0000\u0000\u06c9\u0527\u0001\u0000"+ + "\u0000\u0000\u06c9\u052a\u0001\u0000\u0000\u0000\u06c9\u052d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0530\u0001\u0000\u0000\u0000\u06c9\u0533\u0001\u0000"+ + "\u0000\u0000\u06c9\u0536\u0001\u0000\u0000\u0000\u06c9\u0539\u0001\u0000"+ + "\u0000\u0000\u06c9\u053c\u0001\u0000\u0000\u0000\u06c9\u053f\u0001\u0000"+ + "\u0000\u0000\u06c9\u0542\u0001\u0000\u0000\u0000\u06c9\u0545\u0001\u0000"+ + "\u0000\u0000\u06c9\u0548\u0001\u0000\u0000\u0000\u06c9\u054c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0550\u0001\u0000\u0000\u0000\u06c9\u0554\u0001\u0000"+ + "\u0000\u0000\u06c9\u0558\u0001\u0000\u0000\u0000\u06c9\u055c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0560\u0001\u0000\u0000\u0000\u06c9\u0564\u0001\u0000"+ + "\u0000\u0000\u06c9\u0568\u0001\u0000\u0000\u0000\u06c9\u056c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0570\u0001\u0000\u0000\u0000\u06c9\u0574\u0001\u0000"+ + "\u0000\u0000\u06c9\u0578\u0001\u0000\u0000\u0000\u06c9\u057c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0580\u0001\u0000\u0000\u0000\u06c9\u0584\u0001\u0000"+ + "\u0000\u0000\u06c9\u0588\u0001\u0000\u0000\u0000\u06c9\u058b\u0001\u0000"+ + "\u0000\u0000\u06c9\u058e\u0001\u0000\u0000\u0000\u06c9\u0591\u0001\u0000"+ + "\u0000\u0000\u06c9\u0594\u0001\u0000\u0000\u0000\u06c9\u0597\u0001\u0000"+ + "\u0000\u0000\u06c9\u059b\u0001\u0000\u0000\u0000\u06c9\u059f\u0001\u0000"+ + "\u0000\u0000\u06c9\u05a3\u0001\u0000\u0000\u0000\u06c9\u05a7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05ab\u0001\u0000\u0000\u0000\u06c9\u05af\u0001\u0000"+ + "\u0000\u0000\u06c9\u05b3\u0001\u0000\u0000\u0000\u06c9\u05b7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05bb\u0001\u0000\u0000\u0000\u06c9\u05bf\u0001\u0000"+ + "\u0000\u0000\u06c9\u05c3\u0001\u0000\u0000\u0000\u06c9\u05c7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05cb\u0001\u0000\u0000\u0000\u06c9\u05cf\u0001\u0000"+ + "\u0000\u0000\u06c9\u05d3\u0001\u0000\u0000\u0000\u06c9\u05d7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05da\u0001\u0000\u0000\u0000\u06c9\u05dd\u0001\u0000"+ + "\u0000\u0000\u06c9\u05e0\u0001\u0000\u0000\u0000\u06c9\u05e3\u0001\u0000"+ + "\u0000\u0000\u06c9\u05e6\u0001\u0000\u0000\u0000\u06c9\u05e9\u0001\u0000"+ + "\u0000\u0000\u06c9\u05ec\u0001\u0000\u0000\u0000\u06c9\u05ef\u0001\u0000"+ + "\u0000\u0000\u06c9\u05f3\u0001\u0000\u0000\u0000\u06c9\u05f6\u0001\u0000"+ + "\u0000\u0000\u06c9\u05f9\u0001\u0000\u0000\u0000\u06c9\u05fd\u0001\u0000"+ + "\u0000\u0000\u06c9\u0600\u0001\u0000\u0000\u0000\u06c9\u0603\u0001\u0000"+ + "\u0000\u0000\u06c9\u0606\u0001\u0000\u0000\u0000\u06c9\u0609\u0001\u0000"+ + "\u0000\u0000\u06c9\u060d\u0001\u0000\u0000\u0000\u06c9\u0610\u0001\u0000"+ + "\u0000\u0000\u06c9\u0613\u0001\u0000\u0000\u0000\u06c9\u0616\u0001\u0000"+ + "\u0000\u0000\u06c9\u061a\u0001\u0000\u0000\u0000\u06c9\u061d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0621\u0001\u0000\u0000\u0000\u06c9\u0624\u0001\u0000"+ + "\u0000\u0000\u06c9\u0628\u0001\u0000\u0000\u0000\u06c9\u062c\u0001\u0000"+ + "\u0000\u0000\u06c9\u062f\u0001\u0000\u0000\u0000\u06c9\u0633\u0001\u0000"+ + "\u0000\u0000\u06c9\u0636\u0001\u0000\u0000\u0000\u06c9\u0639\u0001\u0000"+ + "\u0000\u0000\u06c9\u063c\u0001\u0000\u0000\u0000\u06c9\u0640\u0001\u0000"+ + "\u0000\u0000\u06c9\u0643\u0001\u0000\u0000\u0000\u06c9\u0646\u0001\u0000"+ + "\u0000\u0000\u06c9\u0649\u0001\u0000\u0000\u0000\u06c9\u064d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0650\u0001\u0000\u0000\u0000\u06c9\u0653\u0001\u0000"+ + "\u0000\u0000\u06c9\u0656\u0001\u0000\u0000\u0000\u06c9\u065a\u0001\u0000"+ + "\u0000\u0000\u06c9\u065e\u0001\u0000\u0000\u0000\u06c9\u0662\u0001\u0000"+ + "\u0000\u0000\u06c9\u0666\u0001\u0000\u0000\u0000\u06c9\u066a\u0001\u0000"+ + "\u0000\u0000\u06c9\u066d\u0001\u0000\u0000\u0000\u06c9\u0670\u0001\u0000"+ + "\u0000\u0000\u06c9\u0674\u0001\u0000\u0000\u0000\u06c9\u0677\u0001\u0000"+ + "\u0000\u0000\u06c9\u067a\u0001\u0000\u0000\u0000\u06c9\u067e\u0001\u0000"+ + "\u0000\u0000\u06c9\u0681\u0001\u0000\u0000\u0000\u06c9\u0685\u0001\u0000"+ + "\u0000\u0000\u06c9\u0689\u0001\u0000\u0000\u0000\u06c9\u068d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0690\u0001\u0000\u0000\u0000\u06c9\u0693\u0001\u0000"+ + "\u0000\u0000\u06c9\u0696\u0001\u0000\u0000\u0000\u06c9\u0699\u0001\u0000"+ + "\u0000\u0000\u06c9\u069c\u0001\u0000\u0000\u0000\u06c9\u069f\u0001\u0000"+ + "\u0000\u0000\u06c9\u06a2\u0001\u0000\u0000\u0000\u06c9\u06a5\u0001\u0000"+ + "\u0000\u0000\u06c9\u06a8\u0001\u0000\u0000\u0000\u06c9\u06ab\u0001\u0000"+ + "\u0000\u0000\u06c9\u06ae\u0001\u0000\u0000\u0000\u06c9\u06b1\u0001\u0000"+ + "\u0000\u0000\u06c9\u06b4\u0001\u0000\u0000\u0000\u06c9\u06b7\u0001\u0000"+ + "\u0000\u0000\u06c9\u06ba\u0001\u0000\u0000\u0000\u06c9\u06bd\u0001\u0000"+ + "\u0000\u0000\u06c9\u06c0\u0001\u0000\u0000\u0000\u06c9\u06c3\u0001\u0000"+ + "\u0000\u0000\u06c9\u06c6\u0001\u0000\u0000\u0000\u06ca\u00ec\u0001\u0000"+ + "\u0000\u0000\u06cb\u06cc\u0005#\u0000\u0000\u06cc\u00ee\u0001\u0000\u0000"+ + "\u0000\u06cd\u06ce\u0005:\u0000\u0000\u06ce\u00f0\u0001\u0000\u0000\u0000"+ + "\u06cf\u06d0\u0005,\u0000\u0000\u06d0\u00f2\u0001\u0000\u0000\u0000\u06d1"+ + "\u06d2\u0005(\u0000\u0000\u06d2\u00f4\u0001\u0000\u0000\u0000\u06d3\u06d4"+ + "\u0005)\u0000\u0000\u06d4\u00f6\u0001\u0000\u0000\u0000\u06d5\u06d6\u0005"+ + "[\u0000\u0000\u06d6\u00f8\u0001\u0000\u0000\u0000\u06d7\u06d8\u0005]\u0000"+ + "\u0000\u06d8\u00fa\u0001\u0000\u0000\u0000\u06d9\u06da\u0005.\u0000\u0000"+ + "\u06da\u00fc\u0001\u0000\u0000\u0000\u06db\u06dc\u0005<\u0000\u0000\u06dc"+ + "\u06dd\u0005<\u0000\u0000\u06dd\u00fe\u0001\u0000\u0000\u0000\u06de\u06df"+ + "\u0005>\u0000\u0000\u06df\u06e0\u0005>\u0000\u0000\u06e0\u0100\u0001\u0000"+ + "\u0000\u0000\u06e1\u06e2\u0005+\u0000\u0000\u06e2\u0102\u0001\u0000\u0000"+ + "\u0000\u06e3\u06e4\u0005-\u0000\u0000\u06e4\u0104\u0001\u0000\u0000\u0000"+ + "\u06e5\u06e6\u0005<\u0000\u0000\u06e6\u0106\u0001\u0000\u0000\u0000\u06e7"+ + "\u06e8\u0005>\u0000\u0000\u06e8\u0108\u0001\u0000\u0000\u0000\u06e9\u06ea"+ + "\u0005*\u0000\u0000\u06ea\u010a\u0001\u0000\u0000\u0000\u06eb\u06ec\u0005"+ + "/\u0000\u0000\u06ec\u010c\u0001\u0000\u0000\u0000\u06ed\u06ee\u0005{\u0000"+ + "\u0000\u06ee\u06ef\u0006\u0085\u0007\u0000\u06ef\u010e\u0001\u0000\u0000"+ + "\u0000\u06f0\u06f1\u0005}\u0000\u0000\u06f1\u06f2\u0006\u0086\b\u0000"+ + "\u06f2\u0110\u0001\u0000\u0000\u0000\u06f3\u06f6\u0003\u0113\u0088\u0000"+ + "\u06f4\u06f6\u0003\u011b\u008c\u0000\u06f5\u06f3\u0001\u0000\u0000\u0000"+ + "\u06f5\u06f4\u0001\u0000\u0000\u0000\u06f6\u0112\u0001\u0000\u0000\u0000"+ + "\u06f7\u06fb\u0003\u0115\u0089\u0000\u06f8\u06fb\u0003\u0117\u008a\u0000"+ + "\u06f9\u06fb\u0003\u0119\u008b\u0000\u06fa\u06f7\u0001\u0000\u0000\u0000"+ + "\u06fa\u06f8\u0001\u0000\u0000\u0000\u06fa\u06f9\u0001\u0000\u0000\u0000"+ + "\u06fb\u0114\u0001\u0000\u0000\u0000\u06fc\u0700\u0005%\u0000\u0000\u06fd"+ + "\u06ff\u0003\u0123\u0090\u0000\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff"+ + "\u0702\u0001\u0000\u0000\u0000\u0700\u06fe\u0001\u0000\u0000\u0000\u0700"+ + "\u0701\u0001\u0000\u0000\u0000\u0701\u0703\u0001\u0000\u0000\u0000\u0702"+ + "\u0700\u0001\u0000\u0000\u0000\u0703\u0705\u0005.\u0000\u0000\u0704\u0706"+ + "\u0003\u0123\u0090\u0000\u0705\u0704\u0001\u0000\u0000\u0000\u0706\u0707"+ + "\u0001\u0000\u0000\u0000\u0707\u0705\u0001\u0000\u0000\u0000\u0707\u0708"+ + "\u0001\u0000\u0000\u0000\u0708\u0116\u0001\u0000\u0000\u0000\u0709\u070b"+ + "\u0003\u0125\u0091\u0000\u070a\u0709\u0001\u0000\u0000\u0000\u070b\u070e"+ + "\u0001\u0000\u0000\u0000\u070c\u070a\u0001\u0000\u0000\u0000\u070c\u070d"+ + "\u0001\u0000\u0000\u0000\u070d\u070f\u0001\u0000\u0000\u0000\u070e\u070c"+ + "\u0001\u0000\u0000\u0000\u070f\u0711\u0005.\u0000\u0000\u0710\u0712\u0003"+ + "\u0125\u0091\u0000\u0711\u0710\u0001\u0000\u0000\u0000\u0712\u0713\u0001"+ + "\u0000\u0000\u0000\u0713\u0711\u0001\u0000\u0000\u0000\u0713\u0714\u0001"+ + "\u0000\u0000\u0000\u0714\u0118\u0001\u0000\u0000\u0000\u0715\u0719\u0005"+ + "$\u0000\u0000\u0716\u0718\u0003\u0127\u0092\u0000\u0717\u0716\u0001\u0000"+ + "\u0000\u0000\u0718\u071b\u0001\u0000\u0000\u0000\u0719\u0717\u0001\u0000"+ + "\u0000\u0000\u0719\u071a\u0001\u0000\u0000\u0000\u071a\u071c\u0001\u0000"+ + "\u0000\u0000\u071b\u0719\u0001\u0000\u0000\u0000\u071c\u071e\u0005.\u0000"+ + "\u0000\u071d\u071f\u0003\u0127\u0092\u0000\u071e\u071d\u0001\u0000\u0000"+ + "\u0000\u071f\u0720\u0001\u0000\u0000\u0000\u0720\u071e\u0001\u0000\u0000"+ + "\u0000\u0720\u0721\u0001\u0000\u0000\u0000\u0721\u011a\u0001\u0000\u0000"+ + "\u0000\u0722\u0726\u0003\u011f\u008e\u0000\u0723\u0726\u0003\u0121\u008f"+ + "\u0000\u0724\u0726\u0003\u011d\u008d\u0000\u0725\u0722\u0001\u0000\u0000"+ + "\u0000\u0725\u0723\u0001\u0000\u0000\u0000\u0725\u0724\u0001\u0000\u0000"+ + "\u0000\u0726\u011c\u0001\u0000\u0000\u0000\u0727\u0729\u0005%\u0000\u0000"+ + "\u0728\u072a\u0003\u0123\u0090\u0000\u0729\u0728\u0001\u0000\u0000\u0000"+ + "\u072a\u072b\u0001\u0000\u0000\u0000\u072b\u0729\u0001\u0000\u0000\u0000"+ + "\u072b\u072c\u0001\u0000\u0000\u0000\u072c\u011e\u0001\u0000\u0000\u0000"+ + "\u072d\u072f\u0003\u0125\u0091\u0000\u072e\u072d\u0001\u0000\u0000\u0000"+ + "\u072f\u0730\u0001\u0000\u0000\u0000\u0730\u072e\u0001\u0000\u0000\u0000"+ + "\u0730\u0731\u0001\u0000\u0000\u0000\u0731\u0120\u0001\u0000\u0000\u0000"+ + "\u0732\u0734\u0005$\u0000\u0000\u0733\u0735\u0003\u0127\u0092\u0000\u0734"+ + "\u0733\u0001\u0000\u0000\u0000\u0735\u0736\u0001\u0000\u0000\u0000\u0736"+ + "\u0734\u0001\u0000\u0000\u0000\u0736\u0737\u0001\u0000\u0000\u0000\u0737"+ + "\u0122\u0001\u0000\u0000\u0000\u0738\u0739\u0007\u0004\u0000\u0000\u0739"+ + "\u0124\u0001\u0000\u0000\u0000\u073a\u073b\u0007\u0005\u0000\u0000\u073b"+ + "\u0126\u0001\u0000\u0000\u0000\u073c\u073d\u0007\u0006\u0000\u0000\u073d"+ + "\u0128\u0001\u0000\u0000\u0000\u073e\u0742\u0005\'\u0000\u0000\u073f\u0740"+ + "\u0005\\\u0000\u0000\u0740\u0743\u0007\u0012\u0000\u0000\u0741\u0743\b"+ + "\u000f\u0000\u0000\u0742\u073f\u0001\u0000\u0000\u0000\u0742\u0741\u0001"+ + "\u0000\u0000\u0000\u0743\u0744\u0001\u0000\u0000\u0000\u0744\u0745\u0005"+ + "\'\u0000\u0000\u0745\u012a\u0001\u0000\u0000\u0000\u0746\u0748\u0003\u012d"+ + "\u0095\u0000\u0747\u0749\u0007\u0013\u0000\u0000\u0748\u0747\u0001\u0000"+ + "\u0000\u0000\u0749\u074a\u0001\u0000\u0000\u0000\u074a\u0748\u0001\u0000"+ + "\u0000\u0000\u074a\u074b\u0001\u0000\u0000\u0000\u074b\u012c\u0001\u0000"+ + "\u0000\u0000\u074c\u0750\u0005!\u0000\u0000\u074d\u074f\u0003\u0133\u0098"+ + "\u0000\u074e\u074d\u0001\u0000\u0000\u0000\u074f\u0752\u0001\u0000\u0000"+ + "\u0000\u0750\u074e\u0001\u0000\u0000\u0000\u0750\u0751\u0001\u0000\u0000"+ + "\u0000\u0751\u012e\u0001\u0000\u0000\u0000\u0752\u0750\u0001\u0000\u0000"+ + "\u0000\u0753\u0757\u0003\u0131\u0097\u0000\u0754\u0756\u0003\u0133\u0098"+ + "\u0000\u0755\u0754\u0001\u0000\u0000\u0000\u0756\u0759\u0001\u0000\u0000"+ + "\u0000\u0757\u0755\u0001\u0000\u0000\u0000\u0757\u0758\u0001\u0000\u0000"+ + "\u0000\u0758\u0130\u0001\u0000\u0000\u0000\u0759\u0757\u0001\u0000\u0000"+ + "\u0000\u075a\u075b\u0007\u0007\u0000\u0000\u075b\u0132\u0001\u0000\u0000"+ + "\u0000\u075c\u075d\u0007\b\u0000\u0000\u075d\u0134\u0001\u0000\u0000\u0000"+ + "\u075e\u075f\u0005@\u0000\u0000\u075f\u0760\u0003\u012f\u0096\u0000\u0760"+ + "\u0136\u0001\u0000\u0000\u0000\u0761\u0763\u0007\u0010\u0000\u0000\u0762"+ + "\u0761\u0001\u0000\u0000\u0000\u0763\u0764\u0001\u0000\u0000\u0000\u0764"+ + "\u0762\u0001\u0000\u0000\u0000\u0764\u0765\u0001\u0000\u0000\u0000\u0765"+ + "\u0766\u0001\u0000\u0000\u0000\u0766\u0767\u0006\u009a\u0005\u0000\u0767"+ + "\u0138\u0001\u0000\u0000\u0000\u0768\u0769\u0005/\u0000\u0000\u0769\u076a"+ + "\u0005/\u0000\u0000\u076a\u076e\u0001\u0000\u0000\u0000\u076b\u076d\b"+ + "\u0011\u0000\u0000\u076c\u076b\u0001\u0000\u0000\u0000\u076d\u0770\u0001"+ + "\u0000\u0000\u0000\u076e\u076c\u0001\u0000\u0000\u0000\u076e\u076f\u0001"+ + "\u0000\u0000\u0000\u076f\u0771\u0001\u0000\u0000\u0000\u0770\u076e\u0001"+ + "\u0000\u0000\u0000\u0771\u0772\u0006\u009b\u0006\u0000\u0772\u013a\u0001"+ + "\u0000\u0000\u0000\u0773\u0774\u0005/\u0000\u0000\u0774\u0775\u0005*\u0000"+ + "\u0000\u0775\u0779\u0001\u0000\u0000\u0000\u0776\u0778\t\u0000\u0000\u0000"+ + "\u0777\u0776\u0001\u0000\u0000\u0000\u0778\u077b\u0001\u0000\u0000\u0000"+ + "\u0779\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000"+ + "\u077a\u077c\u0001\u0000\u0000\u0000\u077b\u0779\u0001\u0000\u0000\u0000"+ + "\u077c\u077d\u0005*\u0000\u0000\u077d\u077e\u0005/\u0000\u0000\u077e\u077f"+ + "\u0001\u0000\u0000\u0000\u077f\u0780\u0006\u009c\u0006\u0000\u0780\u013c"+ + "\u0001\u0000\u0000\u0000\u0781\u0783\u0005<\u0000\u0000\u0782\u0784\u0007"+ + "\u0014\u0000\u0000\u0783\u0782\u0001\u0000\u0000\u0000\u0784\u0785\u0001"+ + "\u0000\u0000\u0000\u0785\u0783\u0001\u0000\u0000\u0000\u0785\u0786\u0001"+ + "\u0000\u0000\u0000\u0786\u0787\u0001\u0000\u0000\u0000\u0787\u0788\u0005"+ + ">\u0000\u0000\u0788\u0789\u0006\u009d\t\u0000\u0789\u013e\u0001\u0000"+ + "\u0000\u0000\u078a\u0790\u0005\"\u0000\u0000\u078b\u078c\u0005\\\u0000"+ + "\u0000\u078c\u078f\u0005\"\u0000\u0000\u078d\u078f\b\t\u0000\u0000\u078e"+ + "\u078b\u0001\u0000\u0000\u0000\u078e\u078d\u0001\u0000\u0000\u0000\u078f"+ + "\u0792\u0001\u0000\u0000\u0000\u0790\u078e\u0001\u0000\u0000\u0000\u0790"+ + "\u0791\u0001\u0000\u0000\u0000\u0791\u0793\u0001\u0000\u0000\u0000\u0792"+ + "\u0790\u0001\u0000\u0000\u0000\u0793\u0794\u0005\"\u0000\u0000\u0794\u0795"+ + "\u0006\u009e\n\u0000\u0795\u0140\u0001\u0000\u0000\u0000\u0796\u0798\u0007"+ + "\u0010\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798\u0799\u0001"+ + "\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799\u079a\u0001"+ + "\u0000\u0000\u0000\u079a\u079b\u0001\u0000\u0000\u0000\u079b\u079c\u0006"+ + "\u009f\u0005\u0000\u079c\u0142\u0001\u0000\u0000\u0000\u079d\u079e\u0005"+ + "/\u0000\u0000\u079e\u079f\u0005/\u0000\u0000\u079f\u07a3\u0001\u0000\u0000"+ + "\u0000\u07a0\u07a2\b\u0011\u0000\u0000\u07a1\u07a0\u0001\u0000\u0000\u0000"+ + "\u07a2\u07a5\u0001\u0000\u0000\u0000\u07a3\u07a1\u0001\u0000\u0000\u0000"+ + "\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a6\u0001\u0000\u0000\u0000"+ + "\u07a5\u07a3\u0001\u0000\u0000\u0000\u07a6\u07a7\u0006\u00a0\u0006\u0000"+ + "\u07a7\u0144\u0001\u0000\u0000\u0000\u07a8\u07a9\u0005/\u0000\u0000\u07a9"+ + "\u07aa\u0005*\u0000\u0000\u07aa\u07ae\u0001\u0000\u0000\u0000\u07ab\u07ad"+ + "\t\u0000\u0000\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ad\u07b0\u0001"+ + "\u0000\u0000\u0000\u07ae\u07af\u0001\u0000\u0000\u0000\u07ae\u07ac\u0001"+ + "\u0000\u0000\u0000\u07af\u07b1\u0001\u0000\u0000\u0000\u07b0\u07ae\u0001"+ + "\u0000\u0000\u0000\u07b1\u07b2\u0005*\u0000\u0000\u07b2\u07b3\u0005/\u0000"+ + "\u0000\u07b3\u07b4\u0001\u0000\u0000\u0000\u07b4\u07b5\u0006\u00a1\u0006"+ + "\u0000\u07b5\u0146\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b4\u0273"+ + "\u0324\u032f\u0337\u0367\u03a5\u03aa\u03b1\u03b6\u03bd\u03c2\u03c9\u03d0"+ + "\u03d5\u03dc\u03e1\u03e6\u03ed\u03f3\u03f5\u03fa\u0401\u0406\u0412\u041f"+ + "\u0421\u0426\u042a\u042c\u042f\u0435\u0438\u043d\u0440\u0447\u0451\u045c"+ + "\u06c9\u06f5\u06fa\u0700\u0707\u070c\u0713\u0719\u0720\u0725\u072b\u0730"+ + "\u0736\u0742\u074a\u0750\u0757\u0764\u076e\u0779\u0785\u078e\u0790\u0799"+ + "\u07a3\u07ae\u000b\u0001\u0000\u0000\u0001B\u0001\u0001P\u0002\u0001Q"+ + "\u0003\u0001k\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0085\u0005"+ + "\u0001\u0086\u0006\u0001\u009d\u0007\u0001\u009e\b"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/gen/KickCLexer.tokens b/gen/KickCLexer.tokens new file mode 100644 index 000000000..4d0aace39 --- /dev/null +++ b/gen/KickCLexer.tokens @@ -0,0 +1,225 @@ +TYPEDEFNAME=1 +CURLY_BEGIN=2 +CURLY_END=3 +BRACKET_BEGIN=4 +BRACKET_END=5 +PAR_BEGIN=6 +PAR_END=7 +SEMICOLON=8 +COLON=9 +COMMA=10 +RANGE=11 +PARAM_LIST=12 +CONDITION=13 +DOT=14 +ARROW=15 +PLUS=16 +MINUS=17 +ASTERISK=18 +DIVIDE=19 +MODULO=20 +INC=21 +DEC=22 +AND=23 +BIT_NOT=24 +BIT_XOR=25 +BIT_OR=26 +SHIFT_LEFT=27 +SHIFT_RIGHT=28 +EQUAL=29 +NOT_EQUAL=30 +LESS_THAN=31 +LESS_THAN_EQUAL=32 +GREATER_THAN_EQUAL=33 +GREATER_THAN=34 +LOGIC_AND=35 +LOGIC_OR=36 +ASSIGN=37 +ASSIGN_COMPOUND=38 +TYPEDEF=39 +CONST=40 +EXTERN=41 +EXPORT=42 +ALIGN=43 +INLINE=44 +VOLATILE=45 +STATIC=46 +INTERRUPT=47 +REGISTER=48 +LOCAL_RESERVE=49 +ADDRESS=50 +ADDRESS_ZEROPAGE=51 +ADDRESS_MAINMEM=52 +FAR=53 +FORM_SSA=54 +FORM_MA=55 +INTRINSIC=56 +CALLINGCONVENTION=57 +IF=58 +ELSE=59 +WHILE=60 +DO=61 +FOR=62 +SWITCH=63 +RETURN=64 +BREAK=65 +CONTINUE=66 +GOTO=67 +ASM=68 +DEFAULT=69 +CASE=70 +STRUCT=71 +UNION=72 +ENUM=73 +SIZEOF=74 +TYPEID=75 +DEFINED=76 +KICKASM=77 +LOGIC_NOT=78 +SIMPLETYPE=79 +BOOLEAN=80 +KICKASM_BODY=81 +IMPORT=82 +INCLUDE=83 +PRAGMA=84 +DEFINE=85 +DEFINE_CONTINUE=86 +UNDEF=87 +IFDEF=88 +IFNDEF=89 +IFIF=90 +ELIF=91 +IFELSE=92 +ENDIF=93 +ERROR=94 +TOKEN_STRINGIZE=95 +TOKEN_MERGE=96 +NUMBER=97 +NUMFLOAT=98 +BINFLOAT=99 +DECFLOAT=100 +HEXFLOAT=101 +NUMINT=102 +BININTEGER=103 +DECINTEGER=104 +HEXINTEGER=105 +NAME=106 +STRING=107 +CHAR=108 +WS=109 +COMMENT_LINE=110 +COMMENT_BLOCK=111 +ASM_BYTE=112 +ASM_MNEMONIC=113 +ASM_IMM=114 +ASM_COLON=115 +ASM_COMMA=116 +ASM_PAR_BEGIN=117 +ASM_PAR_END=118 +ASM_BRACKET_BEGIN=119 +ASM_BRACKET_END=120 +ASM_DOT=121 +ASM_SHIFT_LEFT=122 +ASM_SHIFT_RIGHT=123 +ASM_PLUS=124 +ASM_MINUS=125 +ASM_LESS_THAN=126 +ASM_GREATER_THAN=127 +ASM_MULTIPLY=128 +ASM_DIVIDE=129 +ASM_CURLY_BEGIN=130 +ASM_CURLY_END=131 +ASM_NUMBER=132 +ASM_NUMFLOAT=133 +ASM_BINFLOAT=134 +ASM_DECFLOAT=135 +ASM_HEXFLOAT=136 +ASM_NUMINT=137 +ASM_BININTEGER=138 +ASM_DECINTEGER=139 +ASM_HEXINTEGER=140 +ASM_CHAR=141 +ASM_MULTI_REL=142 +ASM_MULTI_NAME=143 +ASM_NAME=144 +ASM_TAG=145 +ASM_WS=146 +ASM_COMMENT_LINE=147 +ASM_COMMENT_BLOCK=148 +IMPORT_SYSTEMFILE=149 +IMPORT_LOCALFILE=150 +IMPORT_WS=151 +IMPORT_COMMENT_LINE=152 +IMPORT_COMMENT_BLOCK=153 +';'=8 +'..'=11 +'...'=12 +'?'=13 +'->'=15 +'%'=20 +'++'=21 +'--'=22 +'&'=23 +'~'=24 +'^'=25 +'|'=26 +'=='=29 +'!='=30 +'<='=32 +'>='=33 +'&&'=35 +'||'=36 +'='=37 +'typedef'=39 +'const'=40 +'extern'=41 +'__export'=42 +'__align'=43 +'inline'=44 +'volatile'=45 +'static'=46 +'__interrupt'=47 +'register'=48 +'__zp_reserve'=49 +'__address'=50 +'__zp'=51 +'__mem'=52 +'__far'=53 +'__ssa'=54 +'__ma'=55 +'__intrinsic'=56 +'if'=58 +'else'=59 +'while'=60 +'do'=61 +'for'=62 +'switch'=63 +'return'=64 +'break'=65 +'continue'=66 +'goto'=67 +'asm'=68 +'default'=69 +'case'=70 +'struct'=71 +'union'=72 +'enum'=73 +'sizeof'=74 +'typeid'=75 +'defined'=76 +'kickasm'=77 +'!'=78 +'#import'=82 +'#include'=83 +'#pragma'=84 +'#define'=85 +'#undef'=87 +'#ifdef'=88 +'#ifndef'=89 +'#if'=90 +'#elif'=91 +'#else'=92 +'#endif'=93 +'#error'=94 +'.byte'=112 +'#'=114 diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index b6828d097..b7662e69e 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -75,6 +75,7 @@ LOCAL_RESERVE: '__zp_reserve' ; ADDRESS: '__address' ; ADDRESS_ZEROPAGE: '__zp' ; ADDRESS_MAINMEM: '__mem' ; +FAR: '__far' ; FORM_SSA: '__ssa' ; FORM_MA: '__ma' ; INTRINSIC: '__intrinsic' ; diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 3084bc0c8..4b61311bf 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -161,6 +161,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline + | FAR PAR_BEGIN ( NUMBER ) PAR_END #directiveFar | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/fragment/mos6502-common/call_far_cx16_entry.asm b/src/main/fragment/mos6502-common/call_far_cx16_entry.asm new file mode 100644 index 000000000..661d162d6 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_far_cx16_entry.asm @@ -0,0 +1,4 @@ +jsr $FF6E // https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar +.byte <{la1} +.byte >{la1} +.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_exit.asm b/src/main/fragment/mos6502-common/call_far_cx16_exit.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index cc8b197cd..3fc36c85c 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -278,6 +278,7 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } new Pass1ProcedureInline(program).execute(); + new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. new PassNStatementIndices(program).step(); program.clearCallGraph(); new Pass1AssertNoRecursion(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index 38701f530..d61e82d9a 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -12,6 +12,7 @@ import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.parser.KickCParserBaseVisitor; +import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import java.util.ArrayList; @@ -250,9 +251,13 @@ public class AsmFragmentInstance { @Override public Object visitAsmBytes(KickCParser.AsmBytesContext ctx) { + List asmExpr = ctx.asmExpr(); ArrayList values = new ArrayList<>(); - for(int i = 1; i < ctx.getChildCount(); i = i + 2) { - values.add(ctx.getChild(i).getText()); + for(int i = 0; i < asmExpr.size(); i++) { + if(asmExpr.get(i) != null) { + AsmParameter par = (AsmParameter)this.visit(asmExpr.get(i)); + values.add(par.getParam()); + } } AsmDataNumeric data = new AsmDataNumeric(null, AsmDataNumeric.Type.BYTE, values); handleTags(data, ctx.ASM_TAG()); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 6ab66739f..66aace3b8 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -18,6 +18,7 @@ import dk.camelot64.kickc.model.symbols.Symbol; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; import dk.camelot64.kickc.model.values.*; +import kickass.pass.values.StringValue; /** * Creates an ASM Fragment specification for a statement in the control flow graph. @@ -41,6 +42,40 @@ final public class AsmFragmentInstanceSpecBuilder { return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } + /** + * Create a fragment instance spec factory for a far call entry + * + * @param call The statement call + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpec farCallEntry(StatementCall call, Program program) { + AsmFragmentBindings bindings = new AsmFragmentBindings(program); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); + ScopeRef codeScope = program.getScope().getRef(); +// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); + bindings.bind("c1", new ConstantInteger(call.getBankFar())); + bindings.bind("la1", new LabelRef(call.getProcedure().getFullName())); + return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + } + + /** + * Create a fragment instance spec factory for a far call exit + * + * @param call The statement call + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpec farCallExit(StatementCall call, Program program) { + AsmFragmentBindings bindings = new AsmFragmentBindings(program); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); + ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); + bindings.bind("la1", new LabelRef(codeScope.getFullName())); + bindings.bind("la2", new ConstantInteger(call.getBankFar())); + return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + } + + /** * Create a fragment instance spec factory for an interrupt routine entry * diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java index 94f2aa4b8..150d8de48 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java @@ -143,6 +143,7 @@ public class AsmFragmentTemplate { if(signature.contains("c6")) bindings.put("c6", new ConstantInteger(360L)); if(signature.contains("la1")) bindings.put("la1", new Label("@1", scope, true)); if(signature.startsWith("call_")) bindings.put("la1", new Label("@1", scope, true)); + if(signature.startsWith("call_")) bindings.put("c1", new ConstantInteger(400L)); AsmFragmentInstance fragmentInstance = new AsmFragmentInstance(new Program(), signature, ScopeRef.ROOT, this, bindings); AsmProgram asm = new AsmProgram(targetCpu); diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 33982bc5c..28797a17d 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -70,6 +70,34 @@ public interface AsmFragmentSignature { } } + /** + * ASM fragment signature for a far jsr if(A) goto B. + */ + class CallFar implements AsmFragmentSignature { + + final private Long bankFar; + final private String targetPlatform; + + public enum EntryExit { + Exit, + Entry + } + + final private CallFar.EntryExit entryExit; + + + public CallFar(Long bankFar, String targetPlatform, CallFar.EntryExit entryExit) { + this.bankFar = bankFar; + this.targetPlatform = targetPlatform; + this.entryExit = entryExit; + } + + @Override + public String getName() { + return "call_far" + "_" + targetPlatform + "_" + entryExit.name().toLowerCase(); + } + } + /** * ASM fragment signature for a conditional jump if(A) goto B. */ diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 968153e0c..f8f842a63 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -43,6 +43,18 @@ public class Directive { public Inline() { super("inline"); } } + /** Function declared far. */ + static public class Far extends Directive { + + public Long bankFar; + + public Far(Long bankFar) { + super("__far"); + this.bankFar = bankFar; + } + + } + /** Function declared intrinsic. */ public static class Intrinsic extends Directive { public Intrinsic() { super("intrinsic"); } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java index db5563d05..5c941f835 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java @@ -28,6 +28,8 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta private List parameters; /** This is the initial assignment of the lValue. */ private boolean initialAssignment; + /** This contains the far call parameters */ + private Long bankFar; public StatementCall(LValue lValue, String procedureName, List parameters, StatementSource source, List comments) { super(source, comments); @@ -64,6 +66,12 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta this.parameters = parameters; } + public void setBankFar(Long bankFar) { + this.bankFar = bankFar; + } + + public Long getBankFar() { return this.bankFar; } + public int getNumParameters() { return parameters.size(); } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 71e1b667c..7c375e71c 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -25,6 +25,10 @@ public class Procedure extends Scope { private boolean variableLengthParameterList; /** true if the procedure is declared inline. */ private boolean declaredInline; + /** true if the procedure is declared far. */ + private boolean declaredFar; + /** contains the far bank. */ + private Long bankFar; /** True if the procedure is declared intrinsic. */ private boolean declaredIntrinsic; /** The type of interrupt that the procedure serves. Null for all procedures not serving an interrupt. */ @@ -52,6 +56,8 @@ public class Procedure extends Scope { /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { + /** Far call in a cx16 bank using the https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar routine*/ + FAR_CALL("__far"), /** Parameters and return value handled through PHI-transitions. */ PHI_CALL("__phicall"), /** Parameters and return value over the stack. */ @@ -89,6 +95,8 @@ public class Procedure extends Scope { super(name, parentScope, dataSegment); this.procedureType = procedureType; this.declaredInline = false; + this.declaredFar = false; + this.bankFar = 0L; this.interruptType = null; this.comments = new ArrayList<>(); this.codeSegment = codeSegment; @@ -198,6 +206,20 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } + public boolean isDeclaredFar() { + return declaredFar; + } + + public void setDeclaredFar(boolean declaredFar) { + this.declaredFar = declaredFar; + } + + public Long getBankFar() { return this.bankFar; } + + public void setBankFar(Long bankFar) { + this.bankFar = bankFar; + } + public String getInterruptType() { return interruptType; } @@ -258,6 +280,9 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } + if(declaredFar) { + res.append("__far(").append("bank").append(") "); + } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); } @@ -296,6 +321,7 @@ public class Procedure extends Scope { Procedure procedure = (Procedure) o; return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && + declaredFar == procedure.declaredFar && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 50a51154a..e1e977743 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1170,6 +1170,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 1) { + bankFar = Long.valueOf(ctx.getChild(2).getText()); + } else { + bankFar = 0L; + } + return new Directive.Far(bankFar); + } + @Override public Object visitDirectiveIntrinsic(KickCParser.DirectiveIntrinsicContext ctx) { return new Directive.Intrinsic(); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java new file mode 100644 index 000000000..a74f5eed0 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java @@ -0,0 +1,71 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.InternalError; +import dk.camelot64.kickc.model.*; +import dk.camelot64.kickc.model.iterator.ProgramValue; +import dk.camelot64.kickc.model.iterator.ProgramValueHandler; +import dk.camelot64.kickc.model.iterator.ProgramValueIterator; +import dk.camelot64.kickc.model.statements.*; +import dk.camelot64.kickc.model.symbols.*; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.*; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.ListIterator; + +/** Pass that modifies a control flow graph to far call any procedures declared as far */ +public class Pass1ProcedureFar extends Pass1Base { + + public Pass1ProcedureFar(Program program) { + super(program); + } + + @Override + public boolean step() { + List allBlocks = getGraph().getAllBlocks(); + ListIterator blocksIt = allBlocks.listIterator(); + while(blocksIt.hasNext()) { + ControlFlowBlock block = blocksIt.next(); + List blockStatements = block.getStatements(); + ListIterator statementsIt = blockStatements.listIterator(); + while(statementsIt.hasNext()) { + Statement statement = statementsIt.next(); + if(statement instanceof StatementCall) { + StatementCall call = (StatementCall) statement; + ProcedureRef procedureRef = call.getProcedure(); + Procedure procedure = getScope().getProcedure(procedureRef); + if(procedure.isDeclaredFar()) { + if(procedure.getInterruptType()!=null) { + throw new CompileError("Error! Interrupts cannot be far called. "+procedure.getRef().toString()); + } + farProcedureCall(call, procedure, statementsIt, block, blocksIt); + // Exit and restart + return false; + } + } + } + } + return false; + } + + /** + * Inline a specific call to a procedure. + * + * @param call The call to the far procedure + * @param procedure The procedure being called + * @param statementsIt The statement iterator pointing to the call statement + * @param block The block containing the call + * @param blocksIt The block iterator pointing to the block containing the call + */ + private void farProcedureCall(StatementCall call, Procedure procedure, ListIterator statementsIt, ControlFlowBlock block, ListIterator blocksIt) { + Scope callScope = getScope().getScope(block.getScope()); + // Here we add to the call the properties to build a far call depending on the platform. + // The all properties have been entered in the __far() directive in the source code. + // These properties are then used in pass4 of the compiler, to build the platform dependent fragment to execute the far call. + + call.setBankFar(procedure.getBankFar()); + getLog().append("Far call " + call.toString(getProgram(), false)); + } +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 681c1ea06..1ba4a73e4 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -865,9 +865,22 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + if(procedure.isDeclaredFar()) { + // Generate ASM for a call (in a bank or other) + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); +// asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } else { + asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { - asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + if(procedure.isDeclaredFar()) { + // Generate ASM for a far call (in a bank or other) + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); + } else { + asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } } } else if (statement instanceof StatementCallExecute) { StatementCallExecute call = (StatementCallExecute) statement; diff --git a/src/test/kc/procedure-callingconvention-phi-far-0.c b/src/test/kc/procedure-callingconvention-phi-far-0.c new file mode 100644 index 000000000..9364cd47b --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-far-0.c @@ -0,0 +1,11 @@ +// Test a procedure with calling convention stack + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char __far(1) plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/procedure-callingconvention-stack-far-0.c b/src/test/kc/procedure-callingconvention-stack-far-0.c new file mode 100644 index 000000000..9957eb924 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-0.c @@ -0,0 +1,11 @@ +// Test a procedure with calling convention stack + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char __far(1) __stackcall plus(char a, char b) { + return a+b; +} \ No newline at end of file From 4a4d6f72d0aad7c2fab3eff492783579cc6b595e Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 16 Nov 2022 17:11:18 +0100 Subject: [PATCH 02/50] far calls for __stackcall calling convention functions. --- .../java/dk/camelot64/kickc/Compiler.java | 2 +- .../AsmFragmentInstanceSpecBuilder.java | 26 ++++++++++--------- .../statements/StatementCallExecute.java | 4 +++ .../kickc/passes/Pass4CodeGeneration.java | 16 ++++++++---- .../procedure-callingconvention-phi-far-0.vs | 5 ++++ .../procedure-callingconvention-phi-far-1.c | 13 ++++++++++ 6 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs create mode 100644 src/test/kc/procedure-callingconvention-phi-far-1.c diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 3fc36c85c..812cffe2a 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -278,7 +278,7 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } new Pass1ProcedureInline(program).execute(); - new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. + new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. See https://gitlab.com/Flight_Control/kickc/-/commits/far-call-isolated new PassNStatementIndices(program).step(); program.clearCallGraph(); new Pass1AssertNoRecursion(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 66aace3b8..41e3a76e8 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -45,33 +45,35 @@ final public class AsmFragmentInstanceSpecBuilder { /** * Create a fragment instance spec factory for a far call entry * - * @param call The statement call - * @param program The program + * @param bankFar The bank where the procedure is to be called. + * @param procedureName The full name of the procedure. + * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallEntry(StatementCall call, Program program) { + public static AsmFragmentInstanceSpec farCallEntry(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); ScopeRef codeScope = program.getScope().getRef(); // ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("c1", new ConstantInteger(call.getBankFar())); - bindings.bind("la1", new LabelRef(call.getProcedure().getFullName())); + bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } /** * Create a fragment instance spec factory for a far call exit * - * @param call The statement call + * @param bankFar The bank where the procedure is to be called. + * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallExit(StatementCall call, Program program) { + public static AsmFragmentInstanceSpec farCallExit(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); - ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("la1", new LabelRef(codeScope.getFullName())); - bindings.bind("la2", new ConstantInteger(call.getBankFar())); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); + ScopeRef codeScope = program.getScope().getRef(); + bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java index f1f54fe05..620491ecb 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java @@ -28,11 +28,15 @@ public class StatementCallExecute extends StatementBase implements StatementCall /** The calling convention to use. */ private Procedure.CallingConvention callingConvention; + /** This contains the far call parameters */ + private Long bankFar; + public StatementCallExecute(SymbolTypeProcedure procedureType, RValue procedure, Procedure.CallingConvention callingConvention, StatementSource source, List comments) { super(source, comments); this.procedureType = procedureType; this.procedure = procedure; this.callingConvention = callingConvention; + this.bankFar = bankFar; } public SymbolTypeProcedure getProcedureType() { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 1ba4a73e4..ae20b378b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -867,8 +867,8 @@ public class Pass4CodeGeneration { } if(procedure.isDeclaredFar()) { // Generate ASM for a call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); // asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); @@ -876,17 +876,23 @@ public class Pass4CodeGeneration { } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { if(procedure.isDeclaredFar()) { // Generate ASM for a far call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } } } else if (statement instanceof StatementCallExecute) { StatementCallExecute call = (StatementCallExecute) statement; + Procedure procedure = getScope().getProcedure(call.getProcedure()); RValue procedureRVal = call.getProcedureRVal(); // Generate ASM for a call - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + if(procedure.isDeclaredFar()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + } else { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + } if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); } diff --git a/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs b/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs new file mode 100644 index 000000000..243aa53b5 --- /dev/null +++ b/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs @@ -0,0 +1,5 @@ +al C:400 .SCREEN +al C:80b .upstartEnd +al C:80d .main +al C:819 .plus +al C:37 .return diff --git a/src/test/kc/procedure-callingconvention-phi-far-1.c b/src/test/kc/procedure-callingconvention-phi-far-1.c new file mode 100644 index 000000000..6eda3a13d --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-far-1.c @@ -0,0 +1,13 @@ +// Test a procedure with calling convention stack + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma calling(__stackcall) + +char __far(1) plus(char a, char b) { + return a+b; +} \ No newline at end of file From f948ce0571feaa19ffea371391b24f6d1505a42c Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 16 Nov 2022 17:41:25 +0100 Subject: [PATCH 03/50] far call test cases. --- .../kickc/test/TestProgramsFast.java | 45 +++++++++++++++++++ .../procedure-callingconvention-phi-far-0.vs | 5 --- ...procedure-callingconvention-stack-far-1.c} | 0 .../procedure-callingconvention-stack-far-2.c | 19 ++++++++ .../procedure-callingconvention-stack-far-3.c | 15 +++++++ .../procedure-callingconvention-stack-far-4.c | 43 ++++++++++++++++++ .../procedure-callingconvention-stack-far-5.c | 35 +++++++++++++++ .../procedure-callingconvention-stack-far-6.c | 18 ++++++++ 8 files changed, 175 insertions(+), 5 deletions(-) delete mode 100644 src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs rename src/test/kc/{procedure-callingconvention-phi-far-1.c => procedure-callingconvention-stack-far-1.c} (100%) create mode 100644 src/test/kc/procedure-callingconvention-stack-far-2.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-3.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-4.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-5.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-6.c diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index c6cb04fe1..7ef17a7d0 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1495,6 +1495,51 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("declared-memory-var-0.c"); } + @Test + public void testProcedureCallingConventionStackFar13() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-13.c"); + } + + @Test + public void testProcedureCallingConventionStackFar6() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-6.c"); + } + + @Test + public void testProcedureCallingConventionStackFar5() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-5.c"); + } + + @Test + public void testProcedureCallingConventionStackFar4() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-4.c"); + } + + @Test + public void testProcedureCallingConventionStackFar3() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-3.c"); + } + + @Test + public void testProcedureCallingConventionStackFar2() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-2.c"); + } + + @Test + public void testProcedureCallingConventionStackFar1() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-1.c"); + } + + @Test + public void testProcedureCallingConventionStackFar0() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-0.c"); + } + + @Test + public void testProcedureCallingConventionPhiFar0() throws IOException { + compileAndCompare("procedure-callingconvention-phi-far-0.c"); + } + @Test public void testProcedureCallingConventionStack13() throws IOException { compileAndCompare("procedure-callingconvention-stack-13.c"); diff --git a/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs b/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs deleted file mode 100644 index 243aa53b5..000000000 --- a/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs +++ /dev/null @@ -1,5 +0,0 @@ -al C:400 .SCREEN -al C:80b .upstartEnd -al C:80d .main -al C:819 .plus -al C:37 .return diff --git a/src/test/kc/procedure-callingconvention-phi-far-1.c b/src/test/kc/procedure-callingconvention-stack-far-1.c similarity index 100% rename from src/test/kc/procedure-callingconvention-phi-far-1.c rename to src/test/kc/procedure-callingconvention-stack-far-1.c diff --git a/src/test/kc/procedure-callingconvention-stack-far-2.c b/src/test/kc/procedure-callingconvention-stack-far-2.c new file mode 100644 index 000000000..bdcb7c1df --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-2.c @@ -0,0 +1,19 @@ +// Test a procedure with calling convention stack +// A slightly more complex call + +char* const SCREEN = (char*)0x0400; + +char i = 0; + +void main(void) { + for(char a:0..1) { + char v = a+1; + char w = plus('0', v); + SCREEN[i] = w+a; + } +} + +char __far(1) __stackcall plus(char a, char b) { + i++; + return a+b; +} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-3.c b/src/test/kc/procedure-callingconvention-stack-far-3.c new file mode 100644 index 000000000..9586a90fd --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-3.c @@ -0,0 +1,15 @@ +// Test a procedure with calling convention stack +// Recursive fibonacci + +char* const SCREEN = (char*)0x0400; + +void main(void) { + *SCREEN = fib(5); +} + +char __far(1) __stackcall fib(char n) { + if (n == 0 || n == 1) + return n; + else + return (fib(n-1) + fib(n-2)); +} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-4.c b/src/test/kc/procedure-callingconvention-stack-far-4.c new file mode 100644 index 000000000..0fd8e1aa9 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-4.c @@ -0,0 +1,43 @@ +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + +#pragma calling(__stackcall) + +char* const SCREEN = (char*)0x0400; + +char val = 0; + +void main(void) { + for(char i:0..5) { + pval(); + printother(); + ival(); + } +} + +void __far(1) pval() { + printval(); +} + +void __far(2) ival() { + incval(); +} + +void __far(3) printval() { + SCREEN[0] = val; +} + +void __far(4) incval() { + val++; +} + +void __far(5) printother() { + for(char i:0..5) { + (SCREEN+40)[i]++; + } +} + + + + + diff --git a/src/test/kc/procedure-callingconvention-stack-far-5.c b/src/test/kc/procedure-callingconvention-stack-far-5.c new file mode 100644 index 000000000..c006ecd6f --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-5.c @@ -0,0 +1,35 @@ +// Test a procedure with calling convention stack +// Returning and passing struct values + +#pragma calling(__stackcall) +#pragma struct_model(classic) + +char* const SCREEN = (char*)0x0400; +char idx = 0; + +struct Point { + char x; + char y; +}; + +void main(void) { + for(char i=0;i<5;i++) { + struct Point p = get(i); + print(p); + } +} + +struct Point __far(1) get(char i) { + struct Point p = { i, i/2 }; + return p; +} + +void __far(2) print(struct Point p) { + SCREEN[idx++] = p.x; + SCREEN[idx++] = p.y; +} + + + + + diff --git a/src/test/kc/procedure-callingconvention-stack-far-6.c b/src/test/kc/procedure-callingconvention-stack-far-6.c new file mode 100644 index 000000000..925beedec --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-6.c @@ -0,0 +1,18 @@ +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + +char* const SCREEN = (char*)0x0400; + +void main(void) { + *SCREEN = pow2(6); +} + +char __stackcall __far(1) pow2(char n) { + if (n == 0) + return 1; + else { + char c = pow2(n-1); + return c+c; + } + +} \ No newline at end of file From d7405d86693384386fe13f0b2747912d207b1529 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Wed, 16 Nov 2022 22:17:29 +0100 Subject: [PATCH 04/50] Fixing bugs: - far calls are now ALL iterated and flagged with a bank! - procedure objects are taken as the base for far call asm generation, not the call objects anymore (too tricky). But i have kept the call objects to be also updated with the bank for any reference later! --- .../java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java index a74f5eed0..2bc3b794e 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java @@ -41,8 +41,8 @@ public class Pass1ProcedureFar extends Pass1Base { throw new CompileError("Error! Interrupts cannot be far called. "+procedure.getRef().toString()); } farProcedureCall(call, procedure, statementsIt, block, blocksIt); - // Exit and restart - return false; + // Continue +// return true; } } } From 8801a3e5e281e2db99957f5aadd3ed9da0706e11 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Wed, 16 Nov 2022 22:17:48 +0100 Subject: [PATCH 05/50] Fixing bugs: - far calls are now ALL iterated and flagged with a bank! - procedure objects are taken as the base for far call asm generation, not the call objects anymore (too tricky). But i have kept the call objects to be also updated with the bank for any reference later! --- .../dk/camelot64/kickc/passes/Pass4CodeGeneration.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index ae20b378b..27ec2b462 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -867,8 +867,8 @@ public class Pass4CodeGeneration { } if(procedure.isDeclaredFar()) { // Generate ASM for a call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); // asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); @@ -876,8 +876,8 @@ public class Pass4CodeGeneration { } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { if(procedure.isDeclaredFar()) { // Generate ASM for a far call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } From 2f2028f3a12e6778caa3bb3bddd68b86f4cabfa8 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Thu, 17 Nov 2022 07:43:08 +0100 Subject: [PATCH 06/50] far calls --- pom.xml | 2 +- .../procedure-callingconvention-phi-far-0.asm | 27 + .../procedure-callingconvention-phi-far-0.cfg | 20 + .../procedure-callingconvention-phi-far-0.log | 292 ++++ .../procedure-callingconvention-phi-far-0.sym | 10 + ...rocedure-callingconvention-stack-far-0.asm | 45 + ...rocedure-callingconvention-stack-far-0.cfg | 24 + ...rocedure-callingconvention-stack-far-0.log | 469 +++++ ...rocedure-callingconvention-stack-far-0.sym | 19 + ...rocedure-callingconvention-stack-far-1.asm | 45 + ...rocedure-callingconvention-stack-far-1.cfg | 24 + ...rocedure-callingconvention-stack-far-1.log | 469 +++++ ...rocedure-callingconvention-stack-far-1.sym | 19 + ...rocedure-callingconvention-stack-far-2.asm | 72 + ...rocedure-callingconvention-stack-far-2.cfg | 48 + ...rocedure-callingconvention-stack-far-2.log | 851 +++++++++ ...rocedure-callingconvention-stack-far-2.sym | 32 + ...rocedure-callingconvention-stack-far-3.asm | 68 + ...rocedure-callingconvention-stack-far-3.cfg | 39 + ...rocedure-callingconvention-stack-far-3.log | 1527 +++++++++++++++++ ...rocedure-callingconvention-stack-far-3.sym | 25 + ...rocedure-callingconvention-stack-far-4.asm | 76 + ...rocedure-callingconvention-stack-far-4.cfg | 79 + ...rocedure-callingconvention-stack-far-4.log | 924 ++++++++++ ...rocedure-callingconvention-stack-far-4.sym | 19 + ...rocedure-callingconvention-stack-far-5.asm | 110 ++ ...rocedure-callingconvention-stack-far-5.cfg | 62 + ...rocedure-callingconvention-stack-far-5.log | 845 +++++++++ ...rocedure-callingconvention-stack-far-5.sym | 30 + ...rocedure-callingconvention-stack-far-6.asm | 51 + ...rocedure-callingconvention-stack-far-6.cfg | 29 + ...rocedure-callingconvention-stack-far-6.log | 1060 ++++++++++++ ...rocedure-callingconvention-stack-far-6.sym | 21 + 33 files changed, 7432 insertions(+), 1 deletion(-) create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.log create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.sym diff --git a/pom.xml b/pom.xml index 0146de442..446cc4bd1 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@ org.jacoco jacoco-maven-plugin - 0.8.7 + 0.8.8 pre-unit-test diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.asm b/src/test/ref/procedure-callingconvention-phi-far-0.asm new file mode 100644 index 000000000..e29b814ba --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.asm @@ -0,0 +1,27 @@ +// Test a procedure with calling convention stack + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-phi-far-0.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) + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.cfg b/src/test/ref/procedure-callingconvention-phi-far-0.cfg new file mode 100644 index 000000000..5d2b8863d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__far(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.log b/src/test/ref/procedure-callingconvention-phi-far-0.log new file mode 100644 index 000000000..6d817cb05 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.log @@ -0,0 +1,292 @@ +Far call main::$0 = call plus('0', 7) + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__far(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__far(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__far(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Potential register analysis [1] call plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +Uplifting [main] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +Uplifting [plus] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +Uplifting [] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-phi-far-0.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) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__far(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 18 + + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-phi-far-0.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) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.sym b/src/test/ref/procedure-callingconvention-phi-far-0.sym new file mode 100644 index 000000000..5e731dc09 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__far(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.asm b/src/test/ref/procedure-callingconvention-stack-far-0.asm new file mode 100644 index 000000000..cae85630e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-0.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) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.cfg b/src/test/ref/procedure-callingconvention-stack-far-0.cfg new file mode 100644 index 000000000..620247dbd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.cfg @@ -0,0 +1,24 @@ + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.log b/src/test/ref/procedure-callingconvention-stack-far-0.log new file mode 100644 index 000000000..3187874dc --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.log @@ -0,0 +1,469 @@ +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Far call main::$0 = call plus('0', 7) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__far(bank) __stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__far(bank) __stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [main] best 67 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [] best 67 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-0.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 61 + + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-0.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.sym b/src/test/ref/procedure-callingconvention-stack-far-0.sym new file mode 100644 index 000000000..058bfd4d2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.asm b/src/test/ref/procedure-callingconvention-stack-far-1.asm new file mode 100644 index 000000000..4d95b1c93 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-1.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) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.cfg b/src/test/ref/procedure-callingconvention-stack-far-1.cfg new file mode 100644 index 000000000..620247dbd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.cfg @@ -0,0 +1,24 @@ + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.log b/src/test/ref/procedure-callingconvention-stack-far-1.log new file mode 100644 index 000000000..c579e2fab --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.log @@ -0,0 +1,469 @@ +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Far call main::$0 = call plus('0', 7) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__far(bank) __stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__far(bank) __stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [main] best 67 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [] best 67 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-1.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 61 + + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-1.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.sym b/src/test/ref/procedure-callingconvention-stack-far-1.sym new file mode 100644 index 000000000..058bfd4d2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.asm b/src/test/ref/procedure-callingconvention-stack-far-2.asm new file mode 100644 index 000000000..8f742ce8a --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.asm @@ -0,0 +1,72 @@ +// Test a procedure with calling convention stack +// A slightly more complex call + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-2.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(__start) + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code +__start: { + // char i = 0 + lda #0 + sta.z i + jsr main + rts +} +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + inc.z i + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + .label a = 3 + lda #0 + sta.z a + __b1: + // char v = a+1 + ldx.z a + inx + // char w = plus('0', v) + lda #'0' + pha + txa + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // w+a + clc + adc.z a + // SCREEN[i] = w+a + ldy.z i + sta SCREEN,y + // for(char a:0..1) + inc.z a + lda #2 + cmp.z a + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.cfg b/src/test/ref/procedure-callingconvention-stack-far-2.cfg new file mode 100644 index 000000000..0bd994142 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.cfg @@ -0,0 +1,48 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.log b/src/test/ref/procedure-callingconvention-stack-far-2.log new file mode 100644 index 000000000..1153c5e07 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.log @@ -0,0 +1,851 @@ +Converting variable modified inside __stackcall procedure plus() to load/store i +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Inlined call call __init +Far call main::w = call plus('0', main::v) +Eliminating unused variable with no statement main::$0 +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::w = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = main::v + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start::@1 + main::a#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) + main::v#0 = main::a#2 + 1 + stackpush(char) = '0' + stackpush(char) = main::v#0 + callexecute plus + sideeffect stackpullpadding(1) + main::w#0 = stackpull(char) + main::$2 = main::w#0 + main::a#2 + SCREEN[i] = main::$2 + main::a#1 = main::a#2 + rangenext(0,1) + main::$3 = main::a#1 != rangelast(0,1) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + i = ++ i + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@2 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i +void main() +char main::$2 +bool main::$3 +char main::a +char main::a#0 +char main::a#1 +char main::a#2 +char main::v +char main::v#0 +char main::w +char main::w#0 +__far(bank) __stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::a#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ +Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 +Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::a#0 +Constant inlined main::a#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to plus:17 + +Created 1 initial phi equivalence classes +Coalesced [25] main::a#3 = main::a#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label __start::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus + +VARIABLE REGISTER WEIGHTS +void __start() +__loadstore char i // 105.24999999999999 +void main() +char main::$2 // 202.0 +char main::a +char main::a#1 // 151.5 +char main::a#2 // 44.888888888888886 +char main::v +char main::v#0 // 101.0 +char main::w +char main::w#0 // 202.0 +__far(bank) __stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 667.3333333333334 +char plus::b +char plus::b#0 // 1001.0 +char plus::return +char plus::return#0 // 2002.0 + +Initial phi equivalence classes +[ main::a#2 main::a#1 ] +Added variable i to live range equivalence class [ i ] +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::v#0 to live range equivalence class [ main::v#0 ] +Added variable main::w#0 to live range equivalence class [ main::w#0 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Complete equivalence classes +[ main::a#2 main::a#1 ] +[ i ] +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::v#0 ] +[ main::w#0 ] +[ main::$2 ] +Allocated zp[1]:2 [ plus::return#0 ] +Allocated zp[1]:3 [ plus::b#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::w#0 ] +Allocated zp[1]:6 [ main::$2 ] +Allocated zp[1]:7 [ main::a#2 main::a#1 ] +Allocated zp[1]:8 [ i ] +Allocated zp[1]:9 [ main::v#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , +Potential registers zp[1]:8 [ i ] : zp[1]:8 , +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] +Uplift Scope [] 105.25: zp[1]:8 [ i ] +Uplift Scope [__start] + +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [plus] best 885 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [main] best 725 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [] best 725 combination zp[1]:8 [ i ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [__start] best 725 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [plus] best 725 combination zp[1]:4 [ plus::a#0 ] +Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [main] best 725 combination zp[1]:7 [ main::a#2 main::a#1 ] +Attempting to uplift remaining variables inzp[1]:8 [ i ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [] best 725 combination zp[1]:8 [ i ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] +Allocated (was zp[1]:8) zp[1]:4 [ i ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-2.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(__start) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + jmp __b1 + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [23] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction main_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] + + +FINAL ASSEMBLER +Score: 596 + + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-2.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(__start) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char i = 0 + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + jsr main + // __start::@return + // [4] return + rts +} + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // return a+b; + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // char v = a+1 + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // char w = plus('0', v) + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // w+a + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // SCREEN[i] = w+a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // for(char a:0..1) + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1 + // main::@return + // } + // [23] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.sym b/src/test/ref/procedure-callingconvention-stack-far-2.sym new file mode 100644 index 000000000..d5bda0530 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.sym @@ -0,0 +1,32 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.asm b/src/test/ref/procedure-callingconvention-stack-far-3.asm new file mode 100644 index 000000000..3db9a00f2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.asm @@ -0,0 +1,68 @@ +// Test a procedure with calling convention stack +// Recursive fibonacci + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-3.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) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char fib(__zp(2) char n) +fib: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label __4 = 3 + .label n = 2 + // return n; + tsx + lda STACK_BASE+OFFSET_STACK_N,x + sta.z n + // if (n == 0 || n == 1) + beq __b1 + lda #1 + cmp.z n + beq __b1 + // n-1 + lda.z n + sec + sbc #1 + // fib(n-1) + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + sta.z __4 + // n-2 + lda.z n + sec + sbc #2 + // fib(n-2) + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // return (fib(n-1) + fib(n-2)); + clc + adc.z __4 + __breturn: + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + rts + __b1: + lda.z n + jmp __breturn +} +main: { + // fib(5) + lda #5 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // *SCREEN = fib(5) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.cfg b/src/test/ref/procedure-callingconvention-stack-far-3.cfg new file mode 100644 index 000000000..0fda6c96f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.cfg @@ -0,0 +1,39 @@ + +__far(bank) __stackcall char fib(char n) +fib: scope:[fib] from + [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) + [1] if(fib::n#0==0) goto fib::@1 + to:fib::@3 +fib::@3: scope:[fib] from fib + [2] if(fib::n#0==1) goto fib::@1 + to:fib::@2 +fib::@2: scope:[fib] from fib::@3 + [3] fib::$3 = fib::n#0 - 1 + [4] stackpush(char) = fib::$3 + [5] callexecute fib + [6] fib::$4 = stackpull(char) + [7] fib::$5 = fib::n#0 - 2 + [8] stackpush(char) = fib::$5 + [9] callexecute fib + [10] fib::$6 = stackpull(char) + [11] fib::return#1 = fib::$4 + fib::$6 + to:fib::@return +fib::@return: scope:[fib] from fib::@1 fib::@2 + [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) + [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 + [14] return + to:@return +fib::@1: scope:[fib] from fib fib::@3 + [15] fib::return#3 = fib::n#0 + to:fib::@return + +void main() +main: scope:[main] from + [16] stackpush(char) = 5 + [17] callexecute fib + [18] main::$0 = stackpull(char) + [19] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [20] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.log b/src/test/ref/procedure-callingconvention-stack-far-3.log new file mode 100644 index 000000000..c23c61551 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.log @@ -0,0 +1,1527 @@ +Adding parameter assignment in __stackcall procedure fib::n = param(fib::n) +Far call main::$0 = call fib(5) +Far call fib::$4 = call fib(fib::$3) +Far call fib::$6 = call fib(fib::$5) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call fib(5) +Calling convention __stackcall adding prepare/execute/finalize for fib::$4 = call fib(fib::$3) +Calling convention __stackcall adding prepare/execute/finalize for fib::$6 = call fib(fib::$5) +Calling convention STACK_CALL replacing param(fib::n) with stackidx(char,fib::OFFSET_STACK_N) +Calling convention STACK_CALL adding stack return stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack pull fib::$4 = stackpull(char) +Calling convention STACK_CALL adding stack pull fib::$6 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = 5 +Calling convention STACK_CALL adding stack push stackpush(char) = fib::$3 +Calling convention STACK_CALL adding stack push stackpush(char) = fib::$5 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = 5 + callexecute fib + main::$0 = stackpull(char) + *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char fib(char n) +fib: scope:[fib] from + fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) + fib::$0 = fib::n#0 == 0 + fib::$1 = fib::n#0 == 1 + fib::$2 = fib::$0 || fib::$1 + if(fib::$2) goto fib::@1 + to:fib::@2 +fib::@1: scope:[fib] from fib + fib::n#1 = phi( fib/fib::n#0 ) + fib::return#0 = fib::n#1 + to:fib::@return +fib::@2: scope:[fib] from fib + fib::n#2 = phi( fib/fib::n#0 ) + fib::$3 = fib::n#2 - 1 + stackpush(char) = fib::$3 + callexecute fib + fib::$4 = stackpull(char) + fib::$5 = fib::n#2 - 2 + stackpush(char) = fib::$5 + callexecute fib + fib::$6 = stackpull(char) + fib::$7 = fib::$4 + fib::$6 + fib::return#1 = fib::$7 + to:fib::@return +fib::@return: scope:[fib] from fib::@1 fib::@2 + fib::return#2 = phi( fib::@1/fib::return#0, fib::@2/fib::return#1 ) + stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall char fib(char n) +bool fib::$0 +bool fib::$1 +bool fib::$2 +number fib::$3 +char fib::$4 +number fib::$5 +char fib::$6 +char fib::$7 +__constant char fib::OFFSET_STACK_N = 0 +__constant char fib::OFFSET_STACK_RETURN_0 = 0 +char fib::n +char fib::n#0 +char fib::n#1 +char fib::n#2 +char fib::return +char fib::return#0 +char fib::return#1 +char fib::return#2 +void main() +char main::$0 + +Adding number conversion cast (unumber) 5 in stackpush(char) = 5 +Adding number conversion cast (unumber) 0 in fib::$0 = fib::n#0 == 0 +Adding number conversion cast (unumber) 1 in fib::$1 = fib::n#0 == 1 +Adding number conversion cast (unumber) 1 in fib::$3 = fib::n#2 - 1 +Adding number conversion cast (unumber) fib::$3 in fib::$3 = fib::n#2 - (unumber)1 +Adding number conversion cast (unumber) 2 in fib::$5 = fib::n#2 - 2 +Adding number conversion cast (unumber) fib::$5 in fib::$5 = fib::n#2 - (unumber)2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)5 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in fib::$3 = fib::n#2 - 1 +Inferred type updated to char in fib::$5 = fib::n#2 - 2 +Alias fib::n#0 = fib::n#1 fib::return#0 fib::n#2 +Alias fib::return#1 = fib::$7 +Successful SSA optimization Pass2AliasElimination +Rewriting || if()-condition to two if()s [8] fib::$2 = fib::$0 || fib::$1 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Simple Condition fib::$0 [8] if(fib::n#0==0) goto fib::@1 +Simple Condition fib::$1 [21] if(fib::n#0==1) goto fib::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +CALL GRAPH +Calls in [fib] to fib:5 fib:9 +Calls in [main] to fib:18 + +Created 1 initial phi equivalence classes +Coalesced [12] fib::return#4 = fib::return#1 +Not coalescing [16] fib::return#3 = fib::n#0 +Coalesced down to 2 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char fib(char n) +fib: scope:[fib] from + [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) + [1] if(fib::n#0==0) goto fib::@1 + to:fib::@3 +fib::@3: scope:[fib] from fib + [2] if(fib::n#0==1) goto fib::@1 + to:fib::@2 +fib::@2: scope:[fib] from fib::@3 + [3] fib::$3 = fib::n#0 - 1 + [4] stackpush(char) = fib::$3 + [5] callexecute fib + [6] fib::$4 = stackpull(char) + [7] fib::$5 = fib::n#0 - 2 + [8] stackpush(char) = fib::$5 + [9] callexecute fib + [10] fib::$6 = stackpull(char) + [11] fib::return#1 = fib::$4 + fib::$6 + to:fib::@return +fib::@return: scope:[fib] from fib::@1 fib::@2 + [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) + [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 + [14] return + to:@return +fib::@1: scope:[fib] from fib fib::@3 + [15] fib::return#3 = fib::n#0 + to:fib::@return + +void main() +main: scope:[main] from + [16] stackpush(char) = 5 + [17] callexecute fib + [18] main::$0 = stackpull(char) + [19] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [20] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__far(bank) __stackcall char fib(char n) +char fib::$3 // 22.0 +char fib::$4 // 1.375 +char fib::$5 // 22.0 +char fib::$6 // 22.0 +char fib::n +char fib::n#0 // 5.5 +char fib::return +char fib::return#1 // 22.0 +char fib::return#2 // 33.0 +char fib::return#3 // 22.0 +void main() +char main::$0 // 4.0 + +Initial phi equivalence classes +[ fib::return#2 fib::return#3 fib::return#1 ] +Added variable fib::n#0 to live range equivalence class [ fib::n#0 ] +Added variable fib::$3 to live range equivalence class [ fib::$3 ] +Added variable fib::$4 to live range equivalence class [ fib::$4 ] +Added variable fib::$5 to live range equivalence class [ fib::$5 ] +Added variable fib::$6 to live range equivalence class [ fib::$6 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ fib::return#2 fib::return#3 fib::return#1 ] +[ fib::n#0 ] +[ fib::$3 ] +[ fib::$4 ] +[ fib::$5 ] +[ fib::$6 ] +[ main::$0 ] +Allocated zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] +Allocated zp[1]:3 [ fib::$3 ] +Allocated zp[1]:4 [ fib::$5 ] +Allocated zp[1]:5 [ fib::$6 ] +Allocated zp[1]:6 [ fib::n#0 ] +Allocated zp[1]:7 [ main::$0 ] +Allocated zp[1]:8 [ fib::$4 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:8 [ fib::$4 ] +Removing always clobbered register reg byte x as potential for zp[1]:8 [ fib::$4 ] +Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:6 [ fib::n#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:6 [ fib::n#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:6 [ fib::n#0 ] +Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:8 [ fib::$4 ] +Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a +Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a +Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x +Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x +Statement [1] if(fib::n#0==0) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Statement [2] if(fib::n#0==1) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a +Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a +Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x +Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ fib::n#0 ] : zp[1]:6 , +Potential registers zp[1]:3 [ fib::$3 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ fib::$4 ] : zp[1]:8 , +Potential registers zp[1]:4 [ fib::$5 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ fib::$6 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [fib] 77: zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] 22: zp[1]:3 [ fib::$3 ] 22: zp[1]:4 [ fib::$5 ] 22: zp[1]:5 [ fib::$6 ] 5.5: zp[1]:6 [ fib::n#0 ] 1.38: zp[1]:8 [ fib::$4 ] +Uplift Scope [main] 4: zp[1]:7 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [fib] best 113 combination reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] reg byte a [ fib::$3 ] reg byte a [ fib::$5 ] reg byte a [ fib::$6 ] zp[1]:6 [ fib::n#0 ] zp[1]:8 [ fib::$4 ] +Limited combination testing to 100 combinations of 256 possible. +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [main] best 107 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [] best 107 combination +Attempting to uplift remaining variables inzp[1]:6 [ fib::n#0 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [fib] best 107 combination zp[1]:6 [ fib::n#0 ] +Attempting to uplift remaining variables inzp[1]:8 [ fib::$4 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [fib] best 107 combination zp[1]:8 [ fib::$4 ] +Allocated (was zp[1]:6) zp[1]:2 [ fib::n#0 ] +Allocated (was zp[1]:8) zp[1]:3 [ fib::$4 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Recursive fibonacci + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-3.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // fib +// __register(A) char fib(__zp(2) char n) +fib: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label __4 = 3 + .label n = 2 + // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + sta.z n + // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 + lda.z n + beq __b1 + jmp __b3 + // fib::@3 + __b3: + // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z n + beq __b1 + jmp __b2 + // fib::@2 + __b2: + // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 + lda.z n + sec + sbc #1 + // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa + pha + // [5] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ + pla + sta.z __4 + // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 + lda.z n + sec + sbc #2 + // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa + pha + // [9] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z __4 + // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] + __breturn_from___b1: + __breturn_from___b2: + // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy + jmp __breturn + // fib::@return + __breturn: + // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [14] return + rts + // fib::@1 + __b1: + // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 + lda.z n + jmp __breturn_from___b1 +} + // main +main: { + // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 + lda #5 + pha + // [17] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [20] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b3 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z n +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __breturn_from___b1 with __breturn +Removing instruction __breturn_from___b1: +Removing instruction __breturn_from___b2: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __b3: +Removing instruction __b2: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +__far(bank) __stackcall char fib(char n) +char fib::$3 // reg byte a 22.0 +char fib::$4 // zp[1]:3 1.375 +char fib::$5 // reg byte a 22.0 +char fib::$6 // reg byte a 22.0 +__constant char fib::OFFSET_STACK_N = 0 +__constant char fib::OFFSET_STACK_RETURN_0 = 0 +char fib::n +char fib::n#0 // n zp[1]:2 5.5 +char fib::return +char fib::return#1 // reg byte a 22.0 +char fib::return#2 // reg byte a 33.0 +char fib::return#3 // reg byte a 22.0 +void main() +char main::$0 // reg byte a 4.0 + +reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] +zp[1]:2 [ fib::n#0 ] +reg byte a [ fib::$3 ] +zp[1]:3 [ fib::$4 ] +reg byte a [ fib::$5 ] +reg byte a [ fib::$6 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 92 + + // File Comments +// Test a procedure with calling convention stack +// Recursive fibonacci + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-3.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // fib +// __register(A) char fib(__zp(2) char n) +fib: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label __4 = 3 + .label n = 2 + // return n; + // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + sta.z n + // if (n == 0 || n == 1) + // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 + beq __b1 + // fib::@3 + // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z n + beq __b1 + // fib::@2 + // n-1 + // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 + lda.z n + sec + sbc #1 + // fib(n-1) + // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa + pha + // [5] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ + pla + sta.z __4 + // n-2 + // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 + lda.z n + sec + sbc #2 + // fib(n-2) + // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa + pha + // [9] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // return (fib(n-1) + fib(n-2)); + // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z __4 + // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] + // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy + // fib::@return + __breturn: + // } + // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [14] return + rts + // fib::@1 + __b1: + // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 + lda.z n + jmp __breturn +} + // main +main: { + // fib(5) + // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 + lda #5 + pha + // [17] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // *SCREEN = fib(5) + // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [20] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.sym b/src/test/ref/procedure-callingconvention-stack-far-3.sym new file mode 100644 index 000000000..29b0c2f60 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.sym @@ -0,0 +1,25 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +__far(bank) __stackcall char fib(char n) +char fib::$3 // reg byte a 22.0 +char fib::$4 // zp[1]:3 1.375 +char fib::$5 // reg byte a 22.0 +char fib::$6 // reg byte a 22.0 +__constant char fib::OFFSET_STACK_N = 0 +__constant char fib::OFFSET_STACK_RETURN_0 = 0 +char fib::n +char fib::n#0 // n zp[1]:2 5.5 +char fib::return +char fib::return#1 // reg byte a 22.0 +char fib::return#2 // reg byte a 33.0 +char fib::return#3 // reg byte a 22.0 +void main() +char main::$0 // reg byte a 4.0 + +reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] +zp[1]:2 [ fib::n#0 ] +reg byte a [ fib::$3 ] +zp[1]:3 [ fib::$4 ] +reg byte a [ fib::$5 ] +reg byte a [ fib::$6 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.asm b/src/test/ref/procedure-callingconvention-stack-far-4.asm new file mode 100644 index 000000000..2c82f4133 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.asm @@ -0,0 +1,76 @@ +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-4.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(__start) + .label SCREEN = $400 + .label val = 2 +.segment Code +__start: { + // char val = 0 + lda #0 + sta.z val + jsr main + rts +} +printother: { + ldx #0 + __b1: + // (SCREEN+40)[i]++; + inc SCREEN+$28,x + // for(char i:0..5) + inx + cpx #6 + bne __b1 + // } + rts +} +incval: { + // val++; + inc.z val + // } + rts +} +printval: { + // SCREEN[0] = val + lda.z val + sta SCREEN + // } + rts +} +ival: { + // incval() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // } + rts +} +pval: { + // printval() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // } + rts +} +main: { + .label i = 3 + lda #0 + sta.z i + __b1: + // pval() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // printother() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // ival() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // for(char i:0..5) + inc.z i + lda #6 + cmp.z i + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.cfg b/src/test/ref/procedure-callingconvention-stack-far-4.cfg new file mode 100644 index 000000000..07de02cc3 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.cfg @@ -0,0 +1,79 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__far(bank) __stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__far(bank) __stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__far(bank) __stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__far(bank) __stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.log b/src/test/ref/procedure-callingconvention-stack-far-4.log new file mode 100644 index 000000000..677d0e3cf --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.log @@ -0,0 +1,924 @@ +Converting variable modified inside __stackcall procedure main() to load/store val +Inlined call call __init +Far call main::$0 = call pval +Far call main::$1 = call printother +Far call main::$2 = call ival +Far call pval::$0 = call printval +Far call ival::$0 = call incval +Calling convention __stackcall adding prepare/execute/finalize for call pval +Calling convention __stackcall adding prepare/execute/finalize for call printother +Calling convention __stackcall adding prepare/execute/finalize for call ival +Calling convention __stackcall adding prepare/execute/finalize for call printval +Calling convention __stackcall adding prepare/execute/finalize for call incval +Calling convention __stackcall adding prepare/execute/finalize for call main + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) + callexecute pval + callexecute printother + callexecute ival + main::i#1 = main::i#2 + rangenext(0,5) + main::$3 = main::i#1 != rangelast(0,5) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) __stackcall void pval() +pval: scope:[pval] from + callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + return + to:@return + +__far(bank) __stackcall void ival() +ival: scope:[ival] from + callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + return + to:@return + +__far(bank) __stackcall void printval() +printval: scope:[printval] from + SCREEN[0] = val + to:printval::@return +printval::@return: scope:[printval] from printval + return + to:@return + +__far(bank) __stackcall void incval() +incval: scope:[incval] from + val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + return + to:@return + +__far(bank) __stackcall void printother() +printother: scope:[printother] from + printother::i#0 = 0 + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) + (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + printother::i#1 = printother::i#2 + rangenext(0,5) + printother::$1 = printother::i#1 != rangelast(0,5) + if(printother::$1) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +bool main::$3 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +__far(bank) __stackcall void printother() +bool printother::$1 +char printother::i +char printother::i#0 +char printother::i#1 +char printother::i#2 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val + +Adding number conversion cast (unumber) 0 in SCREEN[0] = val +Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 +Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Constant printother::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ +Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 +Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ +Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 +Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val +Successful SSA optimization PassNSimplifyExpressionWithZero +Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 +Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 6 +Simplifying constant integer cast 6 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 6 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings printother::i#0 +Constant inlined main::i#0 = 0 +Constant inlined printother::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [ival] to incval:17 +Calls in [pval] to printval:20 +Calls in [main] to pval:24 printother:25 ival:26 + +Created 2 initial phi equivalence classes +Coalesced [11] printother::i#3 = printother::i#1 +Coalesced [30] main::i#3 = main::i#1 +Coalesced down to 2 phi equivalence classes +Culled Empty Block label printother::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__far(bank) __stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__far(bank) __stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__far(bank) __stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__far(bank) __stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval + +VARIABLE REGISTER WEIGHTS +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // 151.5 +char main::i#2 // 50.5 +__far(bank) __stackcall void printother() +char printother::i +char printother::i#1 // 15001.5 +char printother::i#2 // 20002.0 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val // 1579.2105263157896 + +Initial phi equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +Added variable val to live range equivalence class [ val ] +Complete equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +[ val ] +Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] +Allocated zp[1]:3 [ val ] +Allocated zp[1]:4 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , +Potential registers zp[1]:3 [ val ] : zp[1]:3 , + +REGISTER UPLIFT SCOPES +Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] +Uplift Scope [] 1,579.21: zp[1]:3 [ val ] +Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] +Uplift Scope [pval] +Uplift Scope [ival] +Uplift Scope [printval] +Uplift Scope [incval] +Uplift Scope [__start] + +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [printother] best 623 combination reg byte x [ printother::i#2 printother::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [] best 623 combination zp[1]:3 [ val ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [pval] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [ival] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [printval] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [incval] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [__start] best 623 combination +Attempting to uplift remaining variables inzp[1]:3 [ val ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [] best 623 combination zp[1]:3 [ val ] +Attempting to uplift remaining variables inzp[1]:4 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] +Allocated (was zp[1]:3) zp[1]:2 [ val ] +Allocated (was zp[1]:4) zp[1]:3 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-4.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(__start) + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + __b1_from_printother: + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + __b1_from___b1: + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + jmp __b1 + // printother::@1 + __b1: + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1_from___b1 + jmp __breturn + // printother::@return + __breturn: + // [10] return + rts +} + // incval +incval: { + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + jmp __breturn + // incval::@return + __breturn: + // [12] return + rts +} + // printval +printval: { + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + jmp __breturn + // printval::@return + __breturn: + // [14] return + rts +} + // ival +ival: { + // [16] callexecute incval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + jmp __breturn + // ival::@return + __breturn: + // [17] return + rts +} + // pval +pval: { + // [19] callexecute printval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + jmp __breturn + // pval::@return + __breturn: + // [20] return + rts +} + // main +main: { + .label i = 3 + // [22] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [23] callexecute pval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [24] callexecute printother + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [25] callexecute ival + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [28] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction __b1_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b1_from_printother: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:3 151.5 +char main::i#2 // i zp[1]:3 50.5 +__far(bank) __stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +zp[1]:3 [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] + + +FINAL ASSEMBLER +Score: 395 + + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-4.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(__start) + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + // __start::__init1 + // char val = 0 + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + // printother::@1 + __b1: + // (SCREEN+40)[i]++; + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // for(char i:0..5) + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1 + // printother::@return + // } + // [10] return + rts +} + // incval +incval: { + // val++; + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + // incval::@return + // } + // [12] return + rts +} + // printval +printval: { + // SCREEN[0] = val + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + // printval::@return + // } + // [14] return + rts +} + // ival +ival: { + // incval() + // [16] callexecute incval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // ival::@return + // } + // [17] return + rts +} + // pval +pval: { + // printval() + // [19] callexecute printval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // pval::@return + // } + // [20] return + rts +} + // main +main: { + .label i = 3 + // [22] phi from main to main::@1 [phi:main->main::@1] + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // pval() + // [23] callexecute pval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // printother() + // [24] callexecute printother + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // ival() + // [25] callexecute ival + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // for(char i:0..5) + // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1 + // main::@return + // } + // [28] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.sym b/src/test/ref/procedure-callingconvention-stack-far-4.sym new file mode 100644 index 000000000..0081a2b70 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:3 151.5 +char main::i#2 // i zp[1]:3 50.5 +__far(bank) __stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +zp[1]:3 [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.asm b/src/test/ref/procedure-callingconvention-stack-far-5.asm new file mode 100644 index 000000000..31f8416e8 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.asm @@ -0,0 +1,110 @@ +// Test a procedure with calling convention stack +// Returning and passing struct values + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-5.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(__start) + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code +__start: { + // char idx = 0 + lda #0 + sta.z idx + jsr main + rts +} +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + inc.z idx + // SCREEN[idx++] = p.y + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + inc.z idx + // } + rts +} +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + txa + lsr + // struct Point p = { i, i/2 } + stx.z p + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // } + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + rts +} +main: { + .label p = 2 + .label i = 5 + lda #0 + sta.z i + __b1: + // for(char i=0;i<5;i++) + lda.z i + cmp #5 + bcc __b2 + // } + rts + __b2: + // struct Point p = get(i) + lda.z i + pha + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + sta.z p + pla + sta.z p+1 + // print(p) + pha + lda.z p + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // for(char i=0;i<5;i++) + inc.z i + jmp __b1 +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.cfg b/src/test/ref/procedure-callingconvention-stack-far-5.cfg new file mode 100644 index 000000000..0e44c7ff7 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.cfg @@ -0,0 +1,62 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__far(bank) __stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.log b/src/test/ref/procedure-callingconvention-stack-far-5.log new file mode 100644 index 000000000..f6cd22af4 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.log @@ -0,0 +1,845 @@ +Converting variable modified inside __stackcall procedure main() to load/store idx +Adding parameter assignment in __stackcall procedure get::i = param(get::i) +Adding parameter assignment in __stackcall procedure print::p = param(print::p) +Inlined call call __init +Far call main::p = call get(main::i) +Far call main::$2 = call print(main::p) +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) +Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) +Calling convention __stackcall adding prepare/execute/finalize for call main +Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) +Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) +Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return +Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) +Calling convention STACK_CALL adding stack push stackpush(char) = main::i +Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p +Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} +Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@2 + main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) + main::$0 = main::i#2 < 5 + if(main::$0) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#3 = phi( main::@1/main::i#2 ) + stackpush(char) = main::i#3 + sideeffect stackpushpadding(1) + callexecute get + main::p = stackpull(struct Point) + stackpush(struct Point) = main::p + callexecute print + sideeffect stackpullpadding(2) + main::i#1 = ++ main::i#3 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) __stackcall struct Point get(char i) +get: scope:[get] from + get::i#0 = stackidx(char,get::OFFSET_STACK_I) + get::$0 = get::i#0 / 2 + *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 + *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + return + to:@return + +__far(bank) __stackcall void print(struct Point p) +print: scope:[print] from + print::p = stackidx(struct Point,print::OFFSET_STACK_P) + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) + idx = ++ idx + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char OFFSET_STRUCT_POINT_X = 0 +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *)$400 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall struct Point get(char i) +number get::$0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 +__loadstore struct Point get::p +__loadstore struct Point get::return +__loadstore char idx +__stackcall void main() +bool main::$0 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +__loadstore struct Point main::p +__far(bank) __stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p + +Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 +Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 +Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in get::$0 = get::i#0 / 2 +Alias main::i#2 = main::i#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 +Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_STRUCT_POINT_X +Successful SSA optimization PassNEliminateUnusedVars +Rewriting division to use shift [12] get::$0 = get::i#0 / 2 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::i#0 +Constant inlined main::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to get:24 print:27 + +Created 1 initial phi equivalence classes +Coalesced [30] main::i#4 = main::i#1 +Coalesced down to 1 phi equivalence classes +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__far(bank) __stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 + +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get + +VARIABLE REGISTER WEIGHTS +void __start() +__far(bank) __stackcall struct Point get(char i) +char get::$0 // 1001.0 +char get::i +char get::i#0 // 1501.5 +__loadstore struct Point get::p +__loadstore struct Point get::return // 47.666666666666664 +__loadstore char idx // 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // 202.0 +char main::i#2 // 44.888888888888886 +__loadstore struct Point main::p // 202.0 +__far(bank) __stackcall void print(struct Point p) +__loadstore struct Point print::p // 333.6666666666667 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Added variable idx to live range equivalence class [ idx ] +Added variable print::p to live range equivalence class [ print::p ] +Added variable get::i#0 to live range equivalence class [ get::i#0 ] +Added variable get::$0 to live range equivalence class [ get::$0 ] +Added variable main::p to live range equivalence class [ main::p ] +Added variable get::return to live range equivalence class [ get::return ] +Added variable get::p to live range equivalence class [ get::p ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ idx ] +[ print::p ] +[ get::i#0 ] +[ get::$0 ] +[ main::p ] +[ get::return ] +[ get::p ] +Allocated zp[1]:2 [ get::i#0 ] +Allocated zp[1]:3 [ get::$0 ] +Allocated zp[2]:4 [ print::p ] +Allocated zp[1]:6 [ idx ] +Allocated zp[1]:7 [ main::i#2 main::i#1 ] +Allocated zp[2]:8 [ main::p ] +Allocated zp[2]:10 [ get::return ] +Allocated zp[2]:12 [ get::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , +Potential registers zp[1]:6 [ idx ] : zp[1]:6 , +Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , +Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , +Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , +Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , + +REGISTER UPLIFT SCOPES +Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] +Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] +Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] +Uplift Scope [] 316.21: zp[1]:6 [ idx ] +Uplift Scope [Point] +Uplift Scope [__start] + +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [get] best 873 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [print] best 873 combination zp[2]:4 [ print::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [] best 873 combination zp[1]:6 [ idx ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [Point] best 873 combination +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [__start] best 873 combination +Attempting to uplift remaining variables inzp[1]:6 [ idx ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [] best 873 combination zp[1]:6 [ idx ] +Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] +Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] +Allocated (was zp[1]:6) zp[1]:4 [ idx ] +Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] +Allocated (was zp[2]:10) zp[2]:6 [ get::return ] +Allocated (was zp[2]:12) zp[2]:8 [ get::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-5.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(__start) + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + jmp __breturn + // print::@return + __breturn: + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + jmp __breturn + // get::@return + __breturn: + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // main::@1 + __b1: + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [21] return + rts + // main::@2 + __b2: + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + lda.z p+1 + pha + lda.z p + pha + // [27] callexecute print + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z p+1 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1_from___init1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__far(bank) __stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] + + +FINAL ASSEMBLER +Score: 741 + + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-5.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(__start) + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char idx = 0 + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // SCREEN[idx++] = p.y + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // print::@return + // } + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // struct Point p = { i, i/2 } + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // get::@return + // } + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // main::@1 + __b1: + // for(char i=0;i<5;i++) + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + // main::@return + // } + // [21] return + rts + // main::@2 + __b2: + // struct Point p = get(i) + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // print(p) + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + pha + lda.z p + pha + // [27] callexecute print + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // for(char i=0;i<5;i++) + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.sym b/src/test/ref/procedure-callingconvention-stack-far-5.sym new file mode 100644 index 000000000..71c714767 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.sym @@ -0,0 +1,30 @@ +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__far(bank) __stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.asm b/src/test/ref/procedure-callingconvention-stack-far-6.asm new file mode 100644 index 000000000..f5a07a3d3 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.asm @@ -0,0 +1,51 @@ +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-6.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) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + cmp #0 + beq __b1 + // n-1 + sec + sbc #1 + // char c = pow2(n-1) + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // return c+c; + asl + jmp __breturn + __b1: + lda #1 + __breturn: + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + rts +} +main: { + // pow2(6) + lda #6 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // *SCREEN = pow2(6) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.cfg b/src/test/ref/procedure-callingconvention-stack-far-6.cfg new file mode 100644 index 000000000..23570a74e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.cfg @@ -0,0 +1,29 @@ + +__far(bank) __stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.log b/src/test/ref/procedure-callingconvention-stack-far-6.log new file mode 100644 index 000000000..d5fc76baf --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.log @@ -0,0 +1,1060 @@ +Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) +Far call main::$0 = call pow2(6) +Far call pow2::c = call pow2(pow2::$1) +Eliminating unused variable with no statement pow2::$2 +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) +Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) +Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) +Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = 6 +Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = 6 + callexecute pow2 + main::$0 = stackpull(char) + *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char pow2(char n) +pow2: scope:[pow2] from + pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + pow2::$0 = pow2::n#0 == 0 + if(pow2::$0) goto pow2::@1 + to:pow2::@2 +pow2::@1: scope:[pow2] from pow2 + pow2::return#0 = 1 + to:pow2::@return +pow2::@2: scope:[pow2] from pow2 + pow2::n#1 = phi( pow2/pow2::n#0 ) + pow2::$1 = pow2::n#1 - 1 + stackpush(char) = pow2::$1 + callexecute pow2 + pow2::c#0 = stackpull(char) + pow2::$3 = pow2::c#0 + pow2::c#0 + pow2::return#1 = pow2::$3 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 + pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) + stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__far(bank) __stackcall char pow2(char n) +bool pow2::$0 +number pow2::$1 +char pow2::$3 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 +char pow2::n +char pow2::n#0 +char pow2::n#1 +char pow2::return +char pow2::return#0 +char pow2::return#1 +char pow2::return#2 + +Adding number conversion cast (unumber) 6 in stackpush(char) = 6 +Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 +Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 +Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 +Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)6 +Inlining cast pow2::return#0 = (unumber)1 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 6 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 +Alias pow2::n#0 = pow2::n#1 +Alias pow2::return#1 = pow2::$3 +Successful SSA optimization Pass2AliasElimination +Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantIdentification +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Inlining constant with var siblings pow2::return#0 +Constant inlined pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of pow2::@1 +CALL GRAPH +Calls in [pow2] to pow2:4 +Calls in [main] to pow2:13 + +Created 1 initial phi equivalence classes +Coalesced [7] pow2::return#3 = pow2::return#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label pow2::@1 +Renumbering block pow2::@2 to pow2::@1 + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__far(bank) __stackcall char pow2(char n) +char pow2::$1 // 22.0 +char pow2::c +char pow2::c#0 // 33.0 +char pow2::n +char pow2::n#0 // 16.5 +char pow2::return +char pow2::return#1 // 22.0 +char pow2::return#2 // 22.0 + +Initial phi equivalence classes +[ pow2::return#2 pow2::return#1 ] +Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] +Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] +Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ pow2::return#2 pow2::return#1 ] +[ pow2::n#0 ] +[ pow2::$1 ] +[ pow2::c#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] +Allocated zp[1]:3 [ pow2::c#0 ] +Allocated zp[1]:4 [ pow2::$1 ] +Allocated zp[1]:5 [ pow2::n#0 ] +Allocated zp[1]:6 [ main::$0 ] +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x +Potential register analysis [4] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [4] callexecute pow2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a +Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a +Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x +Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [11] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [11] callexecute pow2 [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] +Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Uplifting [pow2] best 75 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] +Limited combination testing to 100 combinations of 256 possible. +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Uplifting [main] best 69 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Uplifting [] best 69 combination +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-6.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __breturn_from_pow2 + jmp __b1 + // pow2::@1 + __b1: + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + __breturn_from___b1: + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __breturn_from_pow2: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + jmp __breturn + // pow2::@return + __breturn: + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [14] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Removing instruction __breturn_from___b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Relabelling long label __breturn_from_pow2 to __b1 +Succesful ASM optimization Pass5RelabelLongLabels + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 60 + + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-6.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) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __b1 + // pow2::@1 + // n-1 + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // char c = pow2(n-1) + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // return c+c; + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __b1: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + // pow2::@return + __breturn: + // } + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // pow2(6) + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // *SCREEN = pow2(6) + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [14] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.sym b/src/test/ref/procedure-callingconvention-stack-far-6.sym new file mode 100644 index 000000000..52b0b3f95 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.sym @@ -0,0 +1,21 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] From 1ef785a2548592b25ced27d03fb94ba79dbd1f4a Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sat, 19 Nov 2022 07:45:07 +0100 Subject: [PATCH 07/50] Parsing implementation of #pragma far_seg(segment, bank, call_prepare, call_execute, call_finalize) with variable parameters, other option is: #pragma far_seg(segment, bank) After parsing a FarSegment HashMap is created that is later used for the far or near call determination. Added currentFarSegment variable. Added near in KickCLexer for __near directive. Added far_seg and near_seg #pragma keywords. near_seg is to be parsed in the next commit. --- .../dk/camelot64/kickc/parser/KickCLexer.g4 | 1 + .../dk/camelot64/kickc/model/FarSegment.java | 32 ++++++++++++ .../camelot64/kickc/model/symbols/Scope.java | 2 + .../dk/camelot64/kickc/parser/CParser.java | 8 +++ .../Pass0GenerateStatementSequence.java | 52 +++++++++++++++++++ .../procedure-callingconvention-phi-far-1.c | 30 +++++++++++ .../procedure-callingconvention-phi-far-2.c | 30 +++++++++++ .../procedure-callingconvention-phi-far-3.c | 30 +++++++++++ 8 files changed, 185 insertions(+) create mode 100644 src/main/java/dk/camelot64/kickc/model/FarSegment.java create mode 100644 src/test/kc/procedure-callingconvention-phi-far-1.c create mode 100644 src/test/kc/procedure-callingconvention-phi-far-2.c create mode 100644 src/test/kc/procedure-callingconvention-phi-far-3.c diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index b7662e69e..f784b250e 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -76,6 +76,7 @@ ADDRESS: '__address' ; ADDRESS_ZEROPAGE: '__zp' ; ADDRESS_MAINMEM: '__mem' ; FAR: '__far' ; +NEAR: '__near' ; FORM_SSA: '__ssa' ; FORM_MA: '__ma' ; INTRINSIC: '__intrinsic' ; diff --git a/src/main/java/dk/camelot64/kickc/model/FarSegment.java b/src/main/java/dk/camelot64/kickc/model/FarSegment.java new file mode 100644 index 000000000..d297adbad --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/FarSegment.java @@ -0,0 +1,32 @@ +package dk.camelot64.kickc.model; + +import dk.camelot64.kickc.model.symbols.Procedure; + +import java.util.List; + +/** A far segment. */ +public class FarSegment { + + private String name; + private Integer bank; + private String call_prepare; + private String call_execute; + private String call_finalize; + + public FarSegment(String name, Integer bank, String call_prepare, String call_execute, String call_finalize) { + this.name = name; + this.bank = bank; + this.call_prepare = call_prepare; + this.call_execute = call_execute; + this.call_finalize = call_finalize; + } + + public String getName() { + return name; + } + + + public Integer getBank() { + return bank; + } +} diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index ed32ce6ba..89541598a 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -16,6 +16,8 @@ public abstract class Scope implements Symbol { public static final String SEGMENT_CODE_DEFAULT = "Code"; /** The default data segment. */ public static final String SEGMENT_DATA_DEFAULT = "Data"; + /** The default far segment. */ + public static final String SEGMENT_FAR_DEFAULT = ""; private String name; private HashMap symbols; diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index f56daca13..a01d0194a 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -106,6 +106,14 @@ public class CParser { * The resource-file is copied to the output directory when compiling. */ public static final String PRAGMA_RESOURCE = "resource"; + /** + * #pragma far_seg(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. + */ + public static final String PRAGMA_FAR_SEG = "far_seg"; + /** + * #pragma near_seg specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + */ + public static final String PRAGMA_NEAR_SEG = "near_seg"; /** * The Program. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index e1e977743..9ac613614 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -43,6 +43,10 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ private final List pragmaConstructorFors; + /** All #pragma code segments. Collected during parsing. These are used by the far_seg pragmas to validate if the code segment exists during compilation.*/ + private final Map pragmaCodeSegs; + /** All #pragma far segments. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ + private final Map pragmaFarSegs; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -53,6 +57,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(); // Used to collect all pragma code segments. + this.pragmaFarSegs = new HashMap<>(); // Used to collect all pragma far segments. this.currentInterruptType = defaultInterruptType; scopeStack.push(program.getScope()); } @@ -290,10 +296,35 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 7) { + final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); + final String call_execute = pragmaParamName(ctx.pragmaParam(3)); + final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); + this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), call_prepare, call_execute, call_finalize)); + } else { + this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), "", "", "")); + } + } + } else { + throw new CompileError("Expected at least 2 pragma parameters. Found '" + ctx.getText() + "'.", new StatementSource(ctx)); + } + } catch(IllegalArgumentException e) { + throw new CompileError("Illegal parameter " + ctx.getText(), new StatementSource(ctx)); + } + break; case CParser.PRAGMA_RESOURCE: String resourceFileName = pragmaParamString(pragmaParamSingle(ctx)); addResourceFile(ctx, resourceFileName); @@ -367,6 +398,24 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Sat, 19 Nov 2022 08:06:52 +0100 Subject: [PATCH 08/50] Implementation of #pragma near_seg without prameters. There was a change needed to update the parameter parsing main algorithm, to make parameters optional instead of mandatory. --- gen/KickCLexer.interp | 5 +- gen/KickCLexer.java | 2556 +++++++++-------- gen/KickCLexer.tokens | 278 +- .../dk/camelot64/kickc/parser/KickCParser.g4 | 3 +- .../Pass0GenerateStatementSequence.java | 3 + .../kickc/preprocessor/CPreprocessor.java | 38 +- .../procedure-callingconvention-phi-far-4.c | 32 + 7 files changed, 1482 insertions(+), 1433 deletions(-) create mode 100644 src/test/kc/procedure-callingconvention-phi-far-4.c diff --git a/gen/KickCLexer.interp b/gen/KickCLexer.interp index c67534aef..3688c113f 100644 --- a/gen/KickCLexer.interp +++ b/gen/KickCLexer.interp @@ -53,6 +53,7 @@ null '__zp' '__mem' '__far' +'__near' '__ssa' '__ma' '__intrinsic' @@ -209,6 +210,7 @@ ADDRESS ADDRESS_ZEROPAGE ADDRESS_MAINMEM FAR +NEAR FORM_SSA FORM_MA INTRINSIC @@ -363,6 +365,7 @@ ADDRESS ADDRESS_ZEROPAGE ADDRESS_MAINMEM FAR +NEAR FORM_SSA FORM_MA INTRINSIC @@ -484,4 +487,4 @@ ASM_MODE IMPORT_MODE atn: -[4, 0, 153, 1974, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 437, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 628, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 805, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 816, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 822, 8, 79, 10, 79, 12, 79, 825, 9, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 872, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 3, 95, 934, 8, 95, 1, 96, 1, 96, 1, 96, 3, 96, 939, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 946, 8, 97, 1, 97, 5, 97, 949, 8, 97, 10, 97, 12, 97, 952, 9, 97, 1, 97, 1, 97, 4, 97, 956, 8, 97, 11, 97, 12, 97, 957, 1, 98, 5, 98, 961, 8, 98, 10, 98, 12, 98, 964, 9, 98, 1, 98, 1, 98, 4, 98, 968, 8, 98, 11, 98, 12, 98, 969, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 977, 8, 99, 1, 99, 5, 99, 980, 8, 99, 10, 99, 12, 99, 983, 9, 99, 1, 99, 1, 99, 4, 99, 987, 8, 99, 11, 99, 12, 99, 988, 1, 100, 1, 100, 1, 100, 3, 100, 994, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 999, 8, 100, 1, 101, 1, 101, 1, 101, 4, 101, 1004, 8, 101, 11, 101, 12, 101, 1005, 1, 101, 1, 101, 4, 101, 1010, 8, 101, 11, 101, 12, 101, 1011, 3, 101, 1014, 8, 101, 1, 102, 4, 102, 1017, 8, 102, 11, 102, 12, 102, 1018, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1026, 8, 103, 1, 103, 4, 103, 1029, 8, 103, 11, 103, 12, 103, 1030, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 5, 107, 1041, 8, 107, 10, 107, 12, 107, 1044, 9, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1056, 8, 110, 10, 110, 12, 110, 1059, 9, 110, 1, 110, 1, 110, 3, 110, 1063, 8, 110, 1, 110, 1, 110, 3, 110, 1067, 8, 110, 3, 110, 1069, 8, 110, 1, 110, 3, 110, 1072, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1086, 8, 111, 1, 111, 3, 111, 1089, 8, 111, 1, 111, 1, 111, 1, 112, 4, 112, 1094, 8, 112, 11, 112, 12, 112, 1095, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1104, 8, 113, 10, 113, 12, 113, 1107, 9, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1115, 8, 114, 10, 114, 12, 114, 1118, 9, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1738, 8, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 3, 135, 1782, 8, 135, 1, 136, 1, 136, 1, 136, 3, 136, 1787, 8, 136, 1, 137, 1, 137, 5, 137, 1791, 8, 137, 10, 137, 12, 137, 1794, 9, 137, 1, 137, 1, 137, 4, 137, 1798, 8, 137, 11, 137, 12, 137, 1799, 1, 138, 5, 138, 1803, 8, 138, 10, 138, 12, 138, 1806, 9, 138, 1, 138, 1, 138, 4, 138, 1810, 8, 138, 11, 138, 12, 138, 1811, 1, 139, 1, 139, 5, 139, 1816, 8, 139, 10, 139, 12, 139, 1819, 9, 139, 1, 139, 1, 139, 4, 139, 1823, 8, 139, 11, 139, 12, 139, 1824, 1, 140, 1, 140, 1, 140, 3, 140, 1830, 8, 140, 1, 141, 1, 141, 4, 141, 1834, 8, 141, 11, 141, 12, 141, 1835, 1, 142, 4, 142, 1839, 8, 142, 11, 142, 12, 142, 1840, 1, 143, 1, 143, 4, 143, 1845, 8, 143, 11, 143, 12, 143, 1846, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 1859, 8, 147, 1, 147, 1, 147, 1, 148, 1, 148, 4, 148, 1865, 8, 148, 11, 148, 12, 148, 1866, 1, 149, 1, 149, 5, 149, 1871, 8, 149, 10, 149, 12, 149, 1874, 9, 149, 1, 150, 1, 150, 5, 150, 1878, 8, 150, 10, 150, 12, 150, 1881, 9, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 154, 4, 154, 1891, 8, 154, 11, 154, 12, 154, 1892, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 5, 155, 1901, 8, 155, 10, 155, 12, 155, 1904, 9, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1912, 8, 156, 10, 156, 12, 156, 1915, 9, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 4, 157, 1924, 8, 157, 11, 157, 12, 157, 1925, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1935, 8, 158, 10, 158, 12, 158, 1938, 9, 158, 1, 158, 1, 158, 1, 158, 1, 159, 4, 159, 1944, 8, 159, 11, 159, 12, 159, 1945, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 1954, 8, 160, 10, 160, 12, 160, 1957, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1965, 8, 161, 10, 161, 12, 161, 1968, 9, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 4, 823, 1116, 1913, 1966, 0, 162, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 0, 213, 0, 215, 0, 217, 106, 219, 0, 221, 0, 223, 107, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 0, 293, 0, 295, 0, 297, 141, 299, 142, 301, 143, 303, 144, 305, 0, 307, 0, 309, 145, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2235, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 1, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 297, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 309, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 2, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 3, 327, 1, 0, 0, 0, 5, 330, 1, 0, 0, 0, 7, 332, 1, 0, 0, 0, 9, 334, 1, 0, 0, 0, 11, 336, 1, 0, 0, 0, 13, 338, 1, 0, 0, 0, 15, 340, 1, 0, 0, 0, 17, 342, 1, 0, 0, 0, 19, 344, 1, 0, 0, 0, 21, 346, 1, 0, 0, 0, 23, 349, 1, 0, 0, 0, 25, 353, 1, 0, 0, 0, 27, 355, 1, 0, 0, 0, 29, 357, 1, 0, 0, 0, 31, 360, 1, 0, 0, 0, 33, 362, 1, 0, 0, 0, 35, 364, 1, 0, 0, 0, 37, 366, 1, 0, 0, 0, 39, 368, 1, 0, 0, 0, 41, 370, 1, 0, 0, 0, 43, 373, 1, 0, 0, 0, 45, 376, 1, 0, 0, 0, 47, 378, 1, 0, 0, 0, 49, 380, 1, 0, 0, 0, 51, 382, 1, 0, 0, 0, 53, 384, 1, 0, 0, 0, 55, 387, 1, 0, 0, 0, 57, 390, 1, 0, 0, 0, 59, 393, 1, 0, 0, 0, 61, 396, 1, 0, 0, 0, 63, 398, 1, 0, 0, 0, 65, 401, 1, 0, 0, 0, 67, 404, 1, 0, 0, 0, 69, 406, 1, 0, 0, 0, 71, 409, 1, 0, 0, 0, 73, 412, 1, 0, 0, 0, 75, 436, 1, 0, 0, 0, 77, 438, 1, 0, 0, 0, 79, 446, 1, 0, 0, 0, 81, 452, 1, 0, 0, 0, 83, 459, 1, 0, 0, 0, 85, 468, 1, 0, 0, 0, 87, 476, 1, 0, 0, 0, 89, 483, 1, 0, 0, 0, 91, 492, 1, 0, 0, 0, 93, 499, 1, 0, 0, 0, 95, 511, 1, 0, 0, 0, 97, 520, 1, 0, 0, 0, 99, 533, 1, 0, 0, 0, 101, 543, 1, 0, 0, 0, 103, 548, 1, 0, 0, 0, 105, 554, 1, 0, 0, 0, 107, 560, 1, 0, 0, 0, 109, 566, 1, 0, 0, 0, 111, 571, 1, 0, 0, 0, 113, 627, 1, 0, 0, 0, 115, 629, 1, 0, 0, 0, 117, 632, 1, 0, 0, 0, 119, 637, 1, 0, 0, 0, 121, 643, 1, 0, 0, 0, 123, 646, 1, 0, 0, 0, 125, 650, 1, 0, 0, 0, 127, 657, 1, 0, 0, 0, 129, 664, 1, 0, 0, 0, 131, 670, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 684, 1, 0, 0, 0, 137, 690, 1, 0, 0, 0, 139, 698, 1, 0, 0, 0, 141, 703, 1, 0, 0, 0, 143, 710, 1, 0, 0, 0, 145, 716, 1, 0, 0, 0, 147, 721, 1, 0, 0, 0, 149, 728, 1, 0, 0, 0, 151, 735, 1, 0, 0, 0, 153, 743, 1, 0, 0, 0, 155, 751, 1, 0, 0, 0, 157, 804, 1, 0, 0, 0, 159, 815, 1, 0, 0, 0, 161, 817, 1, 0, 0, 0, 163, 829, 1, 0, 0, 0, 165, 839, 1, 0, 0, 0, 167, 850, 1, 0, 0, 0, 169, 858, 1, 0, 0, 0, 171, 871, 1, 0, 0, 0, 173, 873, 1, 0, 0, 0, 175, 880, 1, 0, 0, 0, 177, 887, 1, 0, 0, 0, 179, 895, 1, 0, 0, 0, 181, 899, 1, 0, 0, 0, 183, 905, 1, 0, 0, 0, 185, 911, 1, 0, 0, 0, 187, 918, 1, 0, 0, 0, 189, 925, 1, 0, 0, 0, 191, 928, 1, 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 938, 1, 0, 0, 0, 197, 945, 1, 0, 0, 0, 199, 962, 1, 0, 0, 0, 201, 976, 1, 0, 0, 0, 203, 993, 1, 0, 0, 0, 205, 1013, 1, 0, 0, 0, 207, 1016, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1032, 1, 0, 0, 0, 213, 1034, 1, 0, 0, 0, 215, 1036, 1, 0, 0, 0, 217, 1038, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1049, 1, 0, 0, 0, 223, 1051, 1, 0, 0, 0, 225, 1073, 1, 0, 0, 0, 227, 1093, 1, 0, 0, 0, 229, 1099, 1, 0, 0, 0, 231, 1110, 1, 0, 0, 0, 233, 1124, 1, 0, 0, 0, 235, 1737, 1, 0, 0, 0, 237, 1739, 1, 0, 0, 0, 239, 1741, 1, 0, 0, 0, 241, 1743, 1, 0, 0, 0, 243, 1745, 1, 0, 0, 0, 245, 1747, 1, 0, 0, 0, 247, 1749, 1, 0, 0, 0, 249, 1751, 1, 0, 0, 0, 251, 1753, 1, 0, 0, 0, 253, 1755, 1, 0, 0, 0, 255, 1758, 1, 0, 0, 0, 257, 1761, 1, 0, 0, 0, 259, 1763, 1, 0, 0, 0, 261, 1765, 1, 0, 0, 0, 263, 1767, 1, 0, 0, 0, 265, 1769, 1, 0, 0, 0, 267, 1771, 1, 0, 0, 0, 269, 1773, 1, 0, 0, 0, 271, 1776, 1, 0, 0, 0, 273, 1781, 1, 0, 0, 0, 275, 1786, 1, 0, 0, 0, 277, 1788, 1, 0, 0, 0, 279, 1804, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1829, 1, 0, 0, 0, 285, 1831, 1, 0, 0, 0, 287, 1838, 1, 0, 0, 0, 289, 1842, 1, 0, 0, 0, 291, 1848, 1, 0, 0, 0, 293, 1850, 1, 0, 0, 0, 295, 1852, 1, 0, 0, 0, 297, 1854, 1, 0, 0, 0, 299, 1862, 1, 0, 0, 0, 301, 1868, 1, 0, 0, 0, 303, 1875, 1, 0, 0, 0, 305, 1882, 1, 0, 0, 0, 307, 1884, 1, 0, 0, 0, 309, 1886, 1, 0, 0, 0, 311, 1890, 1, 0, 0, 0, 313, 1896, 1, 0, 0, 0, 315, 1907, 1, 0, 0, 0, 317, 1921, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1943, 1, 0, 0, 0, 323, 1949, 1, 0, 0, 0, 325, 1960, 1, 0, 0, 0, 327, 328, 5, 123, 0, 0, 328, 329, 6, 0, 0, 0, 329, 4, 1, 0, 0, 0, 330, 331, 5, 125, 0, 0, 331, 6, 1, 0, 0, 0, 332, 333, 5, 91, 0, 0, 333, 8, 1, 0, 0, 0, 334, 335, 5, 93, 0, 0, 335, 10, 1, 0, 0, 0, 336, 337, 5, 40, 0, 0, 337, 12, 1, 0, 0, 0, 338, 339, 5, 41, 0, 0, 339, 14, 1, 0, 0, 0, 340, 341, 5, 59, 0, 0, 341, 16, 1, 0, 0, 0, 342, 343, 5, 58, 0, 0, 343, 18, 1, 0, 0, 0, 344, 345, 5, 44, 0, 0, 345, 20, 1, 0, 0, 0, 346, 347, 5, 46, 0, 0, 347, 348, 5, 46, 0, 0, 348, 22, 1, 0, 0, 0, 349, 350, 5, 46, 0, 0, 350, 351, 5, 46, 0, 0, 351, 352, 5, 46, 0, 0, 352, 24, 1, 0, 0, 0, 353, 354, 5, 63, 0, 0, 354, 26, 1, 0, 0, 0, 355, 356, 5, 46, 0, 0, 356, 28, 1, 0, 0, 0, 357, 358, 5, 45, 0, 0, 358, 359, 5, 62, 0, 0, 359, 30, 1, 0, 0, 0, 360, 361, 5, 43, 0, 0, 361, 32, 1, 0, 0, 0, 362, 363, 5, 45, 0, 0, 363, 34, 1, 0, 0, 0, 364, 365, 5, 42, 0, 0, 365, 36, 1, 0, 0, 0, 366, 367, 5, 47, 0, 0, 367, 38, 1, 0, 0, 0, 368, 369, 5, 37, 0, 0, 369, 40, 1, 0, 0, 0, 370, 371, 5, 43, 0, 0, 371, 372, 5, 43, 0, 0, 372, 42, 1, 0, 0, 0, 373, 374, 5, 45, 0, 0, 374, 375, 5, 45, 0, 0, 375, 44, 1, 0, 0, 0, 376, 377, 5, 38, 0, 0, 377, 46, 1, 0, 0, 0, 378, 379, 5, 126, 0, 0, 379, 48, 1, 0, 0, 0, 380, 381, 5, 94, 0, 0, 381, 50, 1, 0, 0, 0, 382, 383, 5, 124, 0, 0, 383, 52, 1, 0, 0, 0, 384, 385, 5, 60, 0, 0, 385, 386, 5, 60, 0, 0, 386, 54, 1, 0, 0, 0, 387, 388, 5, 62, 0, 0, 388, 389, 5, 62, 0, 0, 389, 56, 1, 0, 0, 0, 390, 391, 5, 61, 0, 0, 391, 392, 5, 61, 0, 0, 392, 58, 1, 0, 0, 0, 393, 394, 5, 33, 0, 0, 394, 395, 5, 61, 0, 0, 395, 60, 1, 0, 0, 0, 396, 397, 5, 60, 0, 0, 397, 62, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 400, 5, 61, 0, 0, 400, 64, 1, 0, 0, 0, 401, 402, 5, 62, 0, 0, 402, 403, 5, 61, 0, 0, 403, 66, 1, 0, 0, 0, 404, 405, 5, 62, 0, 0, 405, 68, 1, 0, 0, 0, 406, 407, 5, 38, 0, 0, 407, 408, 5, 38, 0, 0, 408, 70, 1, 0, 0, 0, 409, 410, 5, 124, 0, 0, 410, 411, 5, 124, 0, 0, 411, 72, 1, 0, 0, 0, 412, 413, 5, 61, 0, 0, 413, 74, 1, 0, 0, 0, 414, 415, 5, 43, 0, 0, 415, 437, 5, 61, 0, 0, 416, 417, 5, 45, 0, 0, 417, 437, 5, 61, 0, 0, 418, 419, 5, 42, 0, 0, 419, 437, 5, 61, 0, 0, 420, 421, 5, 47, 0, 0, 421, 437, 5, 61, 0, 0, 422, 423, 5, 37, 0, 0, 423, 437, 5, 61, 0, 0, 424, 425, 5, 60, 0, 0, 425, 426, 5, 60, 0, 0, 426, 437, 5, 61, 0, 0, 427, 428, 5, 62, 0, 0, 428, 429, 5, 62, 0, 0, 429, 437, 5, 61, 0, 0, 430, 431, 5, 38, 0, 0, 431, 437, 5, 61, 0, 0, 432, 433, 5, 124, 0, 0, 433, 437, 5, 61, 0, 0, 434, 435, 5, 94, 0, 0, 435, 437, 5, 61, 0, 0, 436, 414, 1, 0, 0, 0, 436, 416, 1, 0, 0, 0, 436, 418, 1, 0, 0, 0, 436, 420, 1, 0, 0, 0, 436, 422, 1, 0, 0, 0, 436, 424, 1, 0, 0, 0, 436, 427, 1, 0, 0, 0, 436, 430, 1, 0, 0, 0, 436, 432, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 76, 1, 0, 0, 0, 438, 439, 5, 116, 0, 0, 439, 440, 5, 121, 0, 0, 440, 441, 5, 112, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 100, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 102, 0, 0, 445, 78, 1, 0, 0, 0, 446, 447, 5, 99, 0, 0, 447, 448, 5, 111, 0, 0, 448, 449, 5, 110, 0, 0, 449, 450, 5, 115, 0, 0, 450, 451, 5, 116, 0, 0, 451, 80, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 5, 120, 0, 0, 454, 455, 5, 116, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, 114, 0, 0, 457, 458, 5, 110, 0, 0, 458, 82, 1, 0, 0, 0, 459, 460, 5, 95, 0, 0, 460, 461, 5, 95, 0, 0, 461, 462, 5, 101, 0, 0, 462, 463, 5, 120, 0, 0, 463, 464, 5, 112, 0, 0, 464, 465, 5, 111, 0, 0, 465, 466, 5, 114, 0, 0, 466, 467, 5, 116, 0, 0, 467, 84, 1, 0, 0, 0, 468, 469, 5, 95, 0, 0, 469, 470, 5, 95, 0, 0, 470, 471, 5, 97, 0, 0, 471, 472, 5, 108, 0, 0, 472, 473, 5, 105, 0, 0, 473, 474, 5, 103, 0, 0, 474, 475, 5, 110, 0, 0, 475, 86, 1, 0, 0, 0, 476, 477, 5, 105, 0, 0, 477, 478, 5, 110, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, 5, 105, 0, 0, 480, 481, 5, 110, 0, 0, 481, 482, 5, 101, 0, 0, 482, 88, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 485, 5, 111, 0, 0, 485, 486, 5, 108, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 116, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 108, 0, 0, 490, 491, 5, 101, 0, 0, 491, 90, 1, 0, 0, 0, 492, 493, 5, 115, 0, 0, 493, 494, 5, 116, 0, 0, 494, 495, 5, 97, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 105, 0, 0, 497, 498, 5, 99, 0, 0, 498, 92, 1, 0, 0, 0, 499, 500, 5, 95, 0, 0, 500, 501, 5, 95, 0, 0, 501, 502, 5, 105, 0, 0, 502, 503, 5, 110, 0, 0, 503, 504, 5, 116, 0, 0, 504, 505, 5, 101, 0, 0, 505, 506, 5, 114, 0, 0, 506, 507, 5, 114, 0, 0, 507, 508, 5, 117, 0, 0, 508, 509, 5, 112, 0, 0, 509, 510, 5, 116, 0, 0, 510, 94, 1, 0, 0, 0, 511, 512, 5, 114, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 103, 0, 0, 514, 515, 5, 105, 0, 0, 515, 516, 5, 115, 0, 0, 516, 517, 5, 116, 0, 0, 517, 518, 5, 101, 0, 0, 518, 519, 5, 114, 0, 0, 519, 96, 1, 0, 0, 0, 520, 521, 5, 95, 0, 0, 521, 522, 5, 95, 0, 0, 522, 523, 5, 122, 0, 0, 523, 524, 5, 112, 0, 0, 524, 525, 5, 95, 0, 0, 525, 526, 5, 114, 0, 0, 526, 527, 5, 101, 0, 0, 527, 528, 5, 115, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 114, 0, 0, 530, 531, 5, 118, 0, 0, 531, 532, 5, 101, 0, 0, 532, 98, 1, 0, 0, 0, 533, 534, 5, 95, 0, 0, 534, 535, 5, 95, 0, 0, 535, 536, 5, 97, 0, 0, 536, 537, 5, 100, 0, 0, 537, 538, 5, 100, 0, 0, 538, 539, 5, 114, 0, 0, 539, 540, 5, 101, 0, 0, 540, 541, 5, 115, 0, 0, 541, 542, 5, 115, 0, 0, 542, 100, 1, 0, 0, 0, 543, 544, 5, 95, 0, 0, 544, 545, 5, 95, 0, 0, 545, 546, 5, 122, 0, 0, 546, 547, 5, 112, 0, 0, 547, 102, 1, 0, 0, 0, 548, 549, 5, 95, 0, 0, 549, 550, 5, 95, 0, 0, 550, 551, 5, 109, 0, 0, 551, 552, 5, 101, 0, 0, 552, 553, 5, 109, 0, 0, 553, 104, 1, 0, 0, 0, 554, 555, 5, 95, 0, 0, 555, 556, 5, 95, 0, 0, 556, 557, 5, 102, 0, 0, 557, 558, 5, 97, 0, 0, 558, 559, 5, 114, 0, 0, 559, 106, 1, 0, 0, 0, 560, 561, 5, 95, 0, 0, 561, 562, 5, 95, 0, 0, 562, 563, 5, 115, 0, 0, 563, 564, 5, 115, 0, 0, 564, 565, 5, 97, 0, 0, 565, 108, 1, 0, 0, 0, 566, 567, 5, 95, 0, 0, 567, 568, 5, 95, 0, 0, 568, 569, 5, 109, 0, 0, 569, 570, 5, 97, 0, 0, 570, 110, 1, 0, 0, 0, 571, 572, 5, 95, 0, 0, 572, 573, 5, 95, 0, 0, 573, 574, 5, 105, 0, 0, 574, 575, 5, 110, 0, 0, 575, 576, 5, 116, 0, 0, 576, 577, 5, 114, 0, 0, 577, 578, 5, 105, 0, 0, 578, 579, 5, 110, 0, 0, 579, 580, 5, 115, 0, 0, 580, 581, 5, 105, 0, 0, 581, 582, 5, 99, 0, 0, 582, 112, 1, 0, 0, 0, 583, 584, 5, 95, 0, 0, 584, 585, 5, 95, 0, 0, 585, 586, 5, 115, 0, 0, 586, 587, 5, 116, 0, 0, 587, 588, 5, 97, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 107, 0, 0, 590, 591, 5, 99, 0, 0, 591, 592, 5, 97, 0, 0, 592, 593, 5, 108, 0, 0, 593, 628, 5, 108, 0, 0, 594, 595, 5, 95, 0, 0, 595, 596, 5, 95, 0, 0, 596, 597, 5, 112, 0, 0, 597, 598, 5, 104, 0, 0, 598, 599, 5, 105, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 628, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 118, 0, 0, 606, 607, 5, 97, 0, 0, 607, 608, 5, 114, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 628, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 105, 0, 0, 615, 616, 5, 110, 0, 0, 616, 617, 5, 116, 0, 0, 617, 618, 5, 114, 0, 0, 618, 619, 5, 105, 0, 0, 619, 620, 5, 110, 0, 0, 620, 621, 5, 115, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 97, 0, 0, 625, 626, 5, 108, 0, 0, 626, 628, 5, 108, 0, 0, 627, 583, 1, 0, 0, 0, 627, 594, 1, 0, 0, 0, 627, 603, 1, 0, 0, 0, 627, 612, 1, 0, 0, 0, 628, 114, 1, 0, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 102, 0, 0, 631, 116, 1, 0, 0, 0, 632, 633, 5, 101, 0, 0, 633, 634, 5, 108, 0, 0, 634, 635, 5, 115, 0, 0, 635, 636, 5, 101, 0, 0, 636, 118, 1, 0, 0, 0, 637, 638, 5, 119, 0, 0, 638, 639, 5, 104, 0, 0, 639, 640, 5, 105, 0, 0, 640, 641, 5, 108, 0, 0, 641, 642, 5, 101, 0, 0, 642, 120, 1, 0, 0, 0, 643, 644, 5, 100, 0, 0, 644, 645, 5, 111, 0, 0, 645, 122, 1, 0, 0, 0, 646, 647, 5, 102, 0, 0, 647, 648, 5, 111, 0, 0, 648, 649, 5, 114, 0, 0, 649, 124, 1, 0, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 119, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 116, 0, 0, 654, 655, 5, 99, 0, 0, 655, 656, 5, 104, 0, 0, 656, 126, 1, 0, 0, 0, 657, 658, 5, 114, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 116, 0, 0, 660, 661, 5, 117, 0, 0, 661, 662, 5, 114, 0, 0, 662, 663, 5, 110, 0, 0, 663, 128, 1, 0, 0, 0, 664, 665, 5, 98, 0, 0, 665, 666, 5, 114, 0, 0, 666, 667, 5, 101, 0, 0, 667, 668, 5, 97, 0, 0, 668, 669, 5, 107, 0, 0, 669, 130, 1, 0, 0, 0, 670, 671, 5, 99, 0, 0, 671, 672, 5, 111, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 116, 0, 0, 674, 675, 5, 105, 0, 0, 675, 676, 5, 110, 0, 0, 676, 677, 5, 117, 0, 0, 677, 678, 5, 101, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 103, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 116, 0, 0, 682, 683, 5, 111, 0, 0, 683, 134, 1, 0, 0, 0, 684, 685, 5, 97, 0, 0, 685, 686, 5, 115, 0, 0, 686, 687, 5, 109, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 66, 1, 0, 689, 136, 1, 0, 0, 0, 690, 691, 5, 100, 0, 0, 691, 692, 5, 101, 0, 0, 692, 693, 5, 102, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 108, 0, 0, 696, 697, 5, 116, 0, 0, 697, 138, 1, 0, 0, 0, 698, 699, 5, 99, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 101, 0, 0, 702, 140, 1, 0, 0, 0, 703, 704, 5, 115, 0, 0, 704, 705, 5, 116, 0, 0, 705, 706, 5, 114, 0, 0, 706, 707, 5, 117, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 116, 0, 0, 709, 142, 1, 0, 0, 0, 710, 711, 5, 117, 0, 0, 711, 712, 5, 110, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 110, 0, 0, 715, 144, 1, 0, 0, 0, 716, 717, 5, 101, 0, 0, 717, 718, 5, 110, 0, 0, 718, 719, 5, 117, 0, 0, 719, 720, 5, 109, 0, 0, 720, 146, 1, 0, 0, 0, 721, 722, 5, 115, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 122, 0, 0, 724, 725, 5, 101, 0, 0, 725, 726, 5, 111, 0, 0, 726, 727, 5, 102, 0, 0, 727, 148, 1, 0, 0, 0, 728, 729, 5, 116, 0, 0, 729, 730, 5, 121, 0, 0, 730, 731, 5, 112, 0, 0, 731, 732, 5, 101, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 100, 0, 0, 734, 150, 1, 0, 0, 0, 735, 736, 5, 100, 0, 0, 736, 737, 5, 101, 0, 0, 737, 738, 5, 102, 0, 0, 738, 739, 5, 105, 0, 0, 739, 740, 5, 110, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 100, 0, 0, 742, 152, 1, 0, 0, 0, 743, 744, 5, 107, 0, 0, 744, 745, 5, 105, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 107, 0, 0, 747, 748, 5, 97, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 109, 0, 0, 750, 154, 1, 0, 0, 0, 751, 752, 5, 33, 0, 0, 752, 156, 1, 0, 0, 0, 753, 754, 5, 115, 0, 0, 754, 755, 5, 105, 0, 0, 755, 756, 5, 103, 0, 0, 756, 757, 5, 110, 0, 0, 757, 758, 5, 101, 0, 0, 758, 805, 5, 100, 0, 0, 759, 760, 5, 117, 0, 0, 760, 761, 5, 110, 0, 0, 761, 762, 5, 115, 0, 0, 762, 763, 5, 105, 0, 0, 763, 764, 5, 103, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 5, 101, 0, 0, 766, 805, 5, 100, 0, 0, 767, 768, 5, 98, 0, 0, 768, 769, 5, 121, 0, 0, 769, 770, 5, 116, 0, 0, 770, 805, 5, 101, 0, 0, 771, 772, 5, 119, 0, 0, 772, 773, 5, 111, 0, 0, 773, 774, 5, 114, 0, 0, 774, 805, 5, 100, 0, 0, 775, 776, 5, 100, 0, 0, 776, 777, 5, 119, 0, 0, 777, 778, 5, 111, 0, 0, 778, 779, 5, 114, 0, 0, 779, 805, 5, 100, 0, 0, 780, 781, 5, 98, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 111, 0, 0, 783, 805, 5, 108, 0, 0, 784, 785, 5, 99, 0, 0, 785, 786, 5, 104, 0, 0, 786, 787, 5, 97, 0, 0, 787, 805, 5, 114, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 104, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 114, 0, 0, 792, 805, 5, 116, 0, 0, 793, 794, 5, 105, 0, 0, 794, 795, 5, 110, 0, 0, 795, 805, 5, 116, 0, 0, 796, 797, 5, 108, 0, 0, 797, 798, 5, 111, 0, 0, 798, 799, 5, 110, 0, 0, 799, 805, 5, 103, 0, 0, 800, 801, 5, 118, 0, 0, 801, 802, 5, 111, 0, 0, 802, 803, 5, 105, 0, 0, 803, 805, 5, 100, 0, 0, 804, 753, 1, 0, 0, 0, 804, 759, 1, 0, 0, 0, 804, 767, 1, 0, 0, 0, 804, 771, 1, 0, 0, 0, 804, 775, 1, 0, 0, 0, 804, 780, 1, 0, 0, 0, 804, 784, 1, 0, 0, 0, 804, 788, 1, 0, 0, 0, 804, 793, 1, 0, 0, 0, 804, 796, 1, 0, 0, 0, 804, 800, 1, 0, 0, 0, 805, 158, 1, 0, 0, 0, 806, 807, 5, 116, 0, 0, 807, 808, 5, 114, 0, 0, 808, 809, 5, 117, 0, 0, 809, 816, 5, 101, 0, 0, 810, 811, 5, 102, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 108, 0, 0, 813, 814, 5, 115, 0, 0, 814, 816, 5, 101, 0, 0, 815, 806, 1, 0, 0, 0, 815, 810, 1, 0, 0, 0, 816, 160, 1, 0, 0, 0, 817, 818, 5, 123, 0, 0, 818, 819, 5, 123, 0, 0, 819, 823, 1, 0, 0, 0, 820, 822, 9, 0, 0, 0, 821, 820, 1, 0, 0, 0, 822, 825, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 823, 821, 1, 0, 0, 0, 824, 826, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 826, 827, 5, 125, 0, 0, 827, 828, 5, 125, 0, 0, 828, 162, 1, 0, 0, 0, 829, 830, 5, 35, 0, 0, 830, 831, 5, 105, 0, 0, 831, 832, 5, 109, 0, 0, 832, 833, 5, 112, 0, 0, 833, 834, 5, 111, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 116, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 6, 80, 2, 0, 838, 164, 1, 0, 0, 0, 839, 840, 5, 35, 0, 0, 840, 841, 5, 105, 0, 0, 841, 842, 5, 110, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 108, 0, 0, 844, 845, 5, 117, 0, 0, 845, 846, 5, 100, 0, 0, 846, 847, 5, 101, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 6, 81, 3, 0, 849, 166, 1, 0, 0, 0, 850, 851, 5, 35, 0, 0, 851, 852, 5, 112, 0, 0, 852, 853, 5, 114, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 103, 0, 0, 855, 856, 5, 109, 0, 0, 856, 857, 5, 97, 0, 0, 857, 168, 1, 0, 0, 0, 858, 859, 5, 35, 0, 0, 859, 860, 5, 100, 0, 0, 860, 861, 5, 101, 0, 0, 861, 862, 5, 102, 0, 0, 862, 863, 5, 105, 0, 0, 863, 864, 5, 110, 0, 0, 864, 865, 5, 101, 0, 0, 865, 170, 1, 0, 0, 0, 866, 867, 5, 92, 0, 0, 867, 872, 5, 10, 0, 0, 868, 869, 5, 92, 0, 0, 869, 870, 5, 13, 0, 0, 870, 872, 5, 10, 0, 0, 871, 866, 1, 0, 0, 0, 871, 868, 1, 0, 0, 0, 872, 172, 1, 0, 0, 0, 873, 874, 5, 35, 0, 0, 874, 875, 5, 117, 0, 0, 875, 876, 5, 110, 0, 0, 876, 877, 5, 100, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 102, 0, 0, 879, 174, 1, 0, 0, 0, 880, 881, 5, 35, 0, 0, 881, 882, 5, 105, 0, 0, 882, 883, 5, 102, 0, 0, 883, 884, 5, 100, 0, 0, 884, 885, 5, 101, 0, 0, 885, 886, 5, 102, 0, 0, 886, 176, 1, 0, 0, 0, 887, 888, 5, 35, 0, 0, 888, 889, 5, 105, 0, 0, 889, 890, 5, 102, 0, 0, 890, 891, 5, 110, 0, 0, 891, 892, 5, 100, 0, 0, 892, 893, 5, 101, 0, 0, 893, 894, 5, 102, 0, 0, 894, 178, 1, 0, 0, 0, 895, 896, 5, 35, 0, 0, 896, 897, 5, 105, 0, 0, 897, 898, 5, 102, 0, 0, 898, 180, 1, 0, 0, 0, 899, 900, 5, 35, 0, 0, 900, 901, 5, 101, 0, 0, 901, 902, 5, 108, 0, 0, 902, 903, 5, 105, 0, 0, 903, 904, 5, 102, 0, 0, 904, 182, 1, 0, 0, 0, 905, 906, 5, 35, 0, 0, 906, 907, 5, 101, 0, 0, 907, 908, 5, 108, 0, 0, 908, 909, 5, 115, 0, 0, 909, 910, 5, 101, 0, 0, 910, 184, 1, 0, 0, 0, 911, 912, 5, 35, 0, 0, 912, 913, 5, 101, 0, 0, 913, 914, 5, 110, 0, 0, 914, 915, 5, 100, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 102, 0, 0, 917, 186, 1, 0, 0, 0, 918, 919, 5, 35, 0, 0, 919, 920, 5, 101, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 114, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 114, 0, 0, 924, 188, 1, 0, 0, 0, 925, 926, 5, 35, 0, 0, 926, 927, 3, 217, 107, 0, 927, 190, 1, 0, 0, 0, 928, 929, 5, 35, 0, 0, 929, 930, 3, 217, 107, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 96, 0, 932, 934, 3, 203, 100, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 939, 3, 197, 97, 0, 936, 939, 3, 199, 98, 0, 937, 939, 3, 201, 99, 0, 938, 935, 1, 0, 0, 0, 938, 936, 1, 0, 0, 0, 938, 937, 1, 0, 0, 0, 939, 196, 1, 0, 0, 0, 940, 946, 5, 37, 0, 0, 941, 942, 5, 48, 0, 0, 942, 946, 5, 98, 0, 0, 943, 944, 5, 48, 0, 0, 944, 946, 5, 66, 0, 0, 945, 940, 1, 0, 0, 0, 945, 941, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 946, 950, 1, 0, 0, 0, 947, 949, 3, 211, 104, 0, 948, 947, 1, 0, 0, 0, 949, 952, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 953, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 953, 955, 5, 46, 0, 0, 954, 956, 3, 211, 104, 0, 955, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 955, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 198, 1, 0, 0, 0, 959, 961, 3, 213, 105, 0, 960, 959, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 965, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 967, 5, 46, 0, 0, 966, 968, 3, 213, 105, 0, 967, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 200, 1, 0, 0, 0, 971, 977, 5, 36, 0, 0, 972, 973, 5, 48, 0, 0, 973, 977, 5, 120, 0, 0, 974, 975, 5, 48, 0, 0, 975, 977, 5, 88, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 977, 981, 1, 0, 0, 0, 978, 980, 3, 215, 106, 0, 979, 978, 1, 0, 0, 0, 980, 983, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 1, 0, 0, 0, 983, 981, 1, 0, 0, 0, 984, 986, 5, 46, 0, 0, 985, 987, 3, 215, 106, 0, 986, 985, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 986, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 202, 1, 0, 0, 0, 990, 994, 3, 207, 102, 0, 991, 994, 3, 209, 103, 0, 992, 994, 3, 205, 101, 0, 993, 990, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 998, 1, 0, 0, 0, 995, 996, 7, 0, 0, 0, 996, 999, 7, 1, 0, 0, 997, 999, 7, 2, 0, 0, 998, 995, 1, 0, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 204, 1, 0, 0, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1003, 7, 3, 0, 0, 1002, 1004, 3, 211, 104, 0, 1003, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1014, 1, 0, 0, 0, 1007, 1009, 5, 37, 0, 0, 1008, 1010, 3, 211, 104, 0, 1009, 1008, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1014, 1, 0, 0, 0, 1013, 1000, 1, 0, 0, 0, 1013, 1007, 1, 0, 0, 0, 1014, 206, 1, 0, 0, 0, 1015, 1017, 3, 213, 105, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 208, 1, 0, 0, 0, 1020, 1026, 5, 36, 0, 0, 1021, 1022, 5, 48, 0, 0, 1022, 1026, 5, 120, 0, 0, 1023, 1024, 5, 48, 0, 0, 1024, 1026, 5, 88, 0, 0, 1025, 1020, 1, 0, 0, 0, 1025, 1021, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1029, 3, 215, 106, 0, 1028, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 210, 1, 0, 0, 0, 1032, 1033, 7, 4, 0, 0, 1033, 212, 1, 0, 0, 0, 1034, 1035, 7, 5, 0, 0, 1035, 214, 1, 0, 0, 0, 1036, 1037, 7, 6, 0, 0, 1037, 216, 1, 0, 0, 0, 1038, 1042, 3, 219, 108, 0, 1039, 1041, 3, 221, 109, 0, 1040, 1039, 1, 0, 0, 0, 1041, 1044, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1045, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1045, 1046, 6, 107, 4, 0, 1046, 218, 1, 0, 0, 0, 1047, 1048, 7, 7, 0, 0, 1048, 220, 1, 0, 0, 0, 1049, 1050, 7, 8, 0, 0, 1050, 222, 1, 0, 0, 0, 1051, 1057, 5, 34, 0, 0, 1052, 1053, 5, 92, 0, 0, 1053, 1056, 5, 34, 0, 0, 1054, 1056, 8, 9, 0, 0, 1055, 1052, 1, 0, 0, 0, 1055, 1054, 1, 0, 0, 0, 1056, 1059, 1, 0, 0, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1062, 5, 34, 0, 0, 1061, 1063, 7, 10, 0, 0, 1062, 1061, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1068, 1, 0, 0, 0, 1064, 1066, 7, 11, 0, 0, 1065, 1067, 7, 12, 0, 0, 1066, 1065, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1064, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1071, 1, 0, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 224, 1, 0, 0, 0, 1073, 1088, 5, 39, 0, 0, 1074, 1085, 5, 92, 0, 0, 1075, 1077, 7, 13, 0, 0, 1076, 1078, 7, 5, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 5, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1086, 1, 0, 0, 0, 1082, 1083, 5, 120, 0, 0, 1083, 1084, 7, 14, 0, 0, 1084, 1086, 7, 14, 0, 0, 1085, 1075, 1, 0, 0, 0, 1085, 1082, 1, 0, 0, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1089, 8, 15, 0, 0, 1088, 1074, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1091, 5, 39, 0, 0, 1091, 226, 1, 0, 0, 0, 1092, 1094, 7, 16, 0, 0, 1093, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1098, 6, 112, 5, 0, 1098, 228, 1, 0, 0, 0, 1099, 1100, 5, 47, 0, 0, 1100, 1101, 5, 47, 0, 0, 1101, 1105, 1, 0, 0, 0, 1102, 1104, 8, 17, 0, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1109, 6, 113, 6, 0, 1109, 230, 1, 0, 0, 0, 1110, 1111, 5, 47, 0, 0, 1111, 1112, 5, 42, 0, 0, 1112, 1116, 1, 0, 0, 0, 1113, 1115, 9, 0, 0, 0, 1114, 1113, 1, 0, 0, 0, 1115, 1118, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1119, 1, 0, 0, 0, 1118, 1116, 1, 0, 0, 0, 1119, 1120, 5, 42, 0, 0, 1120, 1121, 5, 47, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1123, 6, 114, 6, 0, 1123, 232, 1, 0, 0, 0, 1124, 1125, 5, 46, 0, 0, 1125, 1126, 5, 98, 0, 0, 1126, 1127, 5, 121, 0, 0, 1127, 1128, 5, 116, 0, 0, 1128, 1129, 5, 101, 0, 0, 1129, 234, 1, 0, 0, 0, 1130, 1131, 5, 98, 0, 0, 1131, 1132, 5, 114, 0, 0, 1132, 1738, 5, 107, 0, 0, 1133, 1134, 5, 111, 0, 0, 1134, 1135, 5, 114, 0, 0, 1135, 1738, 5, 97, 0, 0, 1136, 1137, 5, 107, 0, 0, 1137, 1138, 5, 105, 0, 0, 1138, 1738, 5, 108, 0, 0, 1139, 1140, 5, 115, 0, 0, 1140, 1141, 5, 108, 0, 0, 1141, 1738, 5, 111, 0, 0, 1142, 1143, 5, 110, 0, 0, 1143, 1144, 5, 111, 0, 0, 1144, 1738, 5, 112, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1738, 5, 108, 0, 0, 1148, 1149, 5, 112, 0, 0, 1149, 1150, 5, 104, 0, 0, 1150, 1738, 5, 112, 0, 0, 1151, 1152, 5, 97, 0, 0, 1152, 1153, 5, 110, 0, 0, 1153, 1738, 5, 99, 0, 0, 1154, 1155, 5, 98, 0, 0, 1155, 1156, 5, 112, 0, 0, 1156, 1738, 5, 108, 0, 0, 1157, 1158, 5, 99, 0, 0, 1158, 1159, 5, 108, 0, 0, 1159, 1738, 5, 99, 0, 0, 1160, 1161, 5, 106, 0, 0, 1161, 1162, 5, 115, 0, 0, 1162, 1738, 5, 114, 0, 0, 1163, 1164, 5, 97, 0, 0, 1164, 1165, 5, 110, 0, 0, 1165, 1738, 5, 100, 0, 0, 1166, 1167, 5, 114, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1738, 5, 97, 0, 0, 1169, 1170, 5, 98, 0, 0, 1170, 1171, 5, 105, 0, 0, 1171, 1738, 5, 116, 0, 0, 1172, 1173, 5, 114, 0, 0, 1173, 1174, 5, 111, 0, 0, 1174, 1738, 5, 108, 0, 0, 1175, 1176, 5, 112, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1738, 5, 97, 0, 0, 1178, 1179, 5, 112, 0, 0, 1179, 1180, 5, 108, 0, 0, 1180, 1738, 5, 112, 0, 0, 1181, 1182, 5, 98, 0, 0, 1182, 1183, 5, 109, 0, 0, 1183, 1738, 5, 105, 0, 0, 1184, 1185, 5, 115, 0, 0, 1185, 1186, 5, 101, 0, 0, 1186, 1738, 5, 99, 0, 0, 1187, 1188, 5, 114, 0, 0, 1188, 1189, 5, 116, 0, 0, 1189, 1738, 5, 105, 0, 0, 1190, 1191, 5, 101, 0, 0, 1191, 1192, 5, 111, 0, 0, 1192, 1738, 5, 114, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 114, 0, 0, 1195, 1738, 5, 101, 0, 0, 1196, 1197, 5, 108, 0, 0, 1197, 1198, 5, 115, 0, 0, 1198, 1738, 5, 114, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 104, 0, 0, 1201, 1738, 5, 97, 0, 0, 1202, 1203, 5, 97, 0, 0, 1203, 1204, 5, 108, 0, 0, 1204, 1738, 5, 114, 0, 0, 1205, 1206, 5, 106, 0, 0, 1206, 1207, 5, 109, 0, 0, 1207, 1738, 5, 112, 0, 0, 1208, 1209, 5, 98, 0, 0, 1209, 1210, 5, 118, 0, 0, 1210, 1738, 5, 99, 0, 0, 1211, 1212, 5, 99, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1738, 5, 105, 0, 0, 1214, 1215, 5, 114, 0, 0, 1215, 1216, 5, 116, 0, 0, 1216, 1738, 5, 115, 0, 0, 1217, 1218, 5, 97, 0, 0, 1218, 1219, 5, 100, 0, 0, 1219, 1738, 5, 99, 0, 0, 1220, 1221, 5, 114, 0, 0, 1221, 1222, 5, 114, 0, 0, 1222, 1738, 5, 97, 0, 0, 1223, 1224, 5, 98, 0, 0, 1224, 1225, 5, 118, 0, 0, 1225, 1738, 5, 115, 0, 0, 1226, 1227, 5, 115, 0, 0, 1227, 1228, 5, 101, 0, 0, 1228, 1738, 5, 105, 0, 0, 1229, 1230, 5, 115, 0, 0, 1230, 1231, 5, 97, 0, 0, 1231, 1738, 5, 120, 0, 0, 1232, 1233, 5, 115, 0, 0, 1233, 1234, 5, 116, 0, 0, 1234, 1738, 5, 121, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 116, 0, 0, 1237, 1738, 5, 97, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1738, 5, 120, 0, 0, 1241, 1242, 5, 100, 0, 0, 1242, 1243, 5, 101, 0, 0, 1243, 1738, 5, 121, 0, 0, 1244, 1245, 5, 116, 0, 0, 1245, 1246, 5, 120, 0, 0, 1246, 1738, 5, 97, 0, 0, 1247, 1248, 5, 120, 0, 0, 1248, 1249, 5, 97, 0, 0, 1249, 1738, 5, 97, 0, 0, 1250, 1251, 5, 98, 0, 0, 1251, 1252, 5, 99, 0, 0, 1252, 1738, 5, 99, 0, 0, 1253, 1254, 5, 97, 0, 0, 1254, 1255, 5, 104, 0, 0, 1255, 1738, 5, 120, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 121, 0, 0, 1258, 1738, 5, 97, 0, 0, 1259, 1260, 5, 116, 0, 0, 1260, 1261, 5, 120, 0, 0, 1261, 1738, 5, 115, 0, 0, 1262, 1263, 5, 116, 0, 0, 1263, 1264, 5, 97, 0, 0, 1264, 1738, 5, 115, 0, 0, 1265, 1266, 5, 115, 0, 0, 1266, 1267, 5, 104, 0, 0, 1267, 1738, 5, 121, 0, 0, 1268, 1269, 5, 115, 0, 0, 1269, 1270, 5, 104, 0, 0, 1270, 1738, 5, 120, 0, 0, 1271, 1272, 5, 108, 0, 0, 1272, 1273, 5, 100, 0, 0, 1273, 1738, 5, 121, 0, 0, 1274, 1275, 5, 108, 0, 0, 1275, 1276, 5, 100, 0, 0, 1276, 1738, 5, 97, 0, 0, 1277, 1278, 5, 108, 0, 0, 1278, 1279, 5, 100, 0, 0, 1279, 1738, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 97, 0, 0, 1282, 1738, 5, 120, 0, 0, 1283, 1284, 5, 116, 0, 0, 1284, 1285, 5, 97, 0, 0, 1285, 1738, 5, 121, 0, 0, 1286, 1287, 5, 116, 0, 0, 1287, 1288, 5, 97, 0, 0, 1288, 1738, 5, 120, 0, 0, 1289, 1290, 5, 98, 0, 0, 1290, 1291, 5, 99, 0, 0, 1291, 1738, 5, 115, 0, 0, 1292, 1293, 5, 99, 0, 0, 1293, 1294, 5, 108, 0, 0, 1294, 1738, 5, 118, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 115, 0, 0, 1297, 1738, 5, 120, 0, 0, 1298, 1299, 5, 108, 0, 0, 1299, 1300, 5, 97, 0, 0, 1300, 1738, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 112, 0, 0, 1303, 1738, 5, 121, 0, 0, 1304, 1305, 5, 99, 0, 0, 1305, 1306, 5, 109, 0, 0, 1306, 1738, 5, 112, 0, 0, 1307, 1308, 5, 99, 0, 0, 1308, 1309, 5, 112, 0, 0, 1309, 1738, 5, 120, 0, 0, 1310, 1311, 5, 100, 0, 0, 1311, 1312, 5, 99, 0, 0, 1312, 1738, 5, 112, 0, 0, 1313, 1314, 5, 100, 0, 0, 1314, 1315, 5, 101, 0, 0, 1315, 1738, 5, 99, 0, 0, 1316, 1317, 5, 105, 0, 0, 1317, 1318, 5, 110, 0, 0, 1318, 1738, 5, 99, 0, 0, 1319, 1320, 5, 97, 0, 0, 1320, 1321, 5, 120, 0, 0, 1321, 1738, 5, 115, 0, 0, 1322, 1323, 5, 98, 0, 0, 1323, 1324, 5, 110, 0, 0, 1324, 1738, 5, 101, 0, 0, 1325, 1326, 5, 99, 0, 0, 1326, 1327, 5, 108, 0, 0, 1327, 1738, 5, 100, 0, 0, 1328, 1329, 5, 115, 0, 0, 1329, 1330, 5, 98, 0, 0, 1330, 1738, 5, 99, 0, 0, 1331, 1332, 5, 105, 0, 0, 1332, 1333, 5, 115, 0, 0, 1333, 1738, 5, 99, 0, 0, 1334, 1335, 5, 105, 0, 0, 1335, 1336, 5, 110, 0, 0, 1336, 1738, 5, 120, 0, 0, 1337, 1338, 5, 98, 0, 0, 1338, 1339, 5, 101, 0, 0, 1339, 1738, 5, 113, 0, 0, 1340, 1341, 5, 115, 0, 0, 1341, 1342, 5, 101, 0, 0, 1342, 1738, 5, 100, 0, 0, 1343, 1344, 5, 100, 0, 0, 1344, 1345, 5, 101, 0, 0, 1345, 1738, 5, 120, 0, 0, 1346, 1347, 5, 105, 0, 0, 1347, 1348, 5, 110, 0, 0, 1348, 1738, 5, 121, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 111, 0, 0, 1351, 1738, 5, 114, 0, 0, 1352, 1353, 5, 98, 0, 0, 1353, 1354, 5, 98, 0, 0, 1354, 1355, 5, 114, 0, 0, 1355, 1738, 5, 48, 0, 0, 1356, 1357, 5, 98, 0, 0, 1357, 1358, 5, 98, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1738, 5, 49, 0, 0, 1360, 1361, 5, 98, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 114, 0, 0, 1363, 1738, 5, 50, 0, 0, 1364, 1365, 5, 98, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 114, 0, 0, 1367, 1738, 5, 51, 0, 0, 1368, 1369, 5, 98, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 114, 0, 0, 1371, 1738, 5, 52, 0, 0, 1372, 1373, 5, 98, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 114, 0, 0, 1375, 1738, 5, 53, 0, 0, 1376, 1377, 5, 98, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 114, 0, 0, 1379, 1738, 5, 54, 0, 0, 1380, 1381, 5, 98, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 114, 0, 0, 1383, 1738, 5, 55, 0, 0, 1384, 1385, 5, 98, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 115, 0, 0, 1387, 1738, 5, 48, 0, 0, 1388, 1389, 5, 98, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 115, 0, 0, 1391, 1738, 5, 49, 0, 0, 1392, 1393, 5, 98, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 115, 0, 0, 1395, 1738, 5, 50, 0, 0, 1396, 1397, 5, 98, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 115, 0, 0, 1399, 1738, 5, 51, 0, 0, 1400, 1401, 5, 98, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 115, 0, 0, 1403, 1738, 5, 52, 0, 0, 1404, 1405, 5, 98, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 115, 0, 0, 1407, 1738, 5, 53, 0, 0, 1408, 1409, 5, 98, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 115, 0, 0, 1411, 1738, 5, 54, 0, 0, 1412, 1413, 5, 98, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 115, 0, 0, 1415, 1738, 5, 55, 0, 0, 1416, 1417, 5, 98, 0, 0, 1417, 1418, 5, 114, 0, 0, 1418, 1738, 5, 97, 0, 0, 1419, 1420, 5, 112, 0, 0, 1420, 1421, 5, 104, 0, 0, 1421, 1738, 5, 120, 0, 0, 1422, 1423, 5, 112, 0, 0, 1423, 1424, 5, 104, 0, 0, 1424, 1738, 5, 121, 0, 0, 1425, 1426, 5, 112, 0, 0, 1426, 1427, 5, 108, 0, 0, 1427, 1738, 5, 120, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 108, 0, 0, 1430, 1738, 5, 121, 0, 0, 1431, 1432, 5, 114, 0, 0, 1432, 1433, 5, 109, 0, 0, 1433, 1434, 5, 98, 0, 0, 1434, 1738, 5, 48, 0, 0, 1435, 1436, 5, 114, 0, 0, 1436, 1437, 5, 109, 0, 0, 1437, 1438, 5, 98, 0, 0, 1438, 1738, 5, 49, 0, 0, 1439, 1440, 5, 114, 0, 0, 1440, 1441, 5, 109, 0, 0, 1441, 1442, 5, 98, 0, 0, 1442, 1738, 5, 50, 0, 0, 1443, 1444, 5, 114, 0, 0, 1444, 1445, 5, 109, 0, 0, 1445, 1446, 5, 98, 0, 0, 1446, 1738, 5, 51, 0, 0, 1447, 1448, 5, 114, 0, 0, 1448, 1449, 5, 109, 0, 0, 1449, 1450, 5, 98, 0, 0, 1450, 1738, 5, 52, 0, 0, 1451, 1452, 5, 114, 0, 0, 1452, 1453, 5, 109, 0, 0, 1453, 1454, 5, 98, 0, 0, 1454, 1738, 5, 53, 0, 0, 1455, 1456, 5, 114, 0, 0, 1456, 1457, 5, 109, 0, 0, 1457, 1458, 5, 98, 0, 0, 1458, 1738, 5, 54, 0, 0, 1459, 1460, 5, 114, 0, 0, 1460, 1461, 5, 109, 0, 0, 1461, 1462, 5, 98, 0, 0, 1462, 1738, 5, 55, 0, 0, 1463, 1464, 5, 115, 0, 0, 1464, 1465, 5, 109, 0, 0, 1465, 1466, 5, 98, 0, 0, 1466, 1738, 5, 48, 0, 0, 1467, 1468, 5, 115, 0, 0, 1468, 1469, 5, 109, 0, 0, 1469, 1470, 5, 98, 0, 0, 1470, 1738, 5, 49, 0, 0, 1471, 1472, 5, 115, 0, 0, 1472, 1473, 5, 109, 0, 0, 1473, 1474, 5, 98, 0, 0, 1474, 1738, 5, 50, 0, 0, 1475, 1476, 5, 115, 0, 0, 1476, 1477, 5, 109, 0, 0, 1477, 1478, 5, 98, 0, 0, 1478, 1738, 5, 51, 0, 0, 1479, 1480, 5, 115, 0, 0, 1480, 1481, 5, 109, 0, 0, 1481, 1482, 5, 98, 0, 0, 1482, 1738, 5, 52, 0, 0, 1483, 1484, 5, 115, 0, 0, 1484, 1485, 5, 109, 0, 0, 1485, 1486, 5, 98, 0, 0, 1486, 1738, 5, 53, 0, 0, 1487, 1488, 5, 115, 0, 0, 1488, 1489, 5, 109, 0, 0, 1489, 1490, 5, 98, 0, 0, 1490, 1738, 5, 54, 0, 0, 1491, 1492, 5, 115, 0, 0, 1492, 1493, 5, 109, 0, 0, 1493, 1494, 5, 98, 0, 0, 1494, 1738, 5, 55, 0, 0, 1495, 1496, 5, 115, 0, 0, 1496, 1497, 5, 116, 0, 0, 1497, 1738, 5, 112, 0, 0, 1498, 1499, 5, 115, 0, 0, 1499, 1500, 5, 116, 0, 0, 1500, 1738, 5, 122, 0, 0, 1501, 1502, 5, 116, 0, 0, 1502, 1503, 5, 114, 0, 0, 1503, 1738, 5, 98, 0, 0, 1504, 1505, 5, 116, 0, 0, 1505, 1506, 5, 115, 0, 0, 1506, 1738, 5, 98, 0, 0, 1507, 1508, 5, 119, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1738, 5, 105, 0, 0, 1510, 1511, 5, 99, 0, 0, 1511, 1512, 5, 108, 0, 0, 1512, 1738, 5, 101, 0, 0, 1513, 1514, 5, 115, 0, 0, 1514, 1515, 5, 101, 0, 0, 1515, 1738, 5, 101, 0, 0, 1516, 1517, 5, 116, 0, 0, 1517, 1518, 5, 115, 0, 0, 1518, 1738, 5, 121, 0, 0, 1519, 1520, 5, 108, 0, 0, 1520, 1521, 5, 98, 0, 0, 1521, 1522, 5, 112, 0, 0, 1522, 1738, 5, 108, 0, 0, 1523, 1524, 5, 105, 0, 0, 1524, 1525, 5, 110, 0, 0, 1525, 1738, 5, 122, 0, 0, 1526, 1527, 5, 116, 0, 0, 1527, 1528, 5, 121, 0, 0, 1528, 1738, 5, 115, 0, 0, 1529, 1530, 5, 108, 0, 0, 1530, 1531, 5, 98, 0, 0, 1531, 1532, 5, 109, 0, 0, 1532, 1738, 5, 105, 0, 0, 1533, 1534, 5, 100, 0, 0, 1534, 1535, 5, 101, 0, 0, 1535, 1738, 5, 122, 0, 0, 1536, 1537, 5, 110, 0, 0, 1537, 1538, 5, 101, 0, 0, 1538, 1738, 5, 103, 0, 0, 1539, 1540, 5, 97, 0, 0, 1540, 1541, 5, 115, 0, 0, 1541, 1738, 5, 114, 0, 0, 1542, 1543, 5, 116, 0, 0, 1543, 1544, 5, 97, 0, 0, 1544, 1738, 5, 122, 0, 0, 1545, 1546, 5, 108, 0, 0, 1546, 1547, 5, 98, 0, 0, 1547, 1548, 5, 118, 0, 0, 1548, 1738, 5, 99, 0, 0, 1549, 1550, 5, 116, 0, 0, 1550, 1551, 5, 97, 0, 0, 1551, 1738, 5, 98, 0, 0, 1552, 1553, 5, 109, 0, 0, 1553, 1554, 5, 97, 0, 0, 1554, 1738, 5, 112, 0, 0, 1555, 1556, 5, 114, 0, 0, 1556, 1557, 5, 116, 0, 0, 1557, 1738, 5, 110, 0, 0, 1558, 1559, 5, 108, 0, 0, 1559, 1560, 5, 98, 0, 0, 1560, 1561, 5, 115, 0, 0, 1561, 1738, 5, 114, 0, 0, 1562, 1563, 5, 116, 0, 0, 1563, 1564, 5, 122, 0, 0, 1564, 1738, 5, 97, 0, 0, 1565, 1566, 5, 108, 0, 0, 1566, 1567, 5, 98, 0, 0, 1567, 1568, 5, 118, 0, 0, 1568, 1738, 5, 115, 0, 0, 1569, 1570, 5, 116, 0, 0, 1570, 1571, 5, 98, 0, 0, 1571, 1738, 5, 97, 0, 0, 1572, 1573, 5, 108, 0, 0, 1573, 1574, 5, 98, 0, 0, 1574, 1575, 5, 114, 0, 0, 1575, 1738, 5, 97, 0, 0, 1576, 1577, 5, 108, 0, 0, 1577, 1578, 5, 98, 0, 0, 1578, 1579, 5, 99, 0, 0, 1579, 1738, 5, 99, 0, 0, 1580, 1581, 5, 108, 0, 0, 1581, 1582, 5, 100, 0, 0, 1582, 1738, 5, 122, 0, 0, 1583, 1584, 5, 108, 0, 0, 1584, 1585, 5, 98, 0, 0, 1585, 1586, 5, 99, 0, 0, 1586, 1738, 5, 115, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1589, 5, 112, 0, 0, 1589, 1738, 5, 122, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1592, 5, 101, 0, 0, 1592, 1738, 5, 119, 0, 0, 1593, 1594, 5, 97, 0, 0, 1594, 1595, 5, 115, 0, 0, 1595, 1738, 5, 119, 0, 0, 1596, 1597, 5, 108, 0, 0, 1597, 1598, 5, 98, 0, 0, 1598, 1599, 5, 110, 0, 0, 1599, 1738, 5, 101, 0, 0, 1600, 1601, 5, 112, 0, 0, 1601, 1602, 5, 104, 0, 0, 1602, 1738, 5, 122, 0, 0, 1603, 1604, 5, 105, 0, 0, 1604, 1605, 5, 110, 0, 0, 1605, 1738, 5, 119, 0, 0, 1606, 1607, 5, 114, 0, 0, 1607, 1608, 5, 111, 0, 0, 1608, 1738, 5, 119, 0, 0, 1609, 1610, 5, 108, 0, 0, 1610, 1611, 5, 98, 0, 0, 1611, 1612, 5, 101, 0, 0, 1612, 1738, 5, 113, 0, 0, 1613, 1614, 5, 112, 0, 0, 1614, 1615, 5, 104, 0, 0, 1615, 1738, 5, 119, 0, 0, 1616, 1617, 5, 112, 0, 0, 1617, 1618, 5, 108, 0, 0, 1618, 1738, 5, 122, 0, 0, 1619, 1620, 5, 101, 0, 0, 1620, 1621, 5, 111, 0, 0, 1621, 1738, 5, 109, 0, 0, 1622, 1623, 5, 97, 0, 0, 1623, 1624, 5, 100, 0, 0, 1624, 1625, 5, 99, 0, 0, 1625, 1738, 5, 113, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 110, 0, 0, 1628, 1629, 5, 100, 0, 0, 1629, 1738, 5, 113, 0, 0, 1630, 1631, 5, 97, 0, 0, 1631, 1632, 5, 115, 0, 0, 1632, 1633, 5, 108, 0, 0, 1633, 1738, 5, 113, 0, 0, 1634, 1635, 5, 97, 0, 0, 1635, 1636, 5, 115, 0, 0, 1636, 1637, 5, 114, 0, 0, 1637, 1738, 5, 113, 0, 0, 1638, 1639, 5, 98, 0, 0, 1639, 1640, 5, 105, 0, 0, 1640, 1641, 5, 116, 0, 0, 1641, 1738, 5, 113, 0, 0, 1642, 1643, 5, 99, 0, 0, 1643, 1644, 5, 112, 0, 0, 1644, 1738, 5, 113, 0, 0, 1645, 1646, 5, 100, 0, 0, 1646, 1647, 5, 101, 0, 0, 1647, 1738, 5, 113, 0, 0, 1648, 1649, 5, 101, 0, 0, 1649, 1650, 5, 111, 0, 0, 1650, 1651, 5, 114, 0, 0, 1651, 1738, 5, 113, 0, 0, 1652, 1653, 5, 105, 0, 0, 1653, 1654, 5, 110, 0, 0, 1654, 1738, 5, 113, 0, 0, 1655, 1656, 5, 108, 0, 0, 1656, 1657, 5, 100, 0, 0, 1657, 1738, 5, 113, 0, 0, 1658, 1659, 5, 108, 0, 0, 1659, 1660, 5, 115, 0, 0, 1660, 1661, 5, 114, 0, 0, 1661, 1738, 5, 113, 0, 0, 1662, 1663, 5, 111, 0, 0, 1663, 1664, 5, 114, 0, 0, 1664, 1738, 5, 113, 0, 0, 1665, 1666, 5, 114, 0, 0, 1666, 1667, 5, 111, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1738, 5, 113, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 114, 0, 0, 1672, 1738, 5, 113, 0, 0, 1673, 1674, 5, 115, 0, 0, 1674, 1675, 5, 98, 0, 0, 1675, 1676, 5, 99, 0, 0, 1676, 1738, 5, 113, 0, 0, 1677, 1678, 5, 115, 0, 0, 1678, 1679, 5, 116, 0, 0, 1679, 1738, 5, 113, 0, 0, 1680, 1681, 5, 115, 0, 0, 1681, 1682, 5, 120, 0, 0, 1682, 1738, 5, 121, 0, 0, 1683, 1684, 5, 115, 0, 0, 1684, 1685, 5, 116, 0, 0, 1685, 1738, 5, 48, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1738, 5, 49, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 116, 0, 0, 1691, 1738, 5, 50, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 97, 0, 0, 1694, 1738, 5, 121, 0, 0, 1695, 1696, 5, 116, 0, 0, 1696, 1697, 5, 109, 0, 0, 1697, 1738, 5, 97, 0, 0, 1698, 1699, 5, 98, 0, 0, 1699, 1700, 5, 115, 0, 0, 1700, 1738, 5, 114, 0, 0, 1701, 1702, 5, 116, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1738, 5, 109, 0, 0, 1704, 1705, 5, 99, 0, 0, 1705, 1706, 5, 115, 0, 0, 1706, 1738, 5, 108, 0, 0, 1707, 1708, 5, 99, 0, 0, 1708, 1709, 5, 108, 0, 0, 1709, 1738, 5, 97, 0, 0, 1710, 1711, 5, 99, 0, 0, 1711, 1712, 5, 108, 0, 0, 1712, 1738, 5, 120, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 108, 0, 0, 1715, 1738, 5, 121, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 115, 0, 0, 1718, 1738, 5, 104, 0, 0, 1719, 1720, 5, 115, 0, 0, 1720, 1721, 5, 101, 0, 0, 1721, 1738, 5, 116, 0, 0, 1722, 1723, 5, 116, 0, 0, 1723, 1724, 5, 115, 0, 0, 1724, 1738, 5, 116, 0, 0, 1725, 1726, 5, 116, 0, 0, 1726, 1727, 5, 105, 0, 0, 1727, 1738, 5, 97, 0, 0, 1728, 1729, 5, 116, 0, 0, 1729, 1730, 5, 100, 0, 0, 1730, 1738, 5, 100, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 105, 0, 0, 1733, 1738, 5, 110, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1738, 5, 105, 0, 0, 1737, 1130, 1, 0, 0, 0, 1737, 1133, 1, 0, 0, 0, 1737, 1136, 1, 0, 0, 0, 1737, 1139, 1, 0, 0, 0, 1737, 1142, 1, 0, 0, 0, 1737, 1145, 1, 0, 0, 0, 1737, 1148, 1, 0, 0, 0, 1737, 1151, 1, 0, 0, 0, 1737, 1154, 1, 0, 0, 0, 1737, 1157, 1, 0, 0, 0, 1737, 1160, 1, 0, 0, 0, 1737, 1163, 1, 0, 0, 0, 1737, 1166, 1, 0, 0, 0, 1737, 1169, 1, 0, 0, 0, 1737, 1172, 1, 0, 0, 0, 1737, 1175, 1, 0, 0, 0, 1737, 1178, 1, 0, 0, 0, 1737, 1181, 1, 0, 0, 0, 1737, 1184, 1, 0, 0, 0, 1737, 1187, 1, 0, 0, 0, 1737, 1190, 1, 0, 0, 0, 1737, 1193, 1, 0, 0, 0, 1737, 1196, 1, 0, 0, 0, 1737, 1199, 1, 0, 0, 0, 1737, 1202, 1, 0, 0, 0, 1737, 1205, 1, 0, 0, 0, 1737, 1208, 1, 0, 0, 0, 1737, 1211, 1, 0, 0, 0, 1737, 1214, 1, 0, 0, 0, 1737, 1217, 1, 0, 0, 0, 1737, 1220, 1, 0, 0, 0, 1737, 1223, 1, 0, 0, 0, 1737, 1226, 1, 0, 0, 0, 1737, 1229, 1, 0, 0, 0, 1737, 1232, 1, 0, 0, 0, 1737, 1235, 1, 0, 0, 0, 1737, 1238, 1, 0, 0, 0, 1737, 1241, 1, 0, 0, 0, 1737, 1244, 1, 0, 0, 0, 1737, 1247, 1, 0, 0, 0, 1737, 1250, 1, 0, 0, 0, 1737, 1253, 1, 0, 0, 0, 1737, 1256, 1, 0, 0, 0, 1737, 1259, 1, 0, 0, 0, 1737, 1262, 1, 0, 0, 0, 1737, 1265, 1, 0, 0, 0, 1737, 1268, 1, 0, 0, 0, 1737, 1271, 1, 0, 0, 0, 1737, 1274, 1, 0, 0, 0, 1737, 1277, 1, 0, 0, 0, 1737, 1280, 1, 0, 0, 0, 1737, 1283, 1, 0, 0, 0, 1737, 1286, 1, 0, 0, 0, 1737, 1289, 1, 0, 0, 0, 1737, 1292, 1, 0, 0, 0, 1737, 1295, 1, 0, 0, 0, 1737, 1298, 1, 0, 0, 0, 1737, 1301, 1, 0, 0, 0, 1737, 1304, 1, 0, 0, 0, 1737, 1307, 1, 0, 0, 0, 1737, 1310, 1, 0, 0, 0, 1737, 1313, 1, 0, 0, 0, 1737, 1316, 1, 0, 0, 0, 1737, 1319, 1, 0, 0, 0, 1737, 1322, 1, 0, 0, 0, 1737, 1325, 1, 0, 0, 0, 1737, 1328, 1, 0, 0, 0, 1737, 1331, 1, 0, 0, 0, 1737, 1334, 1, 0, 0, 0, 1737, 1337, 1, 0, 0, 0, 1737, 1340, 1, 0, 0, 0, 1737, 1343, 1, 0, 0, 0, 1737, 1346, 1, 0, 0, 0, 1737, 1349, 1, 0, 0, 0, 1737, 1352, 1, 0, 0, 0, 1737, 1356, 1, 0, 0, 0, 1737, 1360, 1, 0, 0, 0, 1737, 1364, 1, 0, 0, 0, 1737, 1368, 1, 0, 0, 0, 1737, 1372, 1, 0, 0, 0, 1737, 1376, 1, 0, 0, 0, 1737, 1380, 1, 0, 0, 0, 1737, 1384, 1, 0, 0, 0, 1737, 1388, 1, 0, 0, 0, 1737, 1392, 1, 0, 0, 0, 1737, 1396, 1, 0, 0, 0, 1737, 1400, 1, 0, 0, 0, 1737, 1404, 1, 0, 0, 0, 1737, 1408, 1, 0, 0, 0, 1737, 1412, 1, 0, 0, 0, 1737, 1416, 1, 0, 0, 0, 1737, 1419, 1, 0, 0, 0, 1737, 1422, 1, 0, 0, 0, 1737, 1425, 1, 0, 0, 0, 1737, 1428, 1, 0, 0, 0, 1737, 1431, 1, 0, 0, 0, 1737, 1435, 1, 0, 0, 0, 1737, 1439, 1, 0, 0, 0, 1737, 1443, 1, 0, 0, 0, 1737, 1447, 1, 0, 0, 0, 1737, 1451, 1, 0, 0, 0, 1737, 1455, 1, 0, 0, 0, 1737, 1459, 1, 0, 0, 0, 1737, 1463, 1, 0, 0, 0, 1737, 1467, 1, 0, 0, 0, 1737, 1471, 1, 0, 0, 0, 1737, 1475, 1, 0, 0, 0, 1737, 1479, 1, 0, 0, 0, 1737, 1483, 1, 0, 0, 0, 1737, 1487, 1, 0, 0, 0, 1737, 1491, 1, 0, 0, 0, 1737, 1495, 1, 0, 0, 0, 1737, 1498, 1, 0, 0, 0, 1737, 1501, 1, 0, 0, 0, 1737, 1504, 1, 0, 0, 0, 1737, 1507, 1, 0, 0, 0, 1737, 1510, 1, 0, 0, 0, 1737, 1513, 1, 0, 0, 0, 1737, 1516, 1, 0, 0, 0, 1737, 1519, 1, 0, 0, 0, 1737, 1523, 1, 0, 0, 0, 1737, 1526, 1, 0, 0, 0, 1737, 1529, 1, 0, 0, 0, 1737, 1533, 1, 0, 0, 0, 1737, 1536, 1, 0, 0, 0, 1737, 1539, 1, 0, 0, 0, 1737, 1542, 1, 0, 0, 0, 1737, 1545, 1, 0, 0, 0, 1737, 1549, 1, 0, 0, 0, 1737, 1552, 1, 0, 0, 0, 1737, 1555, 1, 0, 0, 0, 1737, 1558, 1, 0, 0, 0, 1737, 1562, 1, 0, 0, 0, 1737, 1565, 1, 0, 0, 0, 1737, 1569, 1, 0, 0, 0, 1737, 1572, 1, 0, 0, 0, 1737, 1576, 1, 0, 0, 0, 1737, 1580, 1, 0, 0, 0, 1737, 1583, 1, 0, 0, 0, 1737, 1587, 1, 0, 0, 0, 1737, 1590, 1, 0, 0, 0, 1737, 1593, 1, 0, 0, 0, 1737, 1596, 1, 0, 0, 0, 1737, 1600, 1, 0, 0, 0, 1737, 1603, 1, 0, 0, 0, 1737, 1606, 1, 0, 0, 0, 1737, 1609, 1, 0, 0, 0, 1737, 1613, 1, 0, 0, 0, 1737, 1616, 1, 0, 0, 0, 1737, 1619, 1, 0, 0, 0, 1737, 1622, 1, 0, 0, 0, 1737, 1626, 1, 0, 0, 0, 1737, 1630, 1, 0, 0, 0, 1737, 1634, 1, 0, 0, 0, 1737, 1638, 1, 0, 0, 0, 1737, 1642, 1, 0, 0, 0, 1737, 1645, 1, 0, 0, 0, 1737, 1648, 1, 0, 0, 0, 1737, 1652, 1, 0, 0, 0, 1737, 1655, 1, 0, 0, 0, 1737, 1658, 1, 0, 0, 0, 1737, 1662, 1, 0, 0, 0, 1737, 1665, 1, 0, 0, 0, 1737, 1669, 1, 0, 0, 0, 1737, 1673, 1, 0, 0, 0, 1737, 1677, 1, 0, 0, 0, 1737, 1680, 1, 0, 0, 0, 1737, 1683, 1, 0, 0, 0, 1737, 1686, 1, 0, 0, 0, 1737, 1689, 1, 0, 0, 0, 1737, 1692, 1, 0, 0, 0, 1737, 1695, 1, 0, 0, 0, 1737, 1698, 1, 0, 0, 0, 1737, 1701, 1, 0, 0, 0, 1737, 1704, 1, 0, 0, 0, 1737, 1707, 1, 0, 0, 0, 1737, 1710, 1, 0, 0, 0, 1737, 1713, 1, 0, 0, 0, 1737, 1716, 1, 0, 0, 0, 1737, 1719, 1, 0, 0, 0, 1737, 1722, 1, 0, 0, 0, 1737, 1725, 1, 0, 0, 0, 1737, 1728, 1, 0, 0, 0, 1737, 1731, 1, 0, 0, 0, 1737, 1734, 1, 0, 0, 0, 1738, 236, 1, 0, 0, 0, 1739, 1740, 5, 35, 0, 0, 1740, 238, 1, 0, 0, 0, 1741, 1742, 5, 58, 0, 0, 1742, 240, 1, 0, 0, 0, 1743, 1744, 5, 44, 0, 0, 1744, 242, 1, 0, 0, 0, 1745, 1746, 5, 40, 0, 0, 1746, 244, 1, 0, 0, 0, 1747, 1748, 5, 41, 0, 0, 1748, 246, 1, 0, 0, 0, 1749, 1750, 5, 91, 0, 0, 1750, 248, 1, 0, 0, 0, 1751, 1752, 5, 93, 0, 0, 1752, 250, 1, 0, 0, 0, 1753, 1754, 5, 46, 0, 0, 1754, 252, 1, 0, 0, 0, 1755, 1756, 5, 60, 0, 0, 1756, 1757, 5, 60, 0, 0, 1757, 254, 1, 0, 0, 0, 1758, 1759, 5, 62, 0, 0, 1759, 1760, 5, 62, 0, 0, 1760, 256, 1, 0, 0, 0, 1761, 1762, 5, 43, 0, 0, 1762, 258, 1, 0, 0, 0, 1763, 1764, 5, 45, 0, 0, 1764, 260, 1, 0, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 262, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 264, 1, 0, 0, 0, 1769, 1770, 5, 42, 0, 0, 1770, 266, 1, 0, 0, 0, 1771, 1772, 5, 47, 0, 0, 1772, 268, 1, 0, 0, 0, 1773, 1774, 5, 123, 0, 0, 1774, 1775, 6, 133, 7, 0, 1775, 270, 1, 0, 0, 0, 1776, 1777, 5, 125, 0, 0, 1777, 1778, 6, 134, 8, 0, 1778, 272, 1, 0, 0, 0, 1779, 1782, 3, 275, 136, 0, 1780, 1782, 3, 283, 140, 0, 1781, 1779, 1, 0, 0, 0, 1781, 1780, 1, 0, 0, 0, 1782, 274, 1, 0, 0, 0, 1783, 1787, 3, 277, 137, 0, 1784, 1787, 3, 279, 138, 0, 1785, 1787, 3, 281, 139, 0, 1786, 1783, 1, 0, 0, 0, 1786, 1784, 1, 0, 0, 0, 1786, 1785, 1, 0, 0, 0, 1787, 276, 1, 0, 0, 0, 1788, 1792, 5, 37, 0, 0, 1789, 1791, 3, 291, 144, 0, 1790, 1789, 1, 0, 0, 0, 1791, 1794, 1, 0, 0, 0, 1792, 1790, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 1795, 1, 0, 0, 0, 1794, 1792, 1, 0, 0, 0, 1795, 1797, 5, 46, 0, 0, 1796, 1798, 3, 291, 144, 0, 1797, 1796, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 278, 1, 0, 0, 0, 1801, 1803, 3, 293, 145, 0, 1802, 1801, 1, 0, 0, 0, 1803, 1806, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1809, 5, 46, 0, 0, 1808, 1810, 3, 293, 145, 0, 1809, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1809, 1, 0, 0, 0, 1811, 1812, 1, 0, 0, 0, 1812, 280, 1, 0, 0, 0, 1813, 1817, 5, 36, 0, 0, 1814, 1816, 3, 295, 146, 0, 1815, 1814, 1, 0, 0, 0, 1816, 1819, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1817, 1, 0, 0, 0, 1820, 1822, 5, 46, 0, 0, 1821, 1823, 3, 295, 146, 0, 1822, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1822, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 282, 1, 0, 0, 0, 1826, 1830, 3, 287, 142, 0, 1827, 1830, 3, 289, 143, 0, 1828, 1830, 3, 285, 141, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1829, 1828, 1, 0, 0, 0, 1830, 284, 1, 0, 0, 0, 1831, 1833, 5, 37, 0, 0, 1832, 1834, 3, 291, 144, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 286, 1, 0, 0, 0, 1837, 1839, 3, 293, 145, 0, 1838, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1838, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 288, 1, 0, 0, 0, 1842, 1844, 5, 36, 0, 0, 1843, 1845, 3, 295, 146, 0, 1844, 1843, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1844, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 290, 1, 0, 0, 0, 1848, 1849, 7, 4, 0, 0, 1849, 292, 1, 0, 0, 0, 1850, 1851, 7, 5, 0, 0, 1851, 294, 1, 0, 0, 0, 1852, 1853, 7, 6, 0, 0, 1853, 296, 1, 0, 0, 0, 1854, 1858, 5, 39, 0, 0, 1855, 1856, 5, 92, 0, 0, 1856, 1859, 7, 18, 0, 0, 1857, 1859, 8, 15, 0, 0, 1858, 1855, 1, 0, 0, 0, 1858, 1857, 1, 0, 0, 0, 1859, 1860, 1, 0, 0, 0, 1860, 1861, 5, 39, 0, 0, 1861, 298, 1, 0, 0, 0, 1862, 1864, 3, 301, 149, 0, 1863, 1865, 7, 19, 0, 0, 1864, 1863, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 300, 1, 0, 0, 0, 1868, 1872, 5, 33, 0, 0, 1869, 1871, 3, 307, 152, 0, 1870, 1869, 1, 0, 0, 0, 1871, 1874, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1872, 1873, 1, 0, 0, 0, 1873, 302, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1875, 1879, 3, 305, 151, 0, 1876, 1878, 3, 307, 152, 0, 1877, 1876, 1, 0, 0, 0, 1878, 1881, 1, 0, 0, 0, 1879, 1877, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 304, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1883, 7, 7, 0, 0, 1883, 306, 1, 0, 0, 0, 1884, 1885, 7, 8, 0, 0, 1885, 308, 1, 0, 0, 0, 1886, 1887, 5, 64, 0, 0, 1887, 1888, 3, 303, 150, 0, 1888, 310, 1, 0, 0, 0, 1889, 1891, 7, 16, 0, 0, 1890, 1889, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 6, 154, 5, 0, 1895, 312, 1, 0, 0, 0, 1896, 1897, 5, 47, 0, 0, 1897, 1898, 5, 47, 0, 0, 1898, 1902, 1, 0, 0, 0, 1899, 1901, 8, 17, 0, 0, 1900, 1899, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1905, 1906, 6, 155, 6, 0, 1906, 314, 1, 0, 0, 0, 1907, 1908, 5, 47, 0, 0, 1908, 1909, 5, 42, 0, 0, 1909, 1913, 1, 0, 0, 0, 1910, 1912, 9, 0, 0, 0, 1911, 1910, 1, 0, 0, 0, 1912, 1915, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1916, 1917, 5, 42, 0, 0, 1917, 1918, 5, 47, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 6, 156, 6, 0, 1920, 316, 1, 0, 0, 0, 1921, 1923, 5, 60, 0, 0, 1922, 1924, 7, 20, 0, 0, 1923, 1922, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 5, 62, 0, 0, 1928, 1929, 6, 157, 9, 0, 1929, 318, 1, 0, 0, 0, 1930, 1936, 5, 34, 0, 0, 1931, 1932, 5, 92, 0, 0, 1932, 1935, 5, 34, 0, 0, 1933, 1935, 8, 9, 0, 0, 1934, 1931, 1, 0, 0, 0, 1934, 1933, 1, 0, 0, 0, 1935, 1938, 1, 0, 0, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1939, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1939, 1940, 5, 34, 0, 0, 1940, 1941, 6, 158, 10, 0, 1941, 320, 1, 0, 0, 0, 1942, 1944, 7, 16, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1948, 6, 159, 5, 0, 1948, 322, 1, 0, 0, 0, 1949, 1950, 5, 47, 0, 0, 1950, 1951, 5, 47, 0, 0, 1951, 1955, 1, 0, 0, 0, 1952, 1954, 8, 17, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1958, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1958, 1959, 6, 160, 6, 0, 1959, 324, 1, 0, 0, 0, 1960, 1961, 5, 47, 0, 0, 1961, 1962, 5, 42, 0, 0, 1962, 1966, 1, 0, 0, 0, 1963, 1965, 9, 0, 0, 0, 1964, 1963, 1, 0, 0, 0, 1965, 1968, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1969, 1, 0, 0, 0, 1968, 1966, 1, 0, 0, 0, 1969, 1970, 5, 42, 0, 0, 1970, 1971, 5, 47, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 6, 161, 6, 0, 1973, 326, 1, 0, 0, 0, 67, 0, 1, 2, 436, 627, 804, 815, 823, 871, 933, 938, 945, 950, 957, 962, 969, 976, 981, 988, 993, 998, 1005, 1011, 1013, 1018, 1025, 1030, 1042, 1055, 1057, 1062, 1066, 1068, 1071, 1077, 1080, 1085, 1088, 1095, 1105, 1116, 1737, 1781, 1786, 1792, 1799, 1804, 1811, 1817, 1824, 1829, 1835, 1840, 1846, 1858, 1866, 1872, 1879, 1892, 1902, 1913, 1925, 1934, 1936, 1945, 1955, 1966, 11, 1, 0, 0, 1, 66, 1, 1, 80, 2, 1, 81, 3, 1, 107, 4, 0, 1, 0, 0, 2, 0, 1, 133, 5, 1, 134, 6, 1, 157, 7, 1, 158, 8] \ No newline at end of file +[4, 0, 154, 1983, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 439, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 637, 8, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 814, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 825, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 831, 8, 80, 10, 80, 12, 80, 834, 9, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 881, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 3, 96, 943, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 948, 8, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 955, 8, 98, 1, 98, 5, 98, 958, 8, 98, 10, 98, 12, 98, 961, 9, 98, 1, 98, 1, 98, 4, 98, 965, 8, 98, 11, 98, 12, 98, 966, 1, 99, 5, 99, 970, 8, 99, 10, 99, 12, 99, 973, 9, 99, 1, 99, 1, 99, 4, 99, 977, 8, 99, 11, 99, 12, 99, 978, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 986, 8, 100, 1, 100, 5, 100, 989, 8, 100, 10, 100, 12, 100, 992, 9, 100, 1, 100, 1, 100, 4, 100, 996, 8, 100, 11, 100, 12, 100, 997, 1, 101, 1, 101, 1, 101, 3, 101, 1003, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1008, 8, 101, 1, 102, 1, 102, 1, 102, 4, 102, 1013, 8, 102, 11, 102, 12, 102, 1014, 1, 102, 1, 102, 4, 102, 1019, 8, 102, 11, 102, 12, 102, 1020, 3, 102, 1023, 8, 102, 1, 103, 4, 103, 1026, 8, 103, 11, 103, 12, 103, 1027, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1035, 8, 104, 1, 104, 4, 104, 1038, 8, 104, 11, 104, 12, 104, 1039, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 5, 108, 1050, 8, 108, 10, 108, 12, 108, 1053, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1065, 8, 111, 10, 111, 12, 111, 1068, 9, 111, 1, 111, 1, 111, 3, 111, 1072, 8, 111, 1, 111, 1, 111, 3, 111, 1076, 8, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1087, 8, 112, 1, 112, 3, 112, 1090, 8, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1095, 8, 112, 1, 112, 3, 112, 1098, 8, 112, 1, 112, 1, 112, 1, 113, 4, 113, 1103, 8, 113, 11, 113, 12, 113, 1104, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1113, 8, 114, 10, 114, 12, 114, 1116, 9, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1124, 8, 115, 10, 115, 12, 115, 1127, 9, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1747, 8, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1791, 8, 136, 1, 137, 1, 137, 1, 137, 3, 137, 1796, 8, 137, 1, 138, 1, 138, 5, 138, 1800, 8, 138, 10, 138, 12, 138, 1803, 9, 138, 1, 138, 1, 138, 4, 138, 1807, 8, 138, 11, 138, 12, 138, 1808, 1, 139, 5, 139, 1812, 8, 139, 10, 139, 12, 139, 1815, 9, 139, 1, 139, 1, 139, 4, 139, 1819, 8, 139, 11, 139, 12, 139, 1820, 1, 140, 1, 140, 5, 140, 1825, 8, 140, 10, 140, 12, 140, 1828, 9, 140, 1, 140, 1, 140, 4, 140, 1832, 8, 140, 11, 140, 12, 140, 1833, 1, 141, 1, 141, 1, 141, 3, 141, 1839, 8, 141, 1, 142, 1, 142, 4, 142, 1843, 8, 142, 11, 142, 12, 142, 1844, 1, 143, 4, 143, 1848, 8, 143, 11, 143, 12, 143, 1849, 1, 144, 1, 144, 4, 144, 1854, 8, 144, 11, 144, 12, 144, 1855, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1868, 8, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1874, 8, 149, 11, 149, 12, 149, 1875, 1, 150, 1, 150, 5, 150, 1880, 8, 150, 10, 150, 12, 150, 1883, 9, 150, 1, 151, 1, 151, 5, 151, 1887, 8, 151, 10, 151, 12, 151, 1890, 9, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 155, 4, 155, 1900, 8, 155, 11, 155, 12, 155, 1901, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1910, 8, 156, 10, 156, 12, 156, 1913, 9, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 5, 157, 1921, 8, 157, 10, 157, 12, 157, 1924, 9, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 4, 158, 1933, 8, 158, 11, 158, 12, 158, 1934, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 5, 159, 1944, 8, 159, 10, 159, 12, 159, 1947, 9, 159, 1, 159, 1, 159, 1, 159, 1, 160, 4, 160, 1953, 8, 160, 11, 160, 12, 160, 1954, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1963, 8, 161, 10, 161, 12, 161, 1966, 9, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 1974, 8, 162, 10, 162, 12, 162, 1977, 9, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 4, 832, 1125, 1922, 1975, 0, 163, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 0, 215, 0, 217, 0, 219, 107, 221, 0, 223, 0, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 141, 293, 0, 295, 0, 297, 0, 299, 142, 301, 143, 303, 144, 305, 145, 307, 0, 309, 0, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 327, 154, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2244, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 291, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 305, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 1, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 2, 327, 1, 0, 0, 0, 3, 329, 1, 0, 0, 0, 5, 332, 1, 0, 0, 0, 7, 334, 1, 0, 0, 0, 9, 336, 1, 0, 0, 0, 11, 338, 1, 0, 0, 0, 13, 340, 1, 0, 0, 0, 15, 342, 1, 0, 0, 0, 17, 344, 1, 0, 0, 0, 19, 346, 1, 0, 0, 0, 21, 348, 1, 0, 0, 0, 23, 351, 1, 0, 0, 0, 25, 355, 1, 0, 0, 0, 27, 357, 1, 0, 0, 0, 29, 359, 1, 0, 0, 0, 31, 362, 1, 0, 0, 0, 33, 364, 1, 0, 0, 0, 35, 366, 1, 0, 0, 0, 37, 368, 1, 0, 0, 0, 39, 370, 1, 0, 0, 0, 41, 372, 1, 0, 0, 0, 43, 375, 1, 0, 0, 0, 45, 378, 1, 0, 0, 0, 47, 380, 1, 0, 0, 0, 49, 382, 1, 0, 0, 0, 51, 384, 1, 0, 0, 0, 53, 386, 1, 0, 0, 0, 55, 389, 1, 0, 0, 0, 57, 392, 1, 0, 0, 0, 59, 395, 1, 0, 0, 0, 61, 398, 1, 0, 0, 0, 63, 400, 1, 0, 0, 0, 65, 403, 1, 0, 0, 0, 67, 406, 1, 0, 0, 0, 69, 408, 1, 0, 0, 0, 71, 411, 1, 0, 0, 0, 73, 414, 1, 0, 0, 0, 75, 438, 1, 0, 0, 0, 77, 440, 1, 0, 0, 0, 79, 448, 1, 0, 0, 0, 81, 454, 1, 0, 0, 0, 83, 461, 1, 0, 0, 0, 85, 470, 1, 0, 0, 0, 87, 478, 1, 0, 0, 0, 89, 485, 1, 0, 0, 0, 91, 494, 1, 0, 0, 0, 93, 501, 1, 0, 0, 0, 95, 513, 1, 0, 0, 0, 97, 522, 1, 0, 0, 0, 99, 535, 1, 0, 0, 0, 101, 545, 1, 0, 0, 0, 103, 550, 1, 0, 0, 0, 105, 556, 1, 0, 0, 0, 107, 562, 1, 0, 0, 0, 109, 569, 1, 0, 0, 0, 111, 575, 1, 0, 0, 0, 113, 580, 1, 0, 0, 0, 115, 636, 1, 0, 0, 0, 117, 638, 1, 0, 0, 0, 119, 641, 1, 0, 0, 0, 121, 646, 1, 0, 0, 0, 123, 652, 1, 0, 0, 0, 125, 655, 1, 0, 0, 0, 127, 659, 1, 0, 0, 0, 129, 666, 1, 0, 0, 0, 131, 673, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 688, 1, 0, 0, 0, 137, 693, 1, 0, 0, 0, 139, 699, 1, 0, 0, 0, 141, 707, 1, 0, 0, 0, 143, 712, 1, 0, 0, 0, 145, 719, 1, 0, 0, 0, 147, 725, 1, 0, 0, 0, 149, 730, 1, 0, 0, 0, 151, 737, 1, 0, 0, 0, 153, 744, 1, 0, 0, 0, 155, 752, 1, 0, 0, 0, 157, 760, 1, 0, 0, 0, 159, 813, 1, 0, 0, 0, 161, 824, 1, 0, 0, 0, 163, 826, 1, 0, 0, 0, 165, 838, 1, 0, 0, 0, 167, 848, 1, 0, 0, 0, 169, 859, 1, 0, 0, 0, 171, 867, 1, 0, 0, 0, 173, 880, 1, 0, 0, 0, 175, 882, 1, 0, 0, 0, 177, 889, 1, 0, 0, 0, 179, 896, 1, 0, 0, 0, 181, 904, 1, 0, 0, 0, 183, 908, 1, 0, 0, 0, 185, 914, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 927, 1, 0, 0, 0, 191, 934, 1, 0, 0, 0, 193, 937, 1, 0, 0, 0, 195, 942, 1, 0, 0, 0, 197, 947, 1, 0, 0, 0, 199, 954, 1, 0, 0, 0, 201, 971, 1, 0, 0, 0, 203, 985, 1, 0, 0, 0, 205, 1002, 1, 0, 0, 0, 207, 1022, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1034, 1, 0, 0, 0, 213, 1041, 1, 0, 0, 0, 215, 1043, 1, 0, 0, 0, 217, 1045, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1056, 1, 0, 0, 0, 223, 1058, 1, 0, 0, 0, 225, 1060, 1, 0, 0, 0, 227, 1082, 1, 0, 0, 0, 229, 1102, 1, 0, 0, 0, 231, 1108, 1, 0, 0, 0, 233, 1119, 1, 0, 0, 0, 235, 1133, 1, 0, 0, 0, 237, 1746, 1, 0, 0, 0, 239, 1748, 1, 0, 0, 0, 241, 1750, 1, 0, 0, 0, 243, 1752, 1, 0, 0, 0, 245, 1754, 1, 0, 0, 0, 247, 1756, 1, 0, 0, 0, 249, 1758, 1, 0, 0, 0, 251, 1760, 1, 0, 0, 0, 253, 1762, 1, 0, 0, 0, 255, 1764, 1, 0, 0, 0, 257, 1767, 1, 0, 0, 0, 259, 1770, 1, 0, 0, 0, 261, 1772, 1, 0, 0, 0, 263, 1774, 1, 0, 0, 0, 265, 1776, 1, 0, 0, 0, 267, 1778, 1, 0, 0, 0, 269, 1780, 1, 0, 0, 0, 271, 1782, 1, 0, 0, 0, 273, 1785, 1, 0, 0, 0, 275, 1790, 1, 0, 0, 0, 277, 1795, 1, 0, 0, 0, 279, 1797, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1822, 1, 0, 0, 0, 285, 1838, 1, 0, 0, 0, 287, 1840, 1, 0, 0, 0, 289, 1847, 1, 0, 0, 0, 291, 1851, 1, 0, 0, 0, 293, 1857, 1, 0, 0, 0, 295, 1859, 1, 0, 0, 0, 297, 1861, 1, 0, 0, 0, 299, 1863, 1, 0, 0, 0, 301, 1871, 1, 0, 0, 0, 303, 1877, 1, 0, 0, 0, 305, 1884, 1, 0, 0, 0, 307, 1891, 1, 0, 0, 0, 309, 1893, 1, 0, 0, 0, 311, 1895, 1, 0, 0, 0, 313, 1899, 1, 0, 0, 0, 315, 1905, 1, 0, 0, 0, 317, 1916, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1939, 1, 0, 0, 0, 323, 1952, 1, 0, 0, 0, 325, 1958, 1, 0, 0, 0, 327, 1969, 1, 0, 0, 0, 329, 330, 5, 123, 0, 0, 330, 331, 6, 0, 0, 0, 331, 4, 1, 0, 0, 0, 332, 333, 5, 125, 0, 0, 333, 6, 1, 0, 0, 0, 334, 335, 5, 91, 0, 0, 335, 8, 1, 0, 0, 0, 336, 337, 5, 93, 0, 0, 337, 10, 1, 0, 0, 0, 338, 339, 5, 40, 0, 0, 339, 12, 1, 0, 0, 0, 340, 341, 5, 41, 0, 0, 341, 14, 1, 0, 0, 0, 342, 343, 5, 59, 0, 0, 343, 16, 1, 0, 0, 0, 344, 345, 5, 58, 0, 0, 345, 18, 1, 0, 0, 0, 346, 347, 5, 44, 0, 0, 347, 20, 1, 0, 0, 0, 348, 349, 5, 46, 0, 0, 349, 350, 5, 46, 0, 0, 350, 22, 1, 0, 0, 0, 351, 352, 5, 46, 0, 0, 352, 353, 5, 46, 0, 0, 353, 354, 5, 46, 0, 0, 354, 24, 1, 0, 0, 0, 355, 356, 5, 63, 0, 0, 356, 26, 1, 0, 0, 0, 357, 358, 5, 46, 0, 0, 358, 28, 1, 0, 0, 0, 359, 360, 5, 45, 0, 0, 360, 361, 5, 62, 0, 0, 361, 30, 1, 0, 0, 0, 362, 363, 5, 43, 0, 0, 363, 32, 1, 0, 0, 0, 364, 365, 5, 45, 0, 0, 365, 34, 1, 0, 0, 0, 366, 367, 5, 42, 0, 0, 367, 36, 1, 0, 0, 0, 368, 369, 5, 47, 0, 0, 369, 38, 1, 0, 0, 0, 370, 371, 5, 37, 0, 0, 371, 40, 1, 0, 0, 0, 372, 373, 5, 43, 0, 0, 373, 374, 5, 43, 0, 0, 374, 42, 1, 0, 0, 0, 375, 376, 5, 45, 0, 0, 376, 377, 5, 45, 0, 0, 377, 44, 1, 0, 0, 0, 378, 379, 5, 38, 0, 0, 379, 46, 1, 0, 0, 0, 380, 381, 5, 126, 0, 0, 381, 48, 1, 0, 0, 0, 382, 383, 5, 94, 0, 0, 383, 50, 1, 0, 0, 0, 384, 385, 5, 124, 0, 0, 385, 52, 1, 0, 0, 0, 386, 387, 5, 60, 0, 0, 387, 388, 5, 60, 0, 0, 388, 54, 1, 0, 0, 0, 389, 390, 5, 62, 0, 0, 390, 391, 5, 62, 0, 0, 391, 56, 1, 0, 0, 0, 392, 393, 5, 61, 0, 0, 393, 394, 5, 61, 0, 0, 394, 58, 1, 0, 0, 0, 395, 396, 5, 33, 0, 0, 396, 397, 5, 61, 0, 0, 397, 60, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 62, 1, 0, 0, 0, 400, 401, 5, 60, 0, 0, 401, 402, 5, 61, 0, 0, 402, 64, 1, 0, 0, 0, 403, 404, 5, 62, 0, 0, 404, 405, 5, 61, 0, 0, 405, 66, 1, 0, 0, 0, 406, 407, 5, 62, 0, 0, 407, 68, 1, 0, 0, 0, 408, 409, 5, 38, 0, 0, 409, 410, 5, 38, 0, 0, 410, 70, 1, 0, 0, 0, 411, 412, 5, 124, 0, 0, 412, 413, 5, 124, 0, 0, 413, 72, 1, 0, 0, 0, 414, 415, 5, 61, 0, 0, 415, 74, 1, 0, 0, 0, 416, 417, 5, 43, 0, 0, 417, 439, 5, 61, 0, 0, 418, 419, 5, 45, 0, 0, 419, 439, 5, 61, 0, 0, 420, 421, 5, 42, 0, 0, 421, 439, 5, 61, 0, 0, 422, 423, 5, 47, 0, 0, 423, 439, 5, 61, 0, 0, 424, 425, 5, 37, 0, 0, 425, 439, 5, 61, 0, 0, 426, 427, 5, 60, 0, 0, 427, 428, 5, 60, 0, 0, 428, 439, 5, 61, 0, 0, 429, 430, 5, 62, 0, 0, 430, 431, 5, 62, 0, 0, 431, 439, 5, 61, 0, 0, 432, 433, 5, 38, 0, 0, 433, 439, 5, 61, 0, 0, 434, 435, 5, 124, 0, 0, 435, 439, 5, 61, 0, 0, 436, 437, 5, 94, 0, 0, 437, 439, 5, 61, 0, 0, 438, 416, 1, 0, 0, 0, 438, 418, 1, 0, 0, 0, 438, 420, 1, 0, 0, 0, 438, 422, 1, 0, 0, 0, 438, 424, 1, 0, 0, 0, 438, 426, 1, 0, 0, 0, 438, 429, 1, 0, 0, 0, 438, 432, 1, 0, 0, 0, 438, 434, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 76, 1, 0, 0, 0, 440, 441, 5, 116, 0, 0, 441, 442, 5, 121, 0, 0, 442, 443, 5, 112, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 100, 0, 0, 445, 446, 5, 101, 0, 0, 446, 447, 5, 102, 0, 0, 447, 78, 1, 0, 0, 0, 448, 449, 5, 99, 0, 0, 449, 450, 5, 111, 0, 0, 450, 451, 5, 110, 0, 0, 451, 452, 5, 115, 0, 0, 452, 453, 5, 116, 0, 0, 453, 80, 1, 0, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 5, 120, 0, 0, 456, 457, 5, 116, 0, 0, 457, 458, 5, 101, 0, 0, 458, 459, 5, 114, 0, 0, 459, 460, 5, 110, 0, 0, 460, 82, 1, 0, 0, 0, 461, 462, 5, 95, 0, 0, 462, 463, 5, 95, 0, 0, 463, 464, 5, 101, 0, 0, 464, 465, 5, 120, 0, 0, 465, 466, 5, 112, 0, 0, 466, 467, 5, 111, 0, 0, 467, 468, 5, 114, 0, 0, 468, 469, 5, 116, 0, 0, 469, 84, 1, 0, 0, 0, 470, 471, 5, 95, 0, 0, 471, 472, 5, 95, 0, 0, 472, 473, 5, 97, 0, 0, 473, 474, 5, 108, 0, 0, 474, 475, 5, 105, 0, 0, 475, 476, 5, 103, 0, 0, 476, 477, 5, 110, 0, 0, 477, 86, 1, 0, 0, 0, 478, 479, 5, 105, 0, 0, 479, 480, 5, 110, 0, 0, 480, 481, 5, 108, 0, 0, 481, 482, 5, 105, 0, 0, 482, 483, 5, 110, 0, 0, 483, 484, 5, 101, 0, 0, 484, 88, 1, 0, 0, 0, 485, 486, 5, 118, 0, 0, 486, 487, 5, 111, 0, 0, 487, 488, 5, 108, 0, 0, 488, 489, 5, 97, 0, 0, 489, 490, 5, 116, 0, 0, 490, 491, 5, 105, 0, 0, 491, 492, 5, 108, 0, 0, 492, 493, 5, 101, 0, 0, 493, 90, 1, 0, 0, 0, 494, 495, 5, 115, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 97, 0, 0, 497, 498, 5, 116, 0, 0, 498, 499, 5, 105, 0, 0, 499, 500, 5, 99, 0, 0, 500, 92, 1, 0, 0, 0, 501, 502, 5, 95, 0, 0, 502, 503, 5, 95, 0, 0, 503, 504, 5, 105, 0, 0, 504, 505, 5, 110, 0, 0, 505, 506, 5, 116, 0, 0, 506, 507, 5, 101, 0, 0, 507, 508, 5, 114, 0, 0, 508, 509, 5, 114, 0, 0, 509, 510, 5, 117, 0, 0, 510, 511, 5, 112, 0, 0, 511, 512, 5, 116, 0, 0, 512, 94, 1, 0, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 101, 0, 0, 515, 516, 5, 103, 0, 0, 516, 517, 5, 105, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 116, 0, 0, 519, 520, 5, 101, 0, 0, 520, 521, 5, 114, 0, 0, 521, 96, 1, 0, 0, 0, 522, 523, 5, 95, 0, 0, 523, 524, 5, 95, 0, 0, 524, 525, 5, 122, 0, 0, 525, 526, 5, 112, 0, 0, 526, 527, 5, 95, 0, 0, 527, 528, 5, 114, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 115, 0, 0, 530, 531, 5, 101, 0, 0, 531, 532, 5, 114, 0, 0, 532, 533, 5, 118, 0, 0, 533, 534, 5, 101, 0, 0, 534, 98, 1, 0, 0, 0, 535, 536, 5, 95, 0, 0, 536, 537, 5, 95, 0, 0, 537, 538, 5, 97, 0, 0, 538, 539, 5, 100, 0, 0, 539, 540, 5, 100, 0, 0, 540, 541, 5, 114, 0, 0, 541, 542, 5, 101, 0, 0, 542, 543, 5, 115, 0, 0, 543, 544, 5, 115, 0, 0, 544, 100, 1, 0, 0, 0, 545, 546, 5, 95, 0, 0, 546, 547, 5, 95, 0, 0, 547, 548, 5, 122, 0, 0, 548, 549, 5, 112, 0, 0, 549, 102, 1, 0, 0, 0, 550, 551, 5, 95, 0, 0, 551, 552, 5, 95, 0, 0, 552, 553, 5, 109, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 109, 0, 0, 555, 104, 1, 0, 0, 0, 556, 557, 5, 95, 0, 0, 557, 558, 5, 95, 0, 0, 558, 559, 5, 102, 0, 0, 559, 560, 5, 97, 0, 0, 560, 561, 5, 114, 0, 0, 561, 106, 1, 0, 0, 0, 562, 563, 5, 95, 0, 0, 563, 564, 5, 95, 0, 0, 564, 565, 5, 110, 0, 0, 565, 566, 5, 101, 0, 0, 566, 567, 5, 97, 0, 0, 567, 568, 5, 114, 0, 0, 568, 108, 1, 0, 0, 0, 569, 570, 5, 95, 0, 0, 570, 571, 5, 95, 0, 0, 571, 572, 5, 115, 0, 0, 572, 573, 5, 115, 0, 0, 573, 574, 5, 97, 0, 0, 574, 110, 1, 0, 0, 0, 575, 576, 5, 95, 0, 0, 576, 577, 5, 95, 0, 0, 577, 578, 5, 109, 0, 0, 578, 579, 5, 97, 0, 0, 579, 112, 1, 0, 0, 0, 580, 581, 5, 95, 0, 0, 581, 582, 5, 95, 0, 0, 582, 583, 5, 105, 0, 0, 583, 584, 5, 110, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 114, 0, 0, 586, 587, 5, 105, 0, 0, 587, 588, 5, 110, 0, 0, 588, 589, 5, 115, 0, 0, 589, 590, 5, 105, 0, 0, 590, 591, 5, 99, 0, 0, 591, 114, 1, 0, 0, 0, 592, 593, 5, 95, 0, 0, 593, 594, 5, 95, 0, 0, 594, 595, 5, 115, 0, 0, 595, 596, 5, 116, 0, 0, 596, 597, 5, 97, 0, 0, 597, 598, 5, 99, 0, 0, 598, 599, 5, 107, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 637, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 112, 0, 0, 606, 607, 5, 104, 0, 0, 607, 608, 5, 105, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 637, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 118, 0, 0, 615, 616, 5, 97, 0, 0, 616, 617, 5, 114, 0, 0, 617, 618, 5, 99, 0, 0, 618, 619, 5, 97, 0, 0, 619, 620, 5, 108, 0, 0, 620, 637, 5, 108, 0, 0, 621, 622, 5, 95, 0, 0, 622, 623, 5, 95, 0, 0, 623, 624, 5, 105, 0, 0, 624, 625, 5, 110, 0, 0, 625, 626, 5, 116, 0, 0, 626, 627, 5, 114, 0, 0, 627, 628, 5, 105, 0, 0, 628, 629, 5, 110, 0, 0, 629, 630, 5, 115, 0, 0, 630, 631, 5, 105, 0, 0, 631, 632, 5, 99, 0, 0, 632, 633, 5, 99, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 108, 0, 0, 635, 637, 5, 108, 0, 0, 636, 592, 1, 0, 0, 0, 636, 603, 1, 0, 0, 0, 636, 612, 1, 0, 0, 0, 636, 621, 1, 0, 0, 0, 637, 116, 1, 0, 0, 0, 638, 639, 5, 105, 0, 0, 639, 640, 5, 102, 0, 0, 640, 118, 1, 0, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 115, 0, 0, 644, 645, 5, 101, 0, 0, 645, 120, 1, 0, 0, 0, 646, 647, 5, 119, 0, 0, 647, 648, 5, 104, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 108, 0, 0, 650, 651, 5, 101, 0, 0, 651, 122, 1, 0, 0, 0, 652, 653, 5, 100, 0, 0, 653, 654, 5, 111, 0, 0, 654, 124, 1, 0, 0, 0, 655, 656, 5, 102, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 114, 0, 0, 658, 126, 1, 0, 0, 0, 659, 660, 5, 115, 0, 0, 660, 661, 5, 119, 0, 0, 661, 662, 5, 105, 0, 0, 662, 663, 5, 116, 0, 0, 663, 664, 5, 99, 0, 0, 664, 665, 5, 104, 0, 0, 665, 128, 1, 0, 0, 0, 666, 667, 5, 114, 0, 0, 667, 668, 5, 101, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 117, 0, 0, 670, 671, 5, 114, 0, 0, 671, 672, 5, 110, 0, 0, 672, 130, 1, 0, 0, 0, 673, 674, 5, 98, 0, 0, 674, 675, 5, 114, 0, 0, 675, 676, 5, 101, 0, 0, 676, 677, 5, 97, 0, 0, 677, 678, 5, 107, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 110, 0, 0, 682, 683, 5, 116, 0, 0, 683, 684, 5, 105, 0, 0, 684, 685, 5, 110, 0, 0, 685, 686, 5, 117, 0, 0, 686, 687, 5, 101, 0, 0, 687, 134, 1, 0, 0, 0, 688, 689, 5, 103, 0, 0, 689, 690, 5, 111, 0, 0, 690, 691, 5, 116, 0, 0, 691, 692, 5, 111, 0, 0, 692, 136, 1, 0, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 115, 0, 0, 695, 696, 5, 109, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 6, 67, 1, 0, 698, 138, 1, 0, 0, 0, 699, 700, 5, 100, 0, 0, 700, 701, 5, 101, 0, 0, 701, 702, 5, 102, 0, 0, 702, 703, 5, 97, 0, 0, 703, 704, 5, 117, 0, 0, 704, 705, 5, 108, 0, 0, 705, 706, 5, 116, 0, 0, 706, 140, 1, 0, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 97, 0, 0, 709, 710, 5, 115, 0, 0, 710, 711, 5, 101, 0, 0, 711, 142, 1, 0, 0, 0, 712, 713, 5, 115, 0, 0, 713, 714, 5, 116, 0, 0, 714, 715, 5, 114, 0, 0, 715, 716, 5, 117, 0, 0, 716, 717, 5, 99, 0, 0, 717, 718, 5, 116, 0, 0, 718, 144, 1, 0, 0, 0, 719, 720, 5, 117, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 105, 0, 0, 722, 723, 5, 111, 0, 0, 723, 724, 5, 110, 0, 0, 724, 146, 1, 0, 0, 0, 725, 726, 5, 101, 0, 0, 726, 727, 5, 110, 0, 0, 727, 728, 5, 117, 0, 0, 728, 729, 5, 109, 0, 0, 729, 148, 1, 0, 0, 0, 730, 731, 5, 115, 0, 0, 731, 732, 5, 105, 0, 0, 732, 733, 5, 122, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 111, 0, 0, 735, 736, 5, 102, 0, 0, 736, 150, 1, 0, 0, 0, 737, 738, 5, 116, 0, 0, 738, 739, 5, 121, 0, 0, 739, 740, 5, 112, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 100, 0, 0, 743, 152, 1, 0, 0, 0, 744, 745, 5, 100, 0, 0, 745, 746, 5, 101, 0, 0, 746, 747, 5, 102, 0, 0, 747, 748, 5, 105, 0, 0, 748, 749, 5, 110, 0, 0, 749, 750, 5, 101, 0, 0, 750, 751, 5, 100, 0, 0, 751, 154, 1, 0, 0, 0, 752, 753, 5, 107, 0, 0, 753, 754, 5, 105, 0, 0, 754, 755, 5, 99, 0, 0, 755, 756, 5, 107, 0, 0, 756, 757, 5, 97, 0, 0, 757, 758, 5, 115, 0, 0, 758, 759, 5, 109, 0, 0, 759, 156, 1, 0, 0, 0, 760, 761, 5, 33, 0, 0, 761, 158, 1, 0, 0, 0, 762, 763, 5, 115, 0, 0, 763, 764, 5, 105, 0, 0, 764, 765, 5, 103, 0, 0, 765, 766, 5, 110, 0, 0, 766, 767, 5, 101, 0, 0, 767, 814, 5, 100, 0, 0, 768, 769, 5, 117, 0, 0, 769, 770, 5, 110, 0, 0, 770, 771, 5, 115, 0, 0, 771, 772, 5, 105, 0, 0, 772, 773, 5, 103, 0, 0, 773, 774, 5, 110, 0, 0, 774, 775, 5, 101, 0, 0, 775, 814, 5, 100, 0, 0, 776, 777, 5, 98, 0, 0, 777, 778, 5, 121, 0, 0, 778, 779, 5, 116, 0, 0, 779, 814, 5, 101, 0, 0, 780, 781, 5, 119, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 114, 0, 0, 783, 814, 5, 100, 0, 0, 784, 785, 5, 100, 0, 0, 785, 786, 5, 119, 0, 0, 786, 787, 5, 111, 0, 0, 787, 788, 5, 114, 0, 0, 788, 814, 5, 100, 0, 0, 789, 790, 5, 98, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 111, 0, 0, 792, 814, 5, 108, 0, 0, 793, 794, 5, 99, 0, 0, 794, 795, 5, 104, 0, 0, 795, 796, 5, 97, 0, 0, 796, 814, 5, 114, 0, 0, 797, 798, 5, 115, 0, 0, 798, 799, 5, 104, 0, 0, 799, 800, 5, 111, 0, 0, 800, 801, 5, 114, 0, 0, 801, 814, 5, 116, 0, 0, 802, 803, 5, 105, 0, 0, 803, 804, 5, 110, 0, 0, 804, 814, 5, 116, 0, 0, 805, 806, 5, 108, 0, 0, 806, 807, 5, 111, 0, 0, 807, 808, 5, 110, 0, 0, 808, 814, 5, 103, 0, 0, 809, 810, 5, 118, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 105, 0, 0, 812, 814, 5, 100, 0, 0, 813, 762, 1, 0, 0, 0, 813, 768, 1, 0, 0, 0, 813, 776, 1, 0, 0, 0, 813, 780, 1, 0, 0, 0, 813, 784, 1, 0, 0, 0, 813, 789, 1, 0, 0, 0, 813, 793, 1, 0, 0, 0, 813, 797, 1, 0, 0, 0, 813, 802, 1, 0, 0, 0, 813, 805, 1, 0, 0, 0, 813, 809, 1, 0, 0, 0, 814, 160, 1, 0, 0, 0, 815, 816, 5, 116, 0, 0, 816, 817, 5, 114, 0, 0, 817, 818, 5, 117, 0, 0, 818, 825, 5, 101, 0, 0, 819, 820, 5, 102, 0, 0, 820, 821, 5, 97, 0, 0, 821, 822, 5, 108, 0, 0, 822, 823, 5, 115, 0, 0, 823, 825, 5, 101, 0, 0, 824, 815, 1, 0, 0, 0, 824, 819, 1, 0, 0, 0, 825, 162, 1, 0, 0, 0, 826, 827, 5, 123, 0, 0, 827, 828, 5, 123, 0, 0, 828, 832, 1, 0, 0, 0, 829, 831, 9, 0, 0, 0, 830, 829, 1, 0, 0, 0, 831, 834, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 835, 836, 5, 125, 0, 0, 836, 837, 5, 125, 0, 0, 837, 164, 1, 0, 0, 0, 838, 839, 5, 35, 0, 0, 839, 840, 5, 105, 0, 0, 840, 841, 5, 109, 0, 0, 841, 842, 5, 112, 0, 0, 842, 843, 5, 111, 0, 0, 843, 844, 5, 114, 0, 0, 844, 845, 5, 116, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 6, 81, 2, 0, 847, 166, 1, 0, 0, 0, 848, 849, 5, 35, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 110, 0, 0, 851, 852, 5, 99, 0, 0, 852, 853, 5, 108, 0, 0, 853, 854, 5, 117, 0, 0, 854, 855, 5, 100, 0, 0, 855, 856, 5, 101, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 6, 82, 3, 0, 858, 168, 1, 0, 0, 0, 859, 860, 5, 35, 0, 0, 860, 861, 5, 112, 0, 0, 861, 862, 5, 114, 0, 0, 862, 863, 5, 97, 0, 0, 863, 864, 5, 103, 0, 0, 864, 865, 5, 109, 0, 0, 865, 866, 5, 97, 0, 0, 866, 170, 1, 0, 0, 0, 867, 868, 5, 35, 0, 0, 868, 869, 5, 100, 0, 0, 869, 870, 5, 101, 0, 0, 870, 871, 5, 102, 0, 0, 871, 872, 5, 105, 0, 0, 872, 873, 5, 110, 0, 0, 873, 874, 5, 101, 0, 0, 874, 172, 1, 0, 0, 0, 875, 876, 5, 92, 0, 0, 876, 881, 5, 10, 0, 0, 877, 878, 5, 92, 0, 0, 878, 879, 5, 13, 0, 0, 879, 881, 5, 10, 0, 0, 880, 875, 1, 0, 0, 0, 880, 877, 1, 0, 0, 0, 881, 174, 1, 0, 0, 0, 882, 883, 5, 35, 0, 0, 883, 884, 5, 117, 0, 0, 884, 885, 5, 110, 0, 0, 885, 886, 5, 100, 0, 0, 886, 887, 5, 101, 0, 0, 887, 888, 5, 102, 0, 0, 888, 176, 1, 0, 0, 0, 889, 890, 5, 35, 0, 0, 890, 891, 5, 105, 0, 0, 891, 892, 5, 102, 0, 0, 892, 893, 5, 100, 0, 0, 893, 894, 5, 101, 0, 0, 894, 895, 5, 102, 0, 0, 895, 178, 1, 0, 0, 0, 896, 897, 5, 35, 0, 0, 897, 898, 5, 105, 0, 0, 898, 899, 5, 102, 0, 0, 899, 900, 5, 110, 0, 0, 900, 901, 5, 100, 0, 0, 901, 902, 5, 101, 0, 0, 902, 903, 5, 102, 0, 0, 903, 180, 1, 0, 0, 0, 904, 905, 5, 35, 0, 0, 905, 906, 5, 105, 0, 0, 906, 907, 5, 102, 0, 0, 907, 182, 1, 0, 0, 0, 908, 909, 5, 35, 0, 0, 909, 910, 5, 101, 0, 0, 910, 911, 5, 108, 0, 0, 911, 912, 5, 105, 0, 0, 912, 913, 5, 102, 0, 0, 913, 184, 1, 0, 0, 0, 914, 915, 5, 35, 0, 0, 915, 916, 5, 101, 0, 0, 916, 917, 5, 108, 0, 0, 917, 918, 5, 115, 0, 0, 918, 919, 5, 101, 0, 0, 919, 186, 1, 0, 0, 0, 920, 921, 5, 35, 0, 0, 921, 922, 5, 101, 0, 0, 922, 923, 5, 110, 0, 0, 923, 924, 5, 100, 0, 0, 924, 925, 5, 105, 0, 0, 925, 926, 5, 102, 0, 0, 926, 188, 1, 0, 0, 0, 927, 928, 5, 35, 0, 0, 928, 929, 5, 101, 0, 0, 929, 930, 5, 114, 0, 0, 930, 931, 5, 114, 0, 0, 931, 932, 5, 111, 0, 0, 932, 933, 5, 114, 0, 0, 933, 190, 1, 0, 0, 0, 934, 935, 5, 35, 0, 0, 935, 936, 3, 219, 108, 0, 936, 192, 1, 0, 0, 0, 937, 938, 5, 35, 0, 0, 938, 939, 3, 219, 108, 0, 939, 194, 1, 0, 0, 0, 940, 943, 3, 197, 97, 0, 941, 943, 3, 205, 101, 0, 942, 940, 1, 0, 0, 0, 942, 941, 1, 0, 0, 0, 943, 196, 1, 0, 0, 0, 944, 948, 3, 199, 98, 0, 945, 948, 3, 201, 99, 0, 946, 948, 3, 203, 100, 0, 947, 944, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 946, 1, 0, 0, 0, 948, 198, 1, 0, 0, 0, 949, 955, 5, 37, 0, 0, 950, 951, 5, 48, 0, 0, 951, 955, 5, 98, 0, 0, 952, 953, 5, 48, 0, 0, 953, 955, 5, 66, 0, 0, 954, 949, 1, 0, 0, 0, 954, 950, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 955, 959, 1, 0, 0, 0, 956, 958, 3, 213, 105, 0, 957, 956, 1, 0, 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 964, 5, 46, 0, 0, 963, 965, 3, 213, 105, 0, 964, 963, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 200, 1, 0, 0, 0, 968, 970, 3, 215, 106, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 976, 5, 46, 0, 0, 975, 977, 3, 215, 106, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 202, 1, 0, 0, 0, 980, 986, 5, 36, 0, 0, 981, 982, 5, 48, 0, 0, 982, 986, 5, 120, 0, 0, 983, 984, 5, 48, 0, 0, 984, 986, 5, 88, 0, 0, 985, 980, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 986, 990, 1, 0, 0, 0, 987, 989, 3, 217, 107, 0, 988, 987, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 993, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 993, 995, 5, 46, 0, 0, 994, 996, 3, 217, 107, 0, 995, 994, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 995, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 204, 1, 0, 0, 0, 999, 1003, 3, 209, 103, 0, 1000, 1003, 3, 211, 104, 0, 1001, 1003, 3, 207, 102, 0, 1002, 999, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1001, 1, 0, 0, 0, 1003, 1007, 1, 0, 0, 0, 1004, 1005, 7, 0, 0, 0, 1005, 1008, 7, 1, 0, 0, 1006, 1008, 7, 2, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 206, 1, 0, 0, 0, 1009, 1010, 5, 48, 0, 0, 1010, 1012, 7, 3, 0, 0, 1011, 1013, 3, 213, 105, 0, 1012, 1011, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1023, 1, 0, 0, 0, 1016, 1018, 5, 37, 0, 0, 1017, 1019, 3, 213, 105, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1023, 1, 0, 0, 0, 1022, 1009, 1, 0, 0, 0, 1022, 1016, 1, 0, 0, 0, 1023, 208, 1, 0, 0, 0, 1024, 1026, 3, 215, 106, 0, 1025, 1024, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 210, 1, 0, 0, 0, 1029, 1035, 5, 36, 0, 0, 1030, 1031, 5, 48, 0, 0, 1031, 1035, 5, 120, 0, 0, 1032, 1033, 5, 48, 0, 0, 1033, 1035, 5, 88, 0, 0, 1034, 1029, 1, 0, 0, 0, 1034, 1030, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1038, 3, 217, 107, 0, 1037, 1036, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 212, 1, 0, 0, 0, 1041, 1042, 7, 4, 0, 0, 1042, 214, 1, 0, 0, 0, 1043, 1044, 7, 5, 0, 0, 1044, 216, 1, 0, 0, 0, 1045, 1046, 7, 6, 0, 0, 1046, 218, 1, 0, 0, 0, 1047, 1051, 3, 221, 109, 0, 1048, 1050, 3, 223, 110, 0, 1049, 1048, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1054, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1054, 1055, 6, 108, 4, 0, 1055, 220, 1, 0, 0, 0, 1056, 1057, 7, 7, 0, 0, 1057, 222, 1, 0, 0, 0, 1058, 1059, 7, 8, 0, 0, 1059, 224, 1, 0, 0, 0, 1060, 1066, 5, 34, 0, 0, 1061, 1062, 5, 92, 0, 0, 1062, 1065, 5, 34, 0, 0, 1063, 1065, 8, 9, 0, 0, 1064, 1061, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1071, 5, 34, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1077, 1, 0, 0, 0, 1073, 1075, 7, 11, 0, 0, 1074, 1076, 7, 12, 0, 0, 1075, 1074, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1073, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 10, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 226, 1, 0, 0, 0, 1082, 1097, 5, 39, 0, 0, 1083, 1094, 5, 92, 0, 0, 1084, 1086, 7, 13, 0, 0, 1085, 1087, 7, 5, 0, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1090, 7, 5, 0, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1095, 1, 0, 0, 0, 1091, 1092, 5, 120, 0, 0, 1092, 1093, 7, 14, 0, 0, 1093, 1095, 7, 14, 0, 0, 1094, 1084, 1, 0, 0, 0, 1094, 1091, 1, 0, 0, 0, 1095, 1098, 1, 0, 0, 0, 1096, 1098, 8, 15, 0, 0, 1097, 1083, 1, 0, 0, 0, 1097, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 5, 39, 0, 0, 1100, 228, 1, 0, 0, 0, 1101, 1103, 7, 16, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1107, 6, 113, 5, 0, 1107, 230, 1, 0, 0, 0, 1108, 1109, 5, 47, 0, 0, 1109, 1110, 5, 47, 0, 0, 1110, 1114, 1, 0, 0, 0, 1111, 1113, 8, 17, 0, 0, 1112, 1111, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 6, 114, 6, 0, 1118, 232, 1, 0, 0, 0, 1119, 1120, 5, 47, 0, 0, 1120, 1121, 5, 42, 0, 0, 1121, 1125, 1, 0, 0, 0, 1122, 1124, 9, 0, 0, 0, 1123, 1122, 1, 0, 0, 0, 1124, 1127, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1126, 1128, 1, 0, 0, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1129, 5, 42, 0, 0, 1129, 1130, 5, 47, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1132, 6, 115, 6, 0, 1132, 234, 1, 0, 0, 0, 1133, 1134, 5, 46, 0, 0, 1134, 1135, 5, 98, 0, 0, 1135, 1136, 5, 121, 0, 0, 1136, 1137, 5, 116, 0, 0, 1137, 1138, 5, 101, 0, 0, 1138, 236, 1, 0, 0, 0, 1139, 1140, 5, 98, 0, 0, 1140, 1141, 5, 114, 0, 0, 1141, 1747, 5, 107, 0, 0, 1142, 1143, 5, 111, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1747, 5, 97, 0, 0, 1145, 1146, 5, 107, 0, 0, 1146, 1147, 5, 105, 0, 0, 1147, 1747, 5, 108, 0, 0, 1148, 1149, 5, 115, 0, 0, 1149, 1150, 5, 108, 0, 0, 1150, 1747, 5, 111, 0, 0, 1151, 1152, 5, 110, 0, 0, 1152, 1153, 5, 111, 0, 0, 1153, 1747, 5, 112, 0, 0, 1154, 1155, 5, 97, 0, 0, 1155, 1156, 5, 115, 0, 0, 1156, 1747, 5, 108, 0, 0, 1157, 1158, 5, 112, 0, 0, 1158, 1159, 5, 104, 0, 0, 1159, 1747, 5, 112, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 1162, 5, 110, 0, 0, 1162, 1747, 5, 99, 0, 0, 1163, 1164, 5, 98, 0, 0, 1164, 1165, 5, 112, 0, 0, 1165, 1747, 5, 108, 0, 0, 1166, 1167, 5, 99, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1747, 5, 99, 0, 0, 1169, 1170, 5, 106, 0, 0, 1170, 1171, 5, 115, 0, 0, 1171, 1747, 5, 114, 0, 0, 1172, 1173, 5, 97, 0, 0, 1173, 1174, 5, 110, 0, 0, 1174, 1747, 5, 100, 0, 0, 1175, 1176, 5, 114, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1747, 5, 97, 0, 0, 1178, 1179, 5, 98, 0, 0, 1179, 1180, 5, 105, 0, 0, 1180, 1747, 5, 116, 0, 0, 1181, 1182, 5, 114, 0, 0, 1182, 1183, 5, 111, 0, 0, 1183, 1747, 5, 108, 0, 0, 1184, 1185, 5, 112, 0, 0, 1185, 1186, 5, 108, 0, 0, 1186, 1747, 5, 97, 0, 0, 1187, 1188, 5, 112, 0, 0, 1188, 1189, 5, 108, 0, 0, 1189, 1747, 5, 112, 0, 0, 1190, 1191, 5, 98, 0, 0, 1191, 1192, 5, 109, 0, 0, 1192, 1747, 5, 105, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1747, 5, 99, 0, 0, 1196, 1197, 5, 114, 0, 0, 1197, 1198, 5, 116, 0, 0, 1198, 1747, 5, 105, 0, 0, 1199, 1200, 5, 101, 0, 0, 1200, 1201, 5, 111, 0, 0, 1201, 1747, 5, 114, 0, 0, 1202, 1203, 5, 115, 0, 0, 1203, 1204, 5, 114, 0, 0, 1204, 1747, 5, 101, 0, 0, 1205, 1206, 5, 108, 0, 0, 1206, 1207, 5, 115, 0, 0, 1207, 1747, 5, 114, 0, 0, 1208, 1209, 5, 112, 0, 0, 1209, 1210, 5, 104, 0, 0, 1210, 1747, 5, 97, 0, 0, 1211, 1212, 5, 97, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1747, 5, 114, 0, 0, 1214, 1215, 5, 106, 0, 0, 1215, 1216, 5, 109, 0, 0, 1216, 1747, 5, 112, 0, 0, 1217, 1218, 5, 98, 0, 0, 1218, 1219, 5, 118, 0, 0, 1219, 1747, 5, 99, 0, 0, 1220, 1221, 5, 99, 0, 0, 1221, 1222, 5, 108, 0, 0, 1222, 1747, 5, 105, 0, 0, 1223, 1224, 5, 114, 0, 0, 1224, 1225, 5, 116, 0, 0, 1225, 1747, 5, 115, 0, 0, 1226, 1227, 5, 97, 0, 0, 1227, 1228, 5, 100, 0, 0, 1228, 1747, 5, 99, 0, 0, 1229, 1230, 5, 114, 0, 0, 1230, 1231, 5, 114, 0, 0, 1231, 1747, 5, 97, 0, 0, 1232, 1233, 5, 98, 0, 0, 1233, 1234, 5, 118, 0, 0, 1234, 1747, 5, 115, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1747, 5, 105, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 97, 0, 0, 1240, 1747, 5, 120, 0, 0, 1241, 1242, 5, 115, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1747, 5, 121, 0, 0, 1244, 1245, 5, 115, 0, 0, 1245, 1246, 5, 116, 0, 0, 1246, 1747, 5, 97, 0, 0, 1247, 1248, 5, 115, 0, 0, 1248, 1249, 5, 116, 0, 0, 1249, 1747, 5, 120, 0, 0, 1250, 1251, 5, 100, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1747, 5, 121, 0, 0, 1253, 1254, 5, 116, 0, 0, 1254, 1255, 5, 120, 0, 0, 1255, 1747, 5, 97, 0, 0, 1256, 1257, 5, 120, 0, 0, 1257, 1258, 5, 97, 0, 0, 1258, 1747, 5, 97, 0, 0, 1259, 1260, 5, 98, 0, 0, 1260, 1261, 5, 99, 0, 0, 1261, 1747, 5, 99, 0, 0, 1262, 1263, 5, 97, 0, 0, 1263, 1264, 5, 104, 0, 0, 1264, 1747, 5, 120, 0, 0, 1265, 1266, 5, 116, 0, 0, 1266, 1267, 5, 121, 0, 0, 1267, 1747, 5, 97, 0, 0, 1268, 1269, 5, 116, 0, 0, 1269, 1270, 5, 120, 0, 0, 1270, 1747, 5, 115, 0, 0, 1271, 1272, 5, 116, 0, 0, 1272, 1273, 5, 97, 0, 0, 1273, 1747, 5, 115, 0, 0, 1274, 1275, 5, 115, 0, 0, 1275, 1276, 5, 104, 0, 0, 1276, 1747, 5, 121, 0, 0, 1277, 1278, 5, 115, 0, 0, 1278, 1279, 5, 104, 0, 0, 1279, 1747, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 100, 0, 0, 1282, 1747, 5, 121, 0, 0, 1283, 1284, 5, 108, 0, 0, 1284, 1285, 5, 100, 0, 0, 1285, 1747, 5, 97, 0, 0, 1286, 1287, 5, 108, 0, 0, 1287, 1288, 5, 100, 0, 0, 1288, 1747, 5, 120, 0, 0, 1289, 1290, 5, 108, 0, 0, 1290, 1291, 5, 97, 0, 0, 1291, 1747, 5, 120, 0, 0, 1292, 1293, 5, 116, 0, 0, 1293, 1294, 5, 97, 0, 0, 1294, 1747, 5, 121, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 97, 0, 0, 1297, 1747, 5, 120, 0, 0, 1298, 1299, 5, 98, 0, 0, 1299, 1300, 5, 99, 0, 0, 1300, 1747, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 108, 0, 0, 1303, 1747, 5, 118, 0, 0, 1304, 1305, 5, 116, 0, 0, 1305, 1306, 5, 115, 0, 0, 1306, 1747, 5, 120, 0, 0, 1307, 1308, 5, 108, 0, 0, 1308, 1309, 5, 97, 0, 0, 1309, 1747, 5, 115, 0, 0, 1310, 1311, 5, 99, 0, 0, 1311, 1312, 5, 112, 0, 0, 1312, 1747, 5, 121, 0, 0, 1313, 1314, 5, 99, 0, 0, 1314, 1315, 5, 109, 0, 0, 1315, 1747, 5, 112, 0, 0, 1316, 1317, 5, 99, 0, 0, 1317, 1318, 5, 112, 0, 0, 1318, 1747, 5, 120, 0, 0, 1319, 1320, 5, 100, 0, 0, 1320, 1321, 5, 99, 0, 0, 1321, 1747, 5, 112, 0, 0, 1322, 1323, 5, 100, 0, 0, 1323, 1324, 5, 101, 0, 0, 1324, 1747, 5, 99, 0, 0, 1325, 1326, 5, 105, 0, 0, 1326, 1327, 5, 110, 0, 0, 1327, 1747, 5, 99, 0, 0, 1328, 1329, 5, 97, 0, 0, 1329, 1330, 5, 120, 0, 0, 1330, 1747, 5, 115, 0, 0, 1331, 1332, 5, 98, 0, 0, 1332, 1333, 5, 110, 0, 0, 1333, 1747, 5, 101, 0, 0, 1334, 1335, 5, 99, 0, 0, 1335, 1336, 5, 108, 0, 0, 1336, 1747, 5, 100, 0, 0, 1337, 1338, 5, 115, 0, 0, 1338, 1339, 5, 98, 0, 0, 1339, 1747, 5, 99, 0, 0, 1340, 1341, 5, 105, 0, 0, 1341, 1342, 5, 115, 0, 0, 1342, 1747, 5, 99, 0, 0, 1343, 1344, 5, 105, 0, 0, 1344, 1345, 5, 110, 0, 0, 1345, 1747, 5, 120, 0, 0, 1346, 1347, 5, 98, 0, 0, 1347, 1348, 5, 101, 0, 0, 1348, 1747, 5, 113, 0, 0, 1349, 1350, 5, 115, 0, 0, 1350, 1351, 5, 101, 0, 0, 1351, 1747, 5, 100, 0, 0, 1352, 1353, 5, 100, 0, 0, 1353, 1354, 5, 101, 0, 0, 1354, 1747, 5, 120, 0, 0, 1355, 1356, 5, 105, 0, 0, 1356, 1357, 5, 110, 0, 0, 1357, 1747, 5, 121, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1360, 5, 111, 0, 0, 1360, 1747, 5, 114, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 98, 0, 0, 1363, 1364, 5, 114, 0, 0, 1364, 1747, 5, 48, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 98, 0, 0, 1367, 1368, 5, 114, 0, 0, 1368, 1747, 5, 49, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 98, 0, 0, 1371, 1372, 5, 114, 0, 0, 1372, 1747, 5, 50, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 98, 0, 0, 1375, 1376, 5, 114, 0, 0, 1376, 1747, 5, 51, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 98, 0, 0, 1379, 1380, 5, 114, 0, 0, 1380, 1747, 5, 52, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 98, 0, 0, 1383, 1384, 5, 114, 0, 0, 1384, 1747, 5, 53, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 98, 0, 0, 1387, 1388, 5, 114, 0, 0, 1388, 1747, 5, 54, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 98, 0, 0, 1391, 1392, 5, 114, 0, 0, 1392, 1747, 5, 55, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 98, 0, 0, 1395, 1396, 5, 115, 0, 0, 1396, 1747, 5, 48, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 98, 0, 0, 1399, 1400, 5, 115, 0, 0, 1400, 1747, 5, 49, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 98, 0, 0, 1403, 1404, 5, 115, 0, 0, 1404, 1747, 5, 50, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 98, 0, 0, 1407, 1408, 5, 115, 0, 0, 1408, 1747, 5, 51, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 98, 0, 0, 1411, 1412, 5, 115, 0, 0, 1412, 1747, 5, 52, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 98, 0, 0, 1415, 1416, 5, 115, 0, 0, 1416, 1747, 5, 53, 0, 0, 1417, 1418, 5, 98, 0, 0, 1418, 1419, 5, 98, 0, 0, 1419, 1420, 5, 115, 0, 0, 1420, 1747, 5, 54, 0, 0, 1421, 1422, 5, 98, 0, 0, 1422, 1423, 5, 98, 0, 0, 1423, 1424, 5, 115, 0, 0, 1424, 1747, 5, 55, 0, 0, 1425, 1426, 5, 98, 0, 0, 1426, 1427, 5, 114, 0, 0, 1427, 1747, 5, 97, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 104, 0, 0, 1430, 1747, 5, 120, 0, 0, 1431, 1432, 5, 112, 0, 0, 1432, 1433, 5, 104, 0, 0, 1433, 1747, 5, 121, 0, 0, 1434, 1435, 5, 112, 0, 0, 1435, 1436, 5, 108, 0, 0, 1436, 1747, 5, 120, 0, 0, 1437, 1438, 5, 112, 0, 0, 1438, 1439, 5, 108, 0, 0, 1439, 1747, 5, 121, 0, 0, 1440, 1441, 5, 114, 0, 0, 1441, 1442, 5, 109, 0, 0, 1442, 1443, 5, 98, 0, 0, 1443, 1747, 5, 48, 0, 0, 1444, 1445, 5, 114, 0, 0, 1445, 1446, 5, 109, 0, 0, 1446, 1447, 5, 98, 0, 0, 1447, 1747, 5, 49, 0, 0, 1448, 1449, 5, 114, 0, 0, 1449, 1450, 5, 109, 0, 0, 1450, 1451, 5, 98, 0, 0, 1451, 1747, 5, 50, 0, 0, 1452, 1453, 5, 114, 0, 0, 1453, 1454, 5, 109, 0, 0, 1454, 1455, 5, 98, 0, 0, 1455, 1747, 5, 51, 0, 0, 1456, 1457, 5, 114, 0, 0, 1457, 1458, 5, 109, 0, 0, 1458, 1459, 5, 98, 0, 0, 1459, 1747, 5, 52, 0, 0, 1460, 1461, 5, 114, 0, 0, 1461, 1462, 5, 109, 0, 0, 1462, 1463, 5, 98, 0, 0, 1463, 1747, 5, 53, 0, 0, 1464, 1465, 5, 114, 0, 0, 1465, 1466, 5, 109, 0, 0, 1466, 1467, 5, 98, 0, 0, 1467, 1747, 5, 54, 0, 0, 1468, 1469, 5, 114, 0, 0, 1469, 1470, 5, 109, 0, 0, 1470, 1471, 5, 98, 0, 0, 1471, 1747, 5, 55, 0, 0, 1472, 1473, 5, 115, 0, 0, 1473, 1474, 5, 109, 0, 0, 1474, 1475, 5, 98, 0, 0, 1475, 1747, 5, 48, 0, 0, 1476, 1477, 5, 115, 0, 0, 1477, 1478, 5, 109, 0, 0, 1478, 1479, 5, 98, 0, 0, 1479, 1747, 5, 49, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, 1482, 5, 109, 0, 0, 1482, 1483, 5, 98, 0, 0, 1483, 1747, 5, 50, 0, 0, 1484, 1485, 5, 115, 0, 0, 1485, 1486, 5, 109, 0, 0, 1486, 1487, 5, 98, 0, 0, 1487, 1747, 5, 51, 0, 0, 1488, 1489, 5, 115, 0, 0, 1489, 1490, 5, 109, 0, 0, 1490, 1491, 5, 98, 0, 0, 1491, 1747, 5, 52, 0, 0, 1492, 1493, 5, 115, 0, 0, 1493, 1494, 5, 109, 0, 0, 1494, 1495, 5, 98, 0, 0, 1495, 1747, 5, 53, 0, 0, 1496, 1497, 5, 115, 0, 0, 1497, 1498, 5, 109, 0, 0, 1498, 1499, 5, 98, 0, 0, 1499, 1747, 5, 54, 0, 0, 1500, 1501, 5, 115, 0, 0, 1501, 1502, 5, 109, 0, 0, 1502, 1503, 5, 98, 0, 0, 1503, 1747, 5, 55, 0, 0, 1504, 1505, 5, 115, 0, 0, 1505, 1506, 5, 116, 0, 0, 1506, 1747, 5, 112, 0, 0, 1507, 1508, 5, 115, 0, 0, 1508, 1509, 5, 116, 0, 0, 1509, 1747, 5, 122, 0, 0, 1510, 1511, 5, 116, 0, 0, 1511, 1512, 5, 114, 0, 0, 1512, 1747, 5, 98, 0, 0, 1513, 1514, 5, 116, 0, 0, 1514, 1515, 5, 115, 0, 0, 1515, 1747, 5, 98, 0, 0, 1516, 1517, 5, 119, 0, 0, 1517, 1518, 5, 97, 0, 0, 1518, 1747, 5, 105, 0, 0, 1519, 1520, 5, 99, 0, 0, 1520, 1521, 5, 108, 0, 0, 1521, 1747, 5, 101, 0, 0, 1522, 1523, 5, 115, 0, 0, 1523, 1524, 5, 101, 0, 0, 1524, 1747, 5, 101, 0, 0, 1525, 1526, 5, 116, 0, 0, 1526, 1527, 5, 115, 0, 0, 1527, 1747, 5, 121, 0, 0, 1528, 1529, 5, 108, 0, 0, 1529, 1530, 5, 98, 0, 0, 1530, 1531, 5, 112, 0, 0, 1531, 1747, 5, 108, 0, 0, 1532, 1533, 5, 105, 0, 0, 1533, 1534, 5, 110, 0, 0, 1534, 1747, 5, 122, 0, 0, 1535, 1536, 5, 116, 0, 0, 1536, 1537, 5, 121, 0, 0, 1537, 1747, 5, 115, 0, 0, 1538, 1539, 5, 108, 0, 0, 1539, 1540, 5, 98, 0, 0, 1540, 1541, 5, 109, 0, 0, 1541, 1747, 5, 105, 0, 0, 1542, 1543, 5, 100, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1747, 5, 122, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 101, 0, 0, 1547, 1747, 5, 103, 0, 0, 1548, 1549, 5, 97, 0, 0, 1549, 1550, 5, 115, 0, 0, 1550, 1747, 5, 114, 0, 0, 1551, 1552, 5, 116, 0, 0, 1552, 1553, 5, 97, 0, 0, 1553, 1747, 5, 122, 0, 0, 1554, 1555, 5, 108, 0, 0, 1555, 1556, 5, 98, 0, 0, 1556, 1557, 5, 118, 0, 0, 1557, 1747, 5, 99, 0, 0, 1558, 1559, 5, 116, 0, 0, 1559, 1560, 5, 97, 0, 0, 1560, 1747, 5, 98, 0, 0, 1561, 1562, 5, 109, 0, 0, 1562, 1563, 5, 97, 0, 0, 1563, 1747, 5, 112, 0, 0, 1564, 1565, 5, 114, 0, 0, 1565, 1566, 5, 116, 0, 0, 1566, 1747, 5, 110, 0, 0, 1567, 1568, 5, 108, 0, 0, 1568, 1569, 5, 98, 0, 0, 1569, 1570, 5, 115, 0, 0, 1570, 1747, 5, 114, 0, 0, 1571, 1572, 5, 116, 0, 0, 1572, 1573, 5, 122, 0, 0, 1573, 1747, 5, 97, 0, 0, 1574, 1575, 5, 108, 0, 0, 1575, 1576, 5, 98, 0, 0, 1576, 1577, 5, 118, 0, 0, 1577, 1747, 5, 115, 0, 0, 1578, 1579, 5, 116, 0, 0, 1579, 1580, 5, 98, 0, 0, 1580, 1747, 5, 97, 0, 0, 1581, 1582, 5, 108, 0, 0, 1582, 1583, 5, 98, 0, 0, 1583, 1584, 5, 114, 0, 0, 1584, 1747, 5, 97, 0, 0, 1585, 1586, 5, 108, 0, 0, 1586, 1587, 5, 98, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1747, 5, 99, 0, 0, 1589, 1590, 5, 108, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1747, 5, 122, 0, 0, 1592, 1593, 5, 108, 0, 0, 1593, 1594, 5, 98, 0, 0, 1594, 1595, 5, 99, 0, 0, 1595, 1747, 5, 115, 0, 0, 1596, 1597, 5, 99, 0, 0, 1597, 1598, 5, 112, 0, 0, 1598, 1747, 5, 122, 0, 0, 1599, 1600, 5, 100, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 1747, 5, 119, 0, 0, 1602, 1603, 5, 97, 0, 0, 1603, 1604, 5, 115, 0, 0, 1604, 1747, 5, 119, 0, 0, 1605, 1606, 5, 108, 0, 0, 1606, 1607, 5, 98, 0, 0, 1607, 1608, 5, 110, 0, 0, 1608, 1747, 5, 101, 0, 0, 1609, 1610, 5, 112, 0, 0, 1610, 1611, 5, 104, 0, 0, 1611, 1747, 5, 122, 0, 0, 1612, 1613, 5, 105, 0, 0, 1613, 1614, 5, 110, 0, 0, 1614, 1747, 5, 119, 0, 0, 1615, 1616, 5, 114, 0, 0, 1616, 1617, 5, 111, 0, 0, 1617, 1747, 5, 119, 0, 0, 1618, 1619, 5, 108, 0, 0, 1619, 1620, 5, 98, 0, 0, 1620, 1621, 5, 101, 0, 0, 1621, 1747, 5, 113, 0, 0, 1622, 1623, 5, 112, 0, 0, 1623, 1624, 5, 104, 0, 0, 1624, 1747, 5, 119, 0, 0, 1625, 1626, 5, 112, 0, 0, 1626, 1627, 5, 108, 0, 0, 1627, 1747, 5, 122, 0, 0, 1628, 1629, 5, 101, 0, 0, 1629, 1630, 5, 111, 0, 0, 1630, 1747, 5, 109, 0, 0, 1631, 1632, 5, 97, 0, 0, 1632, 1633, 5, 100, 0, 0, 1633, 1634, 5, 99, 0, 0, 1634, 1747, 5, 113, 0, 0, 1635, 1636, 5, 97, 0, 0, 1636, 1637, 5, 110, 0, 0, 1637, 1638, 5, 100, 0, 0, 1638, 1747, 5, 113, 0, 0, 1639, 1640, 5, 97, 0, 0, 1640, 1641, 5, 115, 0, 0, 1641, 1642, 5, 108, 0, 0, 1642, 1747, 5, 113, 0, 0, 1643, 1644, 5, 97, 0, 0, 1644, 1645, 5, 115, 0, 0, 1645, 1646, 5, 114, 0, 0, 1646, 1747, 5, 113, 0, 0, 1647, 1648, 5, 98, 0, 0, 1648, 1649, 5, 105, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1747, 5, 113, 0, 0, 1651, 1652, 5, 99, 0, 0, 1652, 1653, 5, 112, 0, 0, 1653, 1747, 5, 113, 0, 0, 1654, 1655, 5, 100, 0, 0, 1655, 1656, 5, 101, 0, 0, 1656, 1747, 5, 113, 0, 0, 1657, 1658, 5, 101, 0, 0, 1658, 1659, 5, 111, 0, 0, 1659, 1660, 5, 114, 0, 0, 1660, 1747, 5, 113, 0, 0, 1661, 1662, 5, 105, 0, 0, 1662, 1663, 5, 110, 0, 0, 1663, 1747, 5, 113, 0, 0, 1664, 1665, 5, 108, 0, 0, 1665, 1666, 5, 100, 0, 0, 1666, 1747, 5, 113, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1669, 5, 115, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1747, 5, 113, 0, 0, 1671, 1672, 5, 111, 0, 0, 1672, 1673, 5, 114, 0, 0, 1673, 1747, 5, 113, 0, 0, 1674, 1675, 5, 114, 0, 0, 1675, 1676, 5, 111, 0, 0, 1676, 1677, 5, 108, 0, 0, 1677, 1747, 5, 113, 0, 0, 1678, 1679, 5, 114, 0, 0, 1679, 1680, 5, 111, 0, 0, 1680, 1681, 5, 114, 0, 0, 1681, 1747, 5, 113, 0, 0, 1682, 1683, 5, 115, 0, 0, 1683, 1684, 5, 98, 0, 0, 1684, 1685, 5, 99, 0, 0, 1685, 1747, 5, 113, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1747, 5, 113, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 120, 0, 0, 1691, 1747, 5, 121, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 116, 0, 0, 1694, 1747, 5, 48, 0, 0, 1695, 1696, 5, 115, 0, 0, 1696, 1697, 5, 116, 0, 0, 1697, 1747, 5, 49, 0, 0, 1698, 1699, 5, 115, 0, 0, 1699, 1700, 5, 116, 0, 0, 1700, 1747, 5, 50, 0, 0, 1701, 1702, 5, 115, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1747, 5, 121, 0, 0, 1704, 1705, 5, 116, 0, 0, 1705, 1706, 5, 109, 0, 0, 1706, 1747, 5, 97, 0, 0, 1707, 1708, 5, 98, 0, 0, 1708, 1709, 5, 115, 0, 0, 1709, 1747, 5, 114, 0, 0, 1710, 1711, 5, 116, 0, 0, 1711, 1712, 5, 97, 0, 0, 1712, 1747, 5, 109, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 115, 0, 0, 1715, 1747, 5, 108, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 108, 0, 0, 1718, 1747, 5, 97, 0, 0, 1719, 1720, 5, 99, 0, 0, 1720, 1721, 5, 108, 0, 0, 1721, 1747, 5, 120, 0, 0, 1722, 1723, 5, 99, 0, 0, 1723, 1724, 5, 108, 0, 0, 1724, 1747, 5, 121, 0, 0, 1725, 1726, 5, 99, 0, 0, 1726, 1727, 5, 115, 0, 0, 1727, 1747, 5, 104, 0, 0, 1728, 1729, 5, 115, 0, 0, 1729, 1730, 5, 101, 0, 0, 1730, 1747, 5, 116, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 115, 0, 0, 1733, 1747, 5, 116, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1747, 5, 97, 0, 0, 1737, 1738, 5, 116, 0, 0, 1738, 1739, 5, 100, 0, 0, 1739, 1747, 5, 100, 0, 0, 1740, 1741, 5, 116, 0, 0, 1741, 1742, 5, 105, 0, 0, 1742, 1747, 5, 110, 0, 0, 1743, 1744, 5, 116, 0, 0, 1744, 1745, 5, 105, 0, 0, 1745, 1747, 5, 105, 0, 0, 1746, 1139, 1, 0, 0, 0, 1746, 1142, 1, 0, 0, 0, 1746, 1145, 1, 0, 0, 0, 1746, 1148, 1, 0, 0, 0, 1746, 1151, 1, 0, 0, 0, 1746, 1154, 1, 0, 0, 0, 1746, 1157, 1, 0, 0, 0, 1746, 1160, 1, 0, 0, 0, 1746, 1163, 1, 0, 0, 0, 1746, 1166, 1, 0, 0, 0, 1746, 1169, 1, 0, 0, 0, 1746, 1172, 1, 0, 0, 0, 1746, 1175, 1, 0, 0, 0, 1746, 1178, 1, 0, 0, 0, 1746, 1181, 1, 0, 0, 0, 1746, 1184, 1, 0, 0, 0, 1746, 1187, 1, 0, 0, 0, 1746, 1190, 1, 0, 0, 0, 1746, 1193, 1, 0, 0, 0, 1746, 1196, 1, 0, 0, 0, 1746, 1199, 1, 0, 0, 0, 1746, 1202, 1, 0, 0, 0, 1746, 1205, 1, 0, 0, 0, 1746, 1208, 1, 0, 0, 0, 1746, 1211, 1, 0, 0, 0, 1746, 1214, 1, 0, 0, 0, 1746, 1217, 1, 0, 0, 0, 1746, 1220, 1, 0, 0, 0, 1746, 1223, 1, 0, 0, 0, 1746, 1226, 1, 0, 0, 0, 1746, 1229, 1, 0, 0, 0, 1746, 1232, 1, 0, 0, 0, 1746, 1235, 1, 0, 0, 0, 1746, 1238, 1, 0, 0, 0, 1746, 1241, 1, 0, 0, 0, 1746, 1244, 1, 0, 0, 0, 1746, 1247, 1, 0, 0, 0, 1746, 1250, 1, 0, 0, 0, 1746, 1253, 1, 0, 0, 0, 1746, 1256, 1, 0, 0, 0, 1746, 1259, 1, 0, 0, 0, 1746, 1262, 1, 0, 0, 0, 1746, 1265, 1, 0, 0, 0, 1746, 1268, 1, 0, 0, 0, 1746, 1271, 1, 0, 0, 0, 1746, 1274, 1, 0, 0, 0, 1746, 1277, 1, 0, 0, 0, 1746, 1280, 1, 0, 0, 0, 1746, 1283, 1, 0, 0, 0, 1746, 1286, 1, 0, 0, 0, 1746, 1289, 1, 0, 0, 0, 1746, 1292, 1, 0, 0, 0, 1746, 1295, 1, 0, 0, 0, 1746, 1298, 1, 0, 0, 0, 1746, 1301, 1, 0, 0, 0, 1746, 1304, 1, 0, 0, 0, 1746, 1307, 1, 0, 0, 0, 1746, 1310, 1, 0, 0, 0, 1746, 1313, 1, 0, 0, 0, 1746, 1316, 1, 0, 0, 0, 1746, 1319, 1, 0, 0, 0, 1746, 1322, 1, 0, 0, 0, 1746, 1325, 1, 0, 0, 0, 1746, 1328, 1, 0, 0, 0, 1746, 1331, 1, 0, 0, 0, 1746, 1334, 1, 0, 0, 0, 1746, 1337, 1, 0, 0, 0, 1746, 1340, 1, 0, 0, 0, 1746, 1343, 1, 0, 0, 0, 1746, 1346, 1, 0, 0, 0, 1746, 1349, 1, 0, 0, 0, 1746, 1352, 1, 0, 0, 0, 1746, 1355, 1, 0, 0, 0, 1746, 1358, 1, 0, 0, 0, 1746, 1361, 1, 0, 0, 0, 1746, 1365, 1, 0, 0, 0, 1746, 1369, 1, 0, 0, 0, 1746, 1373, 1, 0, 0, 0, 1746, 1377, 1, 0, 0, 0, 1746, 1381, 1, 0, 0, 0, 1746, 1385, 1, 0, 0, 0, 1746, 1389, 1, 0, 0, 0, 1746, 1393, 1, 0, 0, 0, 1746, 1397, 1, 0, 0, 0, 1746, 1401, 1, 0, 0, 0, 1746, 1405, 1, 0, 0, 0, 1746, 1409, 1, 0, 0, 0, 1746, 1413, 1, 0, 0, 0, 1746, 1417, 1, 0, 0, 0, 1746, 1421, 1, 0, 0, 0, 1746, 1425, 1, 0, 0, 0, 1746, 1428, 1, 0, 0, 0, 1746, 1431, 1, 0, 0, 0, 1746, 1434, 1, 0, 0, 0, 1746, 1437, 1, 0, 0, 0, 1746, 1440, 1, 0, 0, 0, 1746, 1444, 1, 0, 0, 0, 1746, 1448, 1, 0, 0, 0, 1746, 1452, 1, 0, 0, 0, 1746, 1456, 1, 0, 0, 0, 1746, 1460, 1, 0, 0, 0, 1746, 1464, 1, 0, 0, 0, 1746, 1468, 1, 0, 0, 0, 1746, 1472, 1, 0, 0, 0, 1746, 1476, 1, 0, 0, 0, 1746, 1480, 1, 0, 0, 0, 1746, 1484, 1, 0, 0, 0, 1746, 1488, 1, 0, 0, 0, 1746, 1492, 1, 0, 0, 0, 1746, 1496, 1, 0, 0, 0, 1746, 1500, 1, 0, 0, 0, 1746, 1504, 1, 0, 0, 0, 1746, 1507, 1, 0, 0, 0, 1746, 1510, 1, 0, 0, 0, 1746, 1513, 1, 0, 0, 0, 1746, 1516, 1, 0, 0, 0, 1746, 1519, 1, 0, 0, 0, 1746, 1522, 1, 0, 0, 0, 1746, 1525, 1, 0, 0, 0, 1746, 1528, 1, 0, 0, 0, 1746, 1532, 1, 0, 0, 0, 1746, 1535, 1, 0, 0, 0, 1746, 1538, 1, 0, 0, 0, 1746, 1542, 1, 0, 0, 0, 1746, 1545, 1, 0, 0, 0, 1746, 1548, 1, 0, 0, 0, 1746, 1551, 1, 0, 0, 0, 1746, 1554, 1, 0, 0, 0, 1746, 1558, 1, 0, 0, 0, 1746, 1561, 1, 0, 0, 0, 1746, 1564, 1, 0, 0, 0, 1746, 1567, 1, 0, 0, 0, 1746, 1571, 1, 0, 0, 0, 1746, 1574, 1, 0, 0, 0, 1746, 1578, 1, 0, 0, 0, 1746, 1581, 1, 0, 0, 0, 1746, 1585, 1, 0, 0, 0, 1746, 1589, 1, 0, 0, 0, 1746, 1592, 1, 0, 0, 0, 1746, 1596, 1, 0, 0, 0, 1746, 1599, 1, 0, 0, 0, 1746, 1602, 1, 0, 0, 0, 1746, 1605, 1, 0, 0, 0, 1746, 1609, 1, 0, 0, 0, 1746, 1612, 1, 0, 0, 0, 1746, 1615, 1, 0, 0, 0, 1746, 1618, 1, 0, 0, 0, 1746, 1622, 1, 0, 0, 0, 1746, 1625, 1, 0, 0, 0, 1746, 1628, 1, 0, 0, 0, 1746, 1631, 1, 0, 0, 0, 1746, 1635, 1, 0, 0, 0, 1746, 1639, 1, 0, 0, 0, 1746, 1643, 1, 0, 0, 0, 1746, 1647, 1, 0, 0, 0, 1746, 1651, 1, 0, 0, 0, 1746, 1654, 1, 0, 0, 0, 1746, 1657, 1, 0, 0, 0, 1746, 1661, 1, 0, 0, 0, 1746, 1664, 1, 0, 0, 0, 1746, 1667, 1, 0, 0, 0, 1746, 1671, 1, 0, 0, 0, 1746, 1674, 1, 0, 0, 0, 1746, 1678, 1, 0, 0, 0, 1746, 1682, 1, 0, 0, 0, 1746, 1686, 1, 0, 0, 0, 1746, 1689, 1, 0, 0, 0, 1746, 1692, 1, 0, 0, 0, 1746, 1695, 1, 0, 0, 0, 1746, 1698, 1, 0, 0, 0, 1746, 1701, 1, 0, 0, 0, 1746, 1704, 1, 0, 0, 0, 1746, 1707, 1, 0, 0, 0, 1746, 1710, 1, 0, 0, 0, 1746, 1713, 1, 0, 0, 0, 1746, 1716, 1, 0, 0, 0, 1746, 1719, 1, 0, 0, 0, 1746, 1722, 1, 0, 0, 0, 1746, 1725, 1, 0, 0, 0, 1746, 1728, 1, 0, 0, 0, 1746, 1731, 1, 0, 0, 0, 1746, 1734, 1, 0, 0, 0, 1746, 1737, 1, 0, 0, 0, 1746, 1740, 1, 0, 0, 0, 1746, 1743, 1, 0, 0, 0, 1747, 238, 1, 0, 0, 0, 1748, 1749, 5, 35, 0, 0, 1749, 240, 1, 0, 0, 0, 1750, 1751, 5, 58, 0, 0, 1751, 242, 1, 0, 0, 0, 1752, 1753, 5, 44, 0, 0, 1753, 244, 1, 0, 0, 0, 1754, 1755, 5, 40, 0, 0, 1755, 246, 1, 0, 0, 0, 1756, 1757, 5, 41, 0, 0, 1757, 248, 1, 0, 0, 0, 1758, 1759, 5, 91, 0, 0, 1759, 250, 1, 0, 0, 0, 1760, 1761, 5, 93, 0, 0, 1761, 252, 1, 0, 0, 0, 1762, 1763, 5, 46, 0, 0, 1763, 254, 1, 0, 0, 0, 1764, 1765, 5, 60, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 256, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 1769, 5, 62, 0, 0, 1769, 258, 1, 0, 0, 0, 1770, 1771, 5, 43, 0, 0, 1771, 260, 1, 0, 0, 0, 1772, 1773, 5, 45, 0, 0, 1773, 262, 1, 0, 0, 0, 1774, 1775, 5, 60, 0, 0, 1775, 264, 1, 0, 0, 0, 1776, 1777, 5, 62, 0, 0, 1777, 266, 1, 0, 0, 0, 1778, 1779, 5, 42, 0, 0, 1779, 268, 1, 0, 0, 0, 1780, 1781, 5, 47, 0, 0, 1781, 270, 1, 0, 0, 0, 1782, 1783, 5, 123, 0, 0, 1783, 1784, 6, 134, 7, 0, 1784, 272, 1, 0, 0, 0, 1785, 1786, 5, 125, 0, 0, 1786, 1787, 6, 135, 8, 0, 1787, 274, 1, 0, 0, 0, 1788, 1791, 3, 277, 137, 0, 1789, 1791, 3, 285, 141, 0, 1790, 1788, 1, 0, 0, 0, 1790, 1789, 1, 0, 0, 0, 1791, 276, 1, 0, 0, 0, 1792, 1796, 3, 279, 138, 0, 1793, 1796, 3, 281, 139, 0, 1794, 1796, 3, 283, 140, 0, 1795, 1792, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1795, 1794, 1, 0, 0, 0, 1796, 278, 1, 0, 0, 0, 1797, 1801, 5, 37, 0, 0, 1798, 1800, 3, 293, 145, 0, 1799, 1798, 1, 0, 0, 0, 1800, 1803, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1804, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1804, 1806, 5, 46, 0, 0, 1805, 1807, 3, 293, 145, 0, 1806, 1805, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1806, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 280, 1, 0, 0, 0, 1810, 1812, 3, 295, 146, 0, 1811, 1810, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1816, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1818, 5, 46, 0, 0, 1817, 1819, 3, 295, 146, 0, 1818, 1817, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 282, 1, 0, 0, 0, 1822, 1826, 5, 36, 0, 0, 1823, 1825, 3, 297, 147, 0, 1824, 1823, 1, 0, 0, 0, 1825, 1828, 1, 0, 0, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1829, 1, 0, 0, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1831, 5, 46, 0, 0, 1830, 1832, 3, 297, 147, 0, 1831, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 284, 1, 0, 0, 0, 1835, 1839, 3, 289, 143, 0, 1836, 1839, 3, 291, 144, 0, 1837, 1839, 3, 287, 142, 0, 1838, 1835, 1, 0, 0, 0, 1838, 1836, 1, 0, 0, 0, 1838, 1837, 1, 0, 0, 0, 1839, 286, 1, 0, 0, 0, 1840, 1842, 5, 37, 0, 0, 1841, 1843, 3, 293, 145, 0, 1842, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1842, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 288, 1, 0, 0, 0, 1846, 1848, 3, 295, 146, 0, 1847, 1846, 1, 0, 0, 0, 1848, 1849, 1, 0, 0, 0, 1849, 1847, 1, 0, 0, 0, 1849, 1850, 1, 0, 0, 0, 1850, 290, 1, 0, 0, 0, 1851, 1853, 5, 36, 0, 0, 1852, 1854, 3, 297, 147, 0, 1853, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1853, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 292, 1, 0, 0, 0, 1857, 1858, 7, 4, 0, 0, 1858, 294, 1, 0, 0, 0, 1859, 1860, 7, 5, 0, 0, 1860, 296, 1, 0, 0, 0, 1861, 1862, 7, 6, 0, 0, 1862, 298, 1, 0, 0, 0, 1863, 1867, 5, 39, 0, 0, 1864, 1865, 5, 92, 0, 0, 1865, 1868, 7, 18, 0, 0, 1866, 1868, 8, 15, 0, 0, 1867, 1864, 1, 0, 0, 0, 1867, 1866, 1, 0, 0, 0, 1868, 1869, 1, 0, 0, 0, 1869, 1870, 5, 39, 0, 0, 1870, 300, 1, 0, 0, 0, 1871, 1873, 3, 303, 150, 0, 1872, 1874, 7, 19, 0, 0, 1873, 1872, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 302, 1, 0, 0, 0, 1877, 1881, 5, 33, 0, 0, 1878, 1880, 3, 309, 153, 0, 1879, 1878, 1, 0, 0, 0, 1880, 1883, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1881, 1882, 1, 0, 0, 0, 1882, 304, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1884, 1888, 3, 307, 152, 0, 1885, 1887, 3, 309, 153, 0, 1886, 1885, 1, 0, 0, 0, 1887, 1890, 1, 0, 0, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 306, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1892, 7, 7, 0, 0, 1892, 308, 1, 0, 0, 0, 1893, 1894, 7, 8, 0, 0, 1894, 310, 1, 0, 0, 0, 1895, 1896, 5, 64, 0, 0, 1896, 1897, 3, 305, 151, 0, 1897, 312, 1, 0, 0, 0, 1898, 1900, 7, 16, 0, 0, 1899, 1898, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1901, 1899, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1904, 6, 155, 5, 0, 1904, 314, 1, 0, 0, 0, 1905, 1906, 5, 47, 0, 0, 1906, 1907, 5, 47, 0, 0, 1907, 1911, 1, 0, 0, 0, 1908, 1910, 8, 17, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 1913, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1912, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1915, 6, 156, 6, 0, 1915, 316, 1, 0, 0, 0, 1916, 1917, 5, 47, 0, 0, 1917, 1918, 5, 42, 0, 0, 1918, 1922, 1, 0, 0, 0, 1919, 1921, 9, 0, 0, 0, 1920, 1919, 1, 0, 0, 0, 1921, 1924, 1, 0, 0, 0, 1922, 1923, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1923, 1925, 1, 0, 0, 0, 1924, 1922, 1, 0, 0, 0, 1925, 1926, 5, 42, 0, 0, 1926, 1927, 5, 47, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1929, 6, 157, 6, 0, 1929, 318, 1, 0, 0, 0, 1930, 1932, 5, 60, 0, 0, 1931, 1933, 7, 20, 0, 0, 1932, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1932, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 1937, 5, 62, 0, 0, 1937, 1938, 6, 158, 9, 0, 1938, 320, 1, 0, 0, 0, 1939, 1945, 5, 34, 0, 0, 1940, 1941, 5, 92, 0, 0, 1941, 1944, 5, 34, 0, 0, 1942, 1944, 8, 9, 0, 0, 1943, 1940, 1, 0, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1947, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1948, 1, 0, 0, 0, 1947, 1945, 1, 0, 0, 0, 1948, 1949, 5, 34, 0, 0, 1949, 1950, 6, 159, 10, 0, 1950, 322, 1, 0, 0, 0, 1951, 1953, 7, 16, 0, 0, 1952, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1957, 6, 160, 5, 0, 1957, 324, 1, 0, 0, 0, 1958, 1959, 5, 47, 0, 0, 1959, 1960, 5, 47, 0, 0, 1960, 1964, 1, 0, 0, 0, 1961, 1963, 8, 17, 0, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1966, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1968, 6, 161, 6, 0, 1968, 326, 1, 0, 0, 0, 1969, 1970, 5, 47, 0, 0, 1970, 1971, 5, 42, 0, 0, 1971, 1975, 1, 0, 0, 0, 1972, 1974, 9, 0, 0, 0, 1973, 1972, 1, 0, 0, 0, 1974, 1977, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1975, 1973, 1, 0, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 5, 42, 0, 0, 1979, 1980, 5, 47, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1982, 6, 162, 6, 0, 1982, 328, 1, 0, 0, 0, 67, 0, 1, 2, 438, 636, 813, 824, 832, 880, 942, 947, 954, 959, 966, 971, 978, 985, 990, 997, 1002, 1007, 1014, 1020, 1022, 1027, 1034, 1039, 1051, 1064, 1066, 1071, 1075, 1077, 1080, 1086, 1089, 1094, 1097, 1104, 1114, 1125, 1746, 1790, 1795, 1801, 1808, 1813, 1820, 1826, 1833, 1838, 1844, 1849, 1855, 1867, 1875, 1881, 1888, 1901, 1911, 1922, 1934, 1943, 1945, 1954, 1964, 1975, 11, 1, 0, 0, 1, 67, 1, 1, 81, 2, 1, 82, 3, 1, 108, 4, 0, 1, 0, 0, 2, 0, 1, 134, 5, 1, 135, 6, 1, 158, 7, 1, 159, 8] \ No newline at end of file diff --git a/gen/KickCLexer.java b/gen/KickCLexer.java index 95c1819b9..4bfb13a32 100644 --- a/gen/KickCLexer.java +++ b/gen/KickCLexer.java @@ -26,27 +26,27 @@ public class KickCLexer extends Lexer { GREATER_THAN_EQUAL=33, GREATER_THAN=34, LOGIC_AND=35, LOGIC_OR=36, ASSIGN=37, ASSIGN_COMPOUND=38, TYPEDEF=39, CONST=40, EXTERN=41, EXPORT=42, ALIGN=43, INLINE=44, VOLATILE=45, STATIC=46, INTERRUPT=47, REGISTER=48, LOCAL_RESERVE=49, - ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, FORM_SSA=54, - FORM_MA=55, INTRINSIC=56, CALLINGCONVENTION=57, IF=58, ELSE=59, WHILE=60, - DO=61, FOR=62, SWITCH=63, RETURN=64, BREAK=65, CONTINUE=66, GOTO=67, ASM=68, - DEFAULT=69, CASE=70, STRUCT=71, UNION=72, ENUM=73, SIZEOF=74, TYPEID=75, - DEFINED=76, KICKASM=77, LOGIC_NOT=78, SIMPLETYPE=79, BOOLEAN=80, KICKASM_BODY=81, - IMPORT=82, INCLUDE=83, PRAGMA=84, DEFINE=85, DEFINE_CONTINUE=86, UNDEF=87, - IFDEF=88, IFNDEF=89, IFIF=90, ELIF=91, IFELSE=92, ENDIF=93, ERROR=94, - TOKEN_STRINGIZE=95, TOKEN_MERGE=96, NUMBER=97, NUMFLOAT=98, BINFLOAT=99, - DECFLOAT=100, HEXFLOAT=101, NUMINT=102, BININTEGER=103, DECINTEGER=104, - HEXINTEGER=105, NAME=106, STRING=107, CHAR=108, WS=109, COMMENT_LINE=110, - COMMENT_BLOCK=111, ASM_BYTE=112, ASM_MNEMONIC=113, ASM_IMM=114, ASM_COLON=115, - ASM_COMMA=116, ASM_PAR_BEGIN=117, ASM_PAR_END=118, ASM_BRACKET_BEGIN=119, - ASM_BRACKET_END=120, ASM_DOT=121, ASM_SHIFT_LEFT=122, ASM_SHIFT_RIGHT=123, - ASM_PLUS=124, ASM_MINUS=125, ASM_LESS_THAN=126, ASM_GREATER_THAN=127, - ASM_MULTIPLY=128, ASM_DIVIDE=129, ASM_CURLY_BEGIN=130, ASM_CURLY_END=131, - ASM_NUMBER=132, ASM_NUMFLOAT=133, ASM_BINFLOAT=134, ASM_DECFLOAT=135, - ASM_HEXFLOAT=136, ASM_NUMINT=137, ASM_BININTEGER=138, ASM_DECINTEGER=139, - ASM_HEXINTEGER=140, ASM_CHAR=141, ASM_MULTI_REL=142, ASM_MULTI_NAME=143, - ASM_NAME=144, ASM_TAG=145, ASM_WS=146, ASM_COMMENT_LINE=147, ASM_COMMENT_BLOCK=148, - IMPORT_SYSTEMFILE=149, IMPORT_LOCALFILE=150, IMPORT_WS=151, IMPORT_COMMENT_LINE=152, - IMPORT_COMMENT_BLOCK=153; + ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, NEAR=54, + FORM_SSA=55, FORM_MA=56, INTRINSIC=57, CALLINGCONVENTION=58, IF=59, ELSE=60, + WHILE=61, DO=62, FOR=63, SWITCH=64, RETURN=65, BREAK=66, CONTINUE=67, + GOTO=68, ASM=69, DEFAULT=70, CASE=71, STRUCT=72, UNION=73, ENUM=74, SIZEOF=75, + TYPEID=76, DEFINED=77, KICKASM=78, LOGIC_NOT=79, SIMPLETYPE=80, BOOLEAN=81, + KICKASM_BODY=82, IMPORT=83, INCLUDE=84, PRAGMA=85, DEFINE=86, DEFINE_CONTINUE=87, + UNDEF=88, IFDEF=89, IFNDEF=90, IFIF=91, ELIF=92, IFELSE=93, ENDIF=94, + ERROR=95, TOKEN_STRINGIZE=96, TOKEN_MERGE=97, NUMBER=98, NUMFLOAT=99, + BINFLOAT=100, DECFLOAT=101, HEXFLOAT=102, NUMINT=103, BININTEGER=104, + DECINTEGER=105, HEXINTEGER=106, NAME=107, STRING=108, CHAR=109, WS=110, + COMMENT_LINE=111, COMMENT_BLOCK=112, ASM_BYTE=113, ASM_MNEMONIC=114, ASM_IMM=115, + ASM_COLON=116, ASM_COMMA=117, ASM_PAR_BEGIN=118, ASM_PAR_END=119, ASM_BRACKET_BEGIN=120, + ASM_BRACKET_END=121, ASM_DOT=122, ASM_SHIFT_LEFT=123, ASM_SHIFT_RIGHT=124, + ASM_PLUS=125, ASM_MINUS=126, ASM_LESS_THAN=127, ASM_GREATER_THAN=128, + ASM_MULTIPLY=129, ASM_DIVIDE=130, ASM_CURLY_BEGIN=131, ASM_CURLY_END=132, + ASM_NUMBER=133, ASM_NUMFLOAT=134, ASM_BINFLOAT=135, ASM_DECFLOAT=136, + ASM_HEXFLOAT=137, ASM_NUMINT=138, ASM_BININTEGER=139, ASM_DECINTEGER=140, + ASM_HEXINTEGER=141, ASM_CHAR=142, ASM_MULTI_REL=143, ASM_MULTI_NAME=144, + ASM_NAME=145, ASM_TAG=146, ASM_WS=147, ASM_COMMENT_LINE=148, ASM_COMMENT_BLOCK=149, + IMPORT_SYSTEMFILE=150, IMPORT_LOCALFILE=151, IMPORT_WS=152, IMPORT_COMMENT_LINE=153, + IMPORT_COMMENT_BLOCK=154; public static final int ASM_MODE=1, IMPORT_MODE=2; public static String[] channelNames = { @@ -67,11 +67,11 @@ public class KickCLexer extends Lexer { "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", - "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", - "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", - "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", - "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", + "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", + "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", + "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", + "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", @@ -99,14 +99,15 @@ public class KickCLexer extends Lexer { "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", "'extern'", "'__export'", "'__align'", "'inline'", "'volatile'", "'static'", "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", - "'__mem'", "'__far'", "'__ssa'", "'__ma'", "'__intrinsic'", null, "'if'", - "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", - "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", "'union'", - "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", "'!'", null, - null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", null, - "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", "'#endif'", - "'#error'", null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "'.byte'", null, "'#'" + "'__mem'", "'__far'", "'__near'", "'__ssa'", "'__ma'", "'__intrinsic'", + null, "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", + "'break'", "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", + "'union'", "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", + "'!'", null, null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", + null, "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", + "'#endif'", "'#error'", null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, "'.byte'", null, + "'#'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -120,11 +121,11 @@ public class KickCLexer extends Lexer { "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", - "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", - "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", - "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", - "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", + "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", + "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", + "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", + "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", @@ -218,28 +219,28 @@ public class KickCLexer extends Lexer { case 0: CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); break; - case 66: + case 67: ASM_action((RuleContext)_localctx, actionIndex); break; - case 80: + case 81: IMPORT_action((RuleContext)_localctx, actionIndex); break; - case 81: + case 82: INCLUDE_action((RuleContext)_localctx, actionIndex); break; - case 107: + case 108: NAME_action((RuleContext)_localctx, actionIndex); break; - case 133: + case 134: ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); break; - case 134: + case 135: ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); break; - case 157: + case 158: IMPORT_SYSTEMFILE_action((RuleContext)_localctx, actionIndex); break; - case 158: + case 159: IMPORT_LOCALFILE_action((RuleContext)_localctx, actionIndex); break; } @@ -309,7 +310,7 @@ public class KickCLexer extends Lexer { } public static final String _serializedATN = - "\u0004\u0000\u0099\u07b6\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ + "\u0004\u0000\u009a\u07bf\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ "\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007"+ "\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007"+ "\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b"+ @@ -351,1240 +352,1245 @@ public class KickCLexer extends Lexer { "\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007\u009b"+ "\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007\u009e"+ "\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007\u00a1"+ - "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002"+ - "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005"+ - "\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001"+ - "\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+ - "\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001"+ - "\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ - "\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+ - "\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ - "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ - "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "\u0002\u00a2\u0007\u00a2\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004"+ + "\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007"+ + "\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ + "\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ + "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ + "\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001"+ + "\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0003$\u01b5\b$\u0001%\u0001%\u0001%\u0001%\u0001"+ - "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ - "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001"+ - "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ - "*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ - "+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u01b7\b$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001"+ + "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + "+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+ - ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001"+ - "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ - "/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ - "0\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u00012\u00012\u0001"+ - "2\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u00014\u0001"+ - "4\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u00015\u0001"+ - "6\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ - "6\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "-\u0001-\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001"+ + ".\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ + "/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+ + "2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u0001"+ + "3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ + "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00017\u0001"+ "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00037\u0274\b7\u00018\u00018\u0001"+ - "8\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001"+ - ":\u0001:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ - "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001"+ - ">\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001C\u0001"+ - "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ - "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001"+ - "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ - "H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001"+ - "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ - "J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0003M\u0325\bM\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0003N\u0330\bN\u0001O\u0001O\u0001O\u0001O\u0005"+ - "O\u0336\bO\nO\fO\u0339\tO\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001"+ - "P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001"+ - "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001"+ - "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0001"+ - "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0003T\u0368"+ - "\bT\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ - "V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+ - "W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001"+ - "Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001[\u0001"+ - "[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ - "\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001"+ - "_\u0003_\u03a6\b_\u0001`\u0001`\u0001`\u0003`\u03ab\b`\u0001a\u0001a\u0001"+ - "a\u0001a\u0001a\u0003a\u03b2\ba\u0001a\u0005a\u03b5\ba\na\fa\u03b8\ta"+ - "\u0001a\u0001a\u0004a\u03bc\ba\u000ba\fa\u03bd\u0001b\u0005b\u03c1\bb"+ - "\nb\fb\u03c4\tb\u0001b\u0001b\u0004b\u03c8\bb\u000bb\fb\u03c9\u0001c\u0001"+ - "c\u0001c\u0001c\u0001c\u0003c\u03d1\bc\u0001c\u0005c\u03d4\bc\nc\fc\u03d7"+ - "\tc\u0001c\u0001c\u0004c\u03db\bc\u000bc\fc\u03dc\u0001d\u0001d\u0001"+ - "d\u0003d\u03e2\bd\u0001d\u0001d\u0001d\u0003d\u03e7\bd\u0001e\u0001e\u0001"+ - "e\u0004e\u03ec\be\u000be\fe\u03ed\u0001e\u0001e\u0004e\u03f2\be\u000b"+ - "e\fe\u03f3\u0003e\u03f6\be\u0001f\u0004f\u03f9\bf\u000bf\ff\u03fa\u0001"+ - "g\u0001g\u0001g\u0001g\u0001g\u0003g\u0402\bg\u0001g\u0004g\u0405\bg\u000b"+ - "g\fg\u0406\u0001h\u0001h\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0005"+ - "k\u0411\bk\nk\fk\u0414\tk\u0001k\u0001k\u0001l\u0001l\u0001m\u0001m\u0001"+ - "n\u0001n\u0001n\u0001n\u0005n\u0420\bn\nn\fn\u0423\tn\u0001n\u0001n\u0003"+ - "n\u0427\bn\u0001n\u0001n\u0003n\u042b\bn\u0003n\u042d\bn\u0001n\u0003"+ - "n\u0430\bn\u0001o\u0001o\u0001o\u0001o\u0003o\u0436\bo\u0001o\u0003o\u0439"+ - "\bo\u0001o\u0001o\u0001o\u0003o\u043e\bo\u0001o\u0003o\u0441\bo\u0001"+ - "o\u0001o\u0001p\u0004p\u0446\bp\u000bp\fp\u0447\u0001p\u0001p\u0001q\u0001"+ - "q\u0001q\u0001q\u0005q\u0450\bq\nq\fq\u0453\tq\u0001q\u0001q\u0001r\u0001"+ - "r\u0001r\u0001r\u0005r\u045b\br\nr\fr\u045e\tr\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0003t\u06ca\bt\u0001u\u0001u\u0001v\u0001"+ - "v\u0001w\u0001w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001"+ - "{\u0001|\u0001|\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f"+ - "\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082"+ - "\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085"+ - "\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087"+ - "\u0001\u0087\u0003\u0087\u06f6\b\u0087\u0001\u0088\u0001\u0088\u0001\u0088"+ - "\u0003\u0088\u06fb\b\u0088\u0001\u0089\u0001\u0089\u0005\u0089\u06ff\b"+ - "\u0089\n\u0089\f\u0089\u0702\t\u0089\u0001\u0089\u0001\u0089\u0004\u0089"+ - "\u0706\b\u0089\u000b\u0089\f\u0089\u0707\u0001\u008a\u0005\u008a\u070b"+ - "\b\u008a\n\u008a\f\u008a\u070e\t\u008a\u0001\u008a\u0001\u008a\u0004\u008a"+ - "\u0712\b\u008a\u000b\u008a\f\u008a\u0713\u0001\u008b\u0001\u008b\u0005"+ - "\u008b\u0718\b\u008b\n\u008b\f\u008b\u071b\t\u008b\u0001\u008b\u0001\u008b"+ - "\u0004\u008b\u071f\b\u008b\u000b\u008b\f\u008b\u0720\u0001\u008c\u0001"+ - "\u008c\u0001\u008c\u0003\u008c\u0726\b\u008c\u0001\u008d\u0001\u008d\u0004"+ - "\u008d\u072a\b\u008d\u000b\u008d\f\u008d\u072b\u0001\u008e\u0004\u008e"+ - "\u072f\b\u008e\u000b\u008e\f\u008e\u0730\u0001\u008f\u0001\u008f\u0004"+ - "\u008f\u0735\b\u008f\u000b\u008f\f\u008f\u0736\u0001\u0090\u0001\u0090"+ - "\u0001\u0091\u0001\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093"+ - "\u0001\u0093\u0001\u0093\u0003\u0093\u0743\b\u0093\u0001\u0093\u0001\u0093"+ - "\u0001\u0094\u0001\u0094\u0004\u0094\u0749\b\u0094\u000b\u0094\f\u0094"+ - "\u074a\u0001\u0095\u0001\u0095\u0005\u0095\u074f\b\u0095\n\u0095\f\u0095"+ - "\u0752\t\u0095\u0001\u0096\u0001\u0096\u0005\u0096\u0756\b\u0096\n\u0096"+ - "\f\u0096\u0759\t\u0096\u0001\u0097\u0001\u0097\u0001\u0098\u0001\u0098"+ - "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0004\u009a\u0763\b\u009a"+ - "\u000b\u009a\f\u009a\u0764\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b"+ - "\u0001\u009b\u0001\u009b\u0005\u009b\u076d\b\u009b\n\u009b\f\u009b\u0770"+ - "\t\u009b\u0001\u009b\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001"+ - "\u009c\u0005\u009c\u0778\b\u009c\n\u009c\f\u009c\u077b\t\u009c\u0001\u009c"+ - "\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ - "\u0004\u009d\u0784\b\u009d\u000b\u009d\f\u009d\u0785\u0001\u009d\u0001"+ - "\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0005"+ - "\u009e\u078f\b\u009e\n\u009e\f\u009e\u0792\t\u009e\u0001\u009e\u0001\u009e"+ - "\u0001\u009e\u0001\u009f\u0004\u009f\u0798\b\u009f\u000b\u009f\f\u009f"+ - "\u0799\u0001\u009f\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0005\u00a0\u07a2\b\u00a0\n\u00a0\f\u00a0\u07a5\t\u00a0\u0001\u00a0"+ - "\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0005\u00a1"+ - "\u07ad\b\u00a1\n\u00a1\f\u00a1\u07b0\t\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a1\u0001\u00a1\u0004\u0337\u045c\u0779\u07ae\u0000\u00a2"+ - "\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+ - "\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+ - "\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+ - "1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+ - "Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085"+ - "C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097L\u0099"+ - "M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00ad"+ - "W\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1"+ - "a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3\u0000"+ - "\u00d5\u0000\u00d7\u0000\u00d9j\u00db\u0000\u00dd\u0000\u00dfk\u00e1l"+ - "\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ + "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00038\u027d\b8\u00019\u00019\u00019\u0001"+ + ":\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ + ";\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001"+ + ">\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001"+ + "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001"+ + "E\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001"+ + "G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001"+ + "I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001"+ + "M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0003N\u032e\bN\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ + "O\u0001O\u0001O\u0003O\u0339\bO\u0001P\u0001P\u0001P\u0001P\u0005P\u033f"+ + "\bP\nP\fP\u0342\tP\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ + "T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001U\u0003U\u0371\bU\u0001"+ + "V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001"+ + "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ + "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001"+ + "\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001]\u0001]"+ + "\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001`\u0001"+ + "`\u0003`\u03af\b`\u0001a\u0001a\u0001a\u0003a\u03b4\ba\u0001b\u0001b\u0001"+ + "b\u0001b\u0001b\u0003b\u03bb\bb\u0001b\u0005b\u03be\bb\nb\fb\u03c1\tb"+ + "\u0001b\u0001b\u0004b\u03c5\bb\u000bb\fb\u03c6\u0001c\u0005c\u03ca\bc"+ + "\nc\fc\u03cd\tc\u0001c\u0001c\u0004c\u03d1\bc\u000bc\fc\u03d2\u0001d\u0001"+ + "d\u0001d\u0001d\u0001d\u0003d\u03da\bd\u0001d\u0005d\u03dd\bd\nd\fd\u03e0"+ + "\td\u0001d\u0001d\u0004d\u03e4\bd\u000bd\fd\u03e5\u0001e\u0001e\u0001"+ + "e\u0003e\u03eb\be\u0001e\u0001e\u0001e\u0003e\u03f0\be\u0001f\u0001f\u0001"+ + "f\u0004f\u03f5\bf\u000bf\ff\u03f6\u0001f\u0001f\u0004f\u03fb\bf\u000b"+ + "f\ff\u03fc\u0003f\u03ff\bf\u0001g\u0004g\u0402\bg\u000bg\fg\u0403\u0001"+ + "h\u0001h\u0001h\u0001h\u0001h\u0003h\u040b\bh\u0001h\u0004h\u040e\bh\u000b"+ + "h\fh\u040f\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0001l\u0001l\u0005"+ + "l\u041a\bl\nl\fl\u041d\tl\u0001l\u0001l\u0001m\u0001m\u0001n\u0001n\u0001"+ + "o\u0001o\u0001o\u0001o\u0005o\u0429\bo\no\fo\u042c\to\u0001o\u0001o\u0003"+ + "o\u0430\bo\u0001o\u0001o\u0003o\u0434\bo\u0003o\u0436\bo\u0001o\u0003"+ + "o\u0439\bo\u0001p\u0001p\u0001p\u0001p\u0003p\u043f\bp\u0001p\u0003p\u0442"+ + "\bp\u0001p\u0001p\u0001p\u0003p\u0447\bp\u0001p\u0003p\u044a\bp\u0001"+ + "p\u0001p\u0001q\u0004q\u044f\bq\u000bq\fq\u0450\u0001q\u0001q\u0001r\u0001"+ + "r\u0001r\u0001r\u0005r\u0459\br\nr\fr\u045c\tr\u0001r\u0001r\u0001s\u0001"+ + "s\u0001s\u0001s\u0005s\u0464\bs\ns\fs\u0467\ts\u0001s\u0001s\u0001s\u0001"+ + "s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0003u\u06d3\bu\u0001v\u0001v\u0001w\u0001"+ + "w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001{\u0001|\u0001"+ + "|\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001\u007f"+ + "\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ + "\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0001\u0087"+ + "\u0001\u0088\u0001\u0088\u0003\u0088\u06ff\b\u0088\u0001\u0089\u0001\u0089"+ + "\u0001\u0089\u0003\u0089\u0704\b\u0089\u0001\u008a\u0001\u008a\u0005\u008a"+ + "\u0708\b\u008a\n\u008a\f\u008a\u070b\t\u008a\u0001\u008a\u0001\u008a\u0004"+ + "\u008a\u070f\b\u008a\u000b\u008a\f\u008a\u0710\u0001\u008b\u0005\u008b"+ + "\u0714\b\u008b\n\u008b\f\u008b\u0717\t\u008b\u0001\u008b\u0001\u008b\u0004"+ + "\u008b\u071b\b\u008b\u000b\u008b\f\u008b\u071c\u0001\u008c\u0001\u008c"+ + "\u0005\u008c\u0721\b\u008c\n\u008c\f\u008c\u0724\t\u008c\u0001\u008c\u0001"+ + "\u008c\u0004\u008c\u0728\b\u008c\u000b\u008c\f\u008c\u0729\u0001\u008d"+ + "\u0001\u008d\u0001\u008d\u0003\u008d\u072f\b\u008d\u0001\u008e\u0001\u008e"+ + "\u0004\u008e\u0733\b\u008e\u000b\u008e\f\u008e\u0734\u0001\u008f\u0004"+ + "\u008f\u0738\b\u008f\u000b\u008f\f\u008f\u0739\u0001\u0090\u0001\u0090"+ + "\u0004\u0090\u073e\b\u0090\u000b\u0090\f\u0090\u073f\u0001\u0091\u0001"+ + "\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001"+ + "\u0094\u0001\u0094\u0001\u0094\u0003\u0094\u074c\b\u0094\u0001\u0094\u0001"+ + "\u0094\u0001\u0095\u0001\u0095\u0004\u0095\u0752\b\u0095\u000b\u0095\f"+ + "\u0095\u0753\u0001\u0096\u0001\u0096\u0005\u0096\u0758\b\u0096\n\u0096"+ + "\f\u0096\u075b\t\u0096\u0001\u0097\u0001\u0097\u0005\u0097\u075f\b\u0097"+ + "\n\u0097\f\u0097\u0762\t\u0097\u0001\u0098\u0001\u0098\u0001\u0099\u0001"+ + "\u0099\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009b\u0004\u009b\u076c"+ + "\b\u009b\u000b\u009b\f\u009b\u076d\u0001\u009b\u0001\u009b\u0001\u009c"+ + "\u0001\u009c\u0001\u009c\u0001\u009c\u0005\u009c\u0776\b\u009c\n\u009c"+ + "\f\u009c\u0779\t\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ + "\u0001\u009d\u0001\u009d\u0005\u009d\u0781\b\u009d\n\u009d\f\u009d\u0784"+ + "\t\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001"+ + "\u009e\u0001\u009e\u0004\u009e\u078d\b\u009e\u000b\u009e\f\u009e\u078e"+ + "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f\u0001\u009f"+ + "\u0001\u009f\u0005\u009f\u0798\b\u009f\n\u009f\f\u009f\u079b\t\u009f\u0001"+ + "\u009f\u0001\u009f\u0001\u009f\u0001\u00a0\u0004\u00a0\u07a1\b\u00a0\u000b"+ + "\u00a0\f\u00a0\u07a2\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001"+ + "\u00a1\u0001\u00a1\u0005\u00a1\u07ab\b\u00a1\n\u00a1\f\u00a1\u07ae\t\u00a1"+ + "\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0005\u00a2\u07b6\b\u00a2\n\u00a2\f\u00a2\u07b9\t\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0004\u0340\u0465\u0782\u07b7"+ + "\u0000\u00a3\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r"+ + "\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ + "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ + "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ + "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ + "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ + "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ + "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ + "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ + "j\u00d5\u0000\u00d7\u0000\u00d9\u0000\u00dbk\u00dd\u0000\u00df\u0000\u00e1"+ + "l\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ "v\u00f7w\u00f9x\u00fby\u00fdz\u00ff{\u0101|\u0103}\u0105~\u0107\u007f"+ "\u0109\u0080\u010b\u0081\u010d\u0082\u010f\u0083\u0111\u0084\u0113\u0085"+ "\u0115\u0086\u0117\u0087\u0119\u0088\u011b\u0089\u011d\u008a\u011f\u008b"+ - "\u0121\u008c\u0123\u0000\u0125\u0000\u0127\u0000\u0129\u008d\u012b\u008e"+ - "\u012d\u008f\u012f\u0090\u0131\u0000\u0133\u0000\u0135\u0091\u0137\u0092"+ + "\u0121\u008c\u0123\u008d\u0125\u0000\u0127\u0000\u0129\u0000\u012b\u008e"+ + "\u012d\u008f\u012f\u0090\u0131\u0091\u0133\u0000\u0135\u0000\u0137\u0092"+ "\u0139\u0093\u013b\u0094\u013d\u0095\u013f\u0096\u0141\u0097\u0143\u0098"+ - "\u0145\u0099\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSUUssuu\n\u0000"+ - "BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb\u0001\u00000"+ - "1\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004\u000009AZ__"+ - "az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000aammsu\u0007"+ - "\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'\u0004\u0000"+ - "\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\"\'\'ffnnrr\u0002"+ - "\u0000++--\u0005\u0000-9AZ\\\\__az\u08bb\u0000\u0003\u0001\u0000\u0000"+ - "\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+ - "\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+ - "\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+ - "\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+ - "\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+ - "\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+ - "\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+ - "!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+ - "\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+ - "\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+ - "\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+ - "\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+ - "\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+ - "\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+ - "\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+ - "\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+ - "\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+ - "\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+ - "\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+ - "\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+ - "\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+ - "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+ - "\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+ - "\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000"+ - "\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000"+ - "\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y"+ - "\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000"+ - "\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000"+ - "\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000"+ - "\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000"+ - "\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000"+ - "\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000"+ - "\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000"+ - "\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000"+ - "\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000"+ - "\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000"+ - "\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000"+ - "\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000"+ - "\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000"+ - "\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000"+ - "\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000"+ - "\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000"+ - "\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000"+ - "\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000"+ - "\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000"+ - "\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000"+ - "\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000"+ - "\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000"+ - "\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000"+ - "\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000"+ - "\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000"+ - "\u0000\u0000\u0001\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001\u0000"+ - "\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001\u0000"+ - "\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001\u0000"+ - "\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001\u0000"+ - "\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001\u0000"+ - "\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001\u0000"+ - "\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001\u0000"+ - "\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001\u0000"+ - "\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001\u0000"+ - "\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001\u0000"+ - "\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001\u0000"+ - "\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001\u0000"+ - "\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001\u0000"+ - "\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001\u0000"+ - "\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0129\u0001\u0000"+ - "\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001\u0000"+ - "\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0135\u0001\u0000"+ - "\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001\u0000"+ - "\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0002\u013d\u0001\u0000"+ - "\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001\u0000"+ - "\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001\u0000"+ - "\u0000\u0000\u0003\u0147\u0001\u0000\u0000\u0000\u0005\u014a\u0001\u0000"+ - "\u0000\u0000\u0007\u014c\u0001\u0000\u0000\u0000\t\u014e\u0001\u0000\u0000"+ - "\u0000\u000b\u0150\u0001\u0000\u0000\u0000\r\u0152\u0001\u0000\u0000\u0000"+ - "\u000f\u0154\u0001\u0000\u0000\u0000\u0011\u0156\u0001\u0000\u0000\u0000"+ - "\u0013\u0158\u0001\u0000\u0000\u0000\u0015\u015a\u0001\u0000\u0000\u0000"+ - "\u0017\u015d\u0001\u0000\u0000\u0000\u0019\u0161\u0001\u0000\u0000\u0000"+ - "\u001b\u0163\u0001\u0000\u0000\u0000\u001d\u0165\u0001\u0000\u0000\u0000"+ - "\u001f\u0168\u0001\u0000\u0000\u0000!\u016a\u0001\u0000\u0000\u0000#\u016c"+ - "\u0001\u0000\u0000\u0000%\u016e\u0001\u0000\u0000\u0000\'\u0170\u0001"+ - "\u0000\u0000\u0000)\u0172\u0001\u0000\u0000\u0000+\u0175\u0001\u0000\u0000"+ - "\u0000-\u0178\u0001\u0000\u0000\u0000/\u017a\u0001\u0000\u0000\u00001"+ - "\u017c\u0001\u0000\u0000\u00003\u017e\u0001\u0000\u0000\u00005\u0180\u0001"+ - "\u0000\u0000\u00007\u0183\u0001\u0000\u0000\u00009\u0186\u0001\u0000\u0000"+ - "\u0000;\u0189\u0001\u0000\u0000\u0000=\u018c\u0001\u0000\u0000\u0000?"+ - "\u018e\u0001\u0000\u0000\u0000A\u0191\u0001\u0000\u0000\u0000C\u0194\u0001"+ - "\u0000\u0000\u0000E\u0196\u0001\u0000\u0000\u0000G\u0199\u0001\u0000\u0000"+ - "\u0000I\u019c\u0001\u0000\u0000\u0000K\u01b4\u0001\u0000\u0000\u0000M"+ - "\u01b6\u0001\u0000\u0000\u0000O\u01be\u0001\u0000\u0000\u0000Q\u01c4\u0001"+ - "\u0000\u0000\u0000S\u01cb\u0001\u0000\u0000\u0000U\u01d4\u0001\u0000\u0000"+ - "\u0000W\u01dc\u0001\u0000\u0000\u0000Y\u01e3\u0001\u0000\u0000\u0000["+ - "\u01ec\u0001\u0000\u0000\u0000]\u01f3\u0001\u0000\u0000\u0000_\u01ff\u0001"+ - "\u0000\u0000\u0000a\u0208\u0001\u0000\u0000\u0000c\u0215\u0001\u0000\u0000"+ - "\u0000e\u021f\u0001\u0000\u0000\u0000g\u0224\u0001\u0000\u0000\u0000i"+ - "\u022a\u0001\u0000\u0000\u0000k\u0230\u0001\u0000\u0000\u0000m\u0236\u0001"+ - "\u0000\u0000\u0000o\u023b\u0001\u0000\u0000\u0000q\u0273\u0001\u0000\u0000"+ - "\u0000s\u0275\u0001\u0000\u0000\u0000u\u0278\u0001\u0000\u0000\u0000w"+ - "\u027d\u0001\u0000\u0000\u0000y\u0283\u0001\u0000\u0000\u0000{\u0286\u0001"+ - "\u0000\u0000\u0000}\u028a\u0001\u0000\u0000\u0000\u007f\u0291\u0001\u0000"+ - "\u0000\u0000\u0081\u0298\u0001\u0000\u0000\u0000\u0083\u029e\u0001\u0000"+ - "\u0000\u0000\u0085\u02a7\u0001\u0000\u0000\u0000\u0087\u02ac\u0001\u0000"+ - "\u0000\u0000\u0089\u02b2\u0001\u0000\u0000\u0000\u008b\u02ba\u0001\u0000"+ - "\u0000\u0000\u008d\u02bf\u0001\u0000\u0000\u0000\u008f\u02c6\u0001\u0000"+ - "\u0000\u0000\u0091\u02cc\u0001\u0000\u0000\u0000\u0093\u02d1\u0001\u0000"+ - "\u0000\u0000\u0095\u02d8\u0001\u0000\u0000\u0000\u0097\u02df\u0001\u0000"+ - "\u0000\u0000\u0099\u02e7\u0001\u0000\u0000\u0000\u009b\u02ef\u0001\u0000"+ - "\u0000\u0000\u009d\u0324\u0001\u0000\u0000\u0000\u009f\u032f\u0001\u0000"+ - "\u0000\u0000\u00a1\u0331\u0001\u0000\u0000\u0000\u00a3\u033d\u0001\u0000"+ - "\u0000\u0000\u00a5\u0347\u0001\u0000\u0000\u0000\u00a7\u0352\u0001\u0000"+ - "\u0000\u0000\u00a9\u035a\u0001\u0000\u0000\u0000\u00ab\u0367\u0001\u0000"+ - "\u0000\u0000\u00ad\u0369\u0001\u0000\u0000\u0000\u00af\u0370\u0001\u0000"+ - "\u0000\u0000\u00b1\u0377\u0001\u0000\u0000\u0000\u00b3\u037f\u0001\u0000"+ - "\u0000\u0000\u00b5\u0383\u0001\u0000\u0000\u0000\u00b7\u0389\u0001\u0000"+ - "\u0000\u0000\u00b9\u038f\u0001\u0000\u0000\u0000\u00bb\u0396\u0001\u0000"+ - "\u0000\u0000\u00bd\u039d\u0001\u0000\u0000\u0000\u00bf\u03a0\u0001\u0000"+ - "\u0000\u0000\u00c1\u03a5\u0001\u0000\u0000\u0000\u00c3\u03aa\u0001\u0000"+ - "\u0000\u0000\u00c5\u03b1\u0001\u0000\u0000\u0000\u00c7\u03c2\u0001\u0000"+ - "\u0000\u0000\u00c9\u03d0\u0001\u0000\u0000\u0000\u00cb\u03e1\u0001\u0000"+ - "\u0000\u0000\u00cd\u03f5\u0001\u0000\u0000\u0000\u00cf\u03f8\u0001\u0000"+ - "\u0000\u0000\u00d1\u0401\u0001\u0000\u0000\u0000\u00d3\u0408\u0001\u0000"+ - "\u0000\u0000\u00d5\u040a\u0001\u0000\u0000\u0000\u00d7\u040c\u0001\u0000"+ - "\u0000\u0000\u00d9\u040e\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000"+ - "\u0000\u0000\u00dd\u0419\u0001\u0000\u0000\u0000\u00df\u041b\u0001\u0000"+ - "\u0000\u0000\u00e1\u0431\u0001\u0000\u0000\u0000\u00e3\u0445\u0001\u0000"+ - "\u0000\u0000\u00e5\u044b\u0001\u0000\u0000\u0000\u00e7\u0456\u0001\u0000"+ - "\u0000\u0000\u00e9\u0464\u0001\u0000\u0000\u0000\u00eb\u06c9\u0001\u0000"+ - "\u0000\u0000\u00ed\u06cb\u0001\u0000\u0000\u0000\u00ef\u06cd\u0001\u0000"+ - "\u0000\u0000\u00f1\u06cf\u0001\u0000\u0000\u0000\u00f3\u06d1\u0001\u0000"+ - "\u0000\u0000\u00f5\u06d3\u0001\u0000\u0000\u0000\u00f7\u06d5\u0001\u0000"+ - "\u0000\u0000\u00f9\u06d7\u0001\u0000\u0000\u0000\u00fb\u06d9\u0001\u0000"+ - "\u0000\u0000\u00fd\u06db\u0001\u0000\u0000\u0000\u00ff\u06de\u0001\u0000"+ - "\u0000\u0000\u0101\u06e1\u0001\u0000\u0000\u0000\u0103\u06e3\u0001\u0000"+ - "\u0000\u0000\u0105\u06e5\u0001\u0000\u0000\u0000\u0107\u06e7\u0001\u0000"+ - "\u0000\u0000\u0109\u06e9\u0001\u0000\u0000\u0000\u010b\u06eb\u0001\u0000"+ - "\u0000\u0000\u010d\u06ed\u0001\u0000\u0000\u0000\u010f\u06f0\u0001\u0000"+ - "\u0000\u0000\u0111\u06f5\u0001\u0000\u0000\u0000\u0113\u06fa\u0001\u0000"+ - "\u0000\u0000\u0115\u06fc\u0001\u0000\u0000\u0000\u0117\u070c\u0001\u0000"+ - "\u0000\u0000\u0119\u0715\u0001\u0000\u0000\u0000\u011b\u0725\u0001\u0000"+ - "\u0000\u0000\u011d\u0727\u0001\u0000\u0000\u0000\u011f\u072e\u0001\u0000"+ - "\u0000\u0000\u0121\u0732\u0001\u0000\u0000\u0000\u0123\u0738\u0001\u0000"+ - "\u0000\u0000\u0125\u073a\u0001\u0000\u0000\u0000\u0127\u073c\u0001\u0000"+ - "\u0000\u0000\u0129\u073e\u0001\u0000\u0000\u0000\u012b\u0746\u0001\u0000"+ - "\u0000\u0000\u012d\u074c\u0001\u0000\u0000\u0000\u012f\u0753\u0001\u0000"+ - "\u0000\u0000\u0131\u075a\u0001\u0000\u0000\u0000\u0133\u075c\u0001\u0000"+ - "\u0000\u0000\u0135\u075e\u0001\u0000\u0000\u0000\u0137\u0762\u0001\u0000"+ - "\u0000\u0000\u0139\u0768\u0001\u0000\u0000\u0000\u013b\u0773\u0001\u0000"+ - "\u0000\u0000\u013d\u0781\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000"+ - "\u0000\u0000\u0141\u0797\u0001\u0000\u0000\u0000\u0143\u079d\u0001\u0000"+ - "\u0000\u0000\u0145\u07a8\u0001\u0000\u0000\u0000\u0147\u0148\u0005{\u0000"+ - "\u0000\u0148\u0149\u0006\u0000\u0000\u0000\u0149\u0004\u0001\u0000\u0000"+ - "\u0000\u014a\u014b\u0005}\u0000\u0000\u014b\u0006\u0001\u0000\u0000\u0000"+ - "\u014c\u014d\u0005[\u0000\u0000\u014d\b\u0001\u0000\u0000\u0000\u014e"+ - "\u014f\u0005]\u0000\u0000\u014f\n\u0001\u0000\u0000\u0000\u0150\u0151"+ - "\u0005(\u0000\u0000\u0151\f\u0001\u0000\u0000\u0000\u0152\u0153\u0005"+ - ")\u0000\u0000\u0153\u000e\u0001\u0000\u0000\u0000\u0154\u0155\u0005;\u0000"+ - "\u0000\u0155\u0010\u0001\u0000\u0000\u0000\u0156\u0157\u0005:\u0000\u0000"+ - "\u0157\u0012\u0001\u0000\u0000\u0000\u0158\u0159\u0005,\u0000\u0000\u0159"+ - "\u0014\u0001\u0000\u0000\u0000\u015a\u015b\u0005.\u0000\u0000\u015b\u015c"+ - "\u0005.\u0000\u0000\u015c\u0016\u0001\u0000\u0000\u0000\u015d\u015e\u0005"+ - ".\u0000\u0000\u015e\u015f\u0005.\u0000\u0000\u015f\u0160\u0005.\u0000"+ - "\u0000\u0160\u0018\u0001\u0000\u0000\u0000\u0161\u0162\u0005?\u0000\u0000"+ - "\u0162\u001a\u0001\u0000\u0000\u0000\u0163\u0164\u0005.\u0000\u0000\u0164"+ - "\u001c\u0001\u0000\u0000\u0000\u0165\u0166\u0005-\u0000\u0000\u0166\u0167"+ - "\u0005>\u0000\u0000\u0167\u001e\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ - "+\u0000\u0000\u0169 \u0001\u0000\u0000\u0000\u016a\u016b\u0005-\u0000"+ - "\u0000\u016b\"\u0001\u0000\u0000\u0000\u016c\u016d\u0005*\u0000\u0000"+ - "\u016d$\u0001\u0000\u0000\u0000\u016e\u016f\u0005/\u0000\u0000\u016f&"+ - "\u0001\u0000\u0000\u0000\u0170\u0171\u0005%\u0000\u0000\u0171(\u0001\u0000"+ - "\u0000\u0000\u0172\u0173\u0005+\u0000\u0000\u0173\u0174\u0005+\u0000\u0000"+ - "\u0174*\u0001\u0000\u0000\u0000\u0175\u0176\u0005-\u0000\u0000\u0176\u0177"+ - "\u0005-\u0000\u0000\u0177,\u0001\u0000\u0000\u0000\u0178\u0179\u0005&"+ - "\u0000\u0000\u0179.\u0001\u0000\u0000\u0000\u017a\u017b\u0005~\u0000\u0000"+ - "\u017b0\u0001\u0000\u0000\u0000\u017c\u017d\u0005^\u0000\u0000\u017d2"+ - "\u0001\u0000\u0000\u0000\u017e\u017f\u0005|\u0000\u0000\u017f4\u0001\u0000"+ - "\u0000\u0000\u0180\u0181\u0005<\u0000\u0000\u0181\u0182\u0005<\u0000\u0000"+ - "\u01826\u0001\u0000\u0000\u0000\u0183\u0184\u0005>\u0000\u0000\u0184\u0185"+ - "\u0005>\u0000\u0000\u01858\u0001\u0000\u0000\u0000\u0186\u0187\u0005="+ - "\u0000\u0000\u0187\u0188\u0005=\u0000\u0000\u0188:\u0001\u0000\u0000\u0000"+ - "\u0189\u018a\u0005!\u0000\u0000\u018a\u018b\u0005=\u0000\u0000\u018b<"+ - "\u0001\u0000\u0000\u0000\u018c\u018d\u0005<\u0000\u0000\u018d>\u0001\u0000"+ - "\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f\u0190\u0005=\u0000\u0000"+ - "\u0190@\u0001\u0000\u0000\u0000\u0191\u0192\u0005>\u0000\u0000\u0192\u0193"+ - "\u0005=\u0000\u0000\u0193B\u0001\u0000\u0000\u0000\u0194\u0195\u0005>"+ - "\u0000\u0000\u0195D\u0001\u0000\u0000\u0000\u0196\u0197\u0005&\u0000\u0000"+ - "\u0197\u0198\u0005&\u0000\u0000\u0198F\u0001\u0000\u0000\u0000\u0199\u019a"+ - "\u0005|\u0000\u0000\u019a\u019b\u0005|\u0000\u0000\u019bH\u0001\u0000"+ - "\u0000\u0000\u019c\u019d\u0005=\u0000\u0000\u019dJ\u0001\u0000\u0000\u0000"+ - "\u019e\u019f\u0005+\u0000\u0000\u019f\u01b5\u0005=\u0000\u0000\u01a0\u01a1"+ - "\u0005-\u0000\u0000\u01a1\u01b5\u0005=\u0000\u0000\u01a2\u01a3\u0005*"+ - "\u0000\u0000\u01a3\u01b5\u0005=\u0000\u0000\u01a4\u01a5\u0005/\u0000\u0000"+ - "\u01a5\u01b5\u0005=\u0000\u0000\u01a6\u01a7\u0005%\u0000\u0000\u01a7\u01b5"+ - "\u0005=\u0000\u0000\u01a8\u01a9\u0005<\u0000\u0000\u01a9\u01aa\u0005<"+ - "\u0000\u0000\u01aa\u01b5\u0005=\u0000\u0000\u01ab\u01ac\u0005>\u0000\u0000"+ - "\u01ac\u01ad\u0005>\u0000\u0000\u01ad\u01b5\u0005=\u0000\u0000\u01ae\u01af"+ - "\u0005&\u0000\u0000\u01af\u01b5\u0005=\u0000\u0000\u01b0\u01b1\u0005|"+ - "\u0000\u0000\u01b1\u01b5\u0005=\u0000\u0000\u01b2\u01b3\u0005^\u0000\u0000"+ - "\u01b3\u01b5\u0005=\u0000\u0000\u01b4\u019e\u0001\u0000\u0000\u0000\u01b4"+ - "\u01a0\u0001\u0000\u0000\u0000\u01b4\u01a2\u0001\u0000\u0000\u0000\u01b4"+ - "\u01a4\u0001\u0000\u0000\u0000\u01b4\u01a6\u0001\u0000\u0000\u0000\u01b4"+ - "\u01a8\u0001\u0000\u0000\u0000\u01b4\u01ab\u0001\u0000\u0000\u0000\u01b4"+ - "\u01ae\u0001\u0000\u0000\u0000\u01b4\u01b0\u0001\u0000\u0000\u0000\u01b4"+ - "\u01b2\u0001\u0000\u0000\u0000\u01b5L\u0001\u0000\u0000\u0000\u01b6\u01b7"+ - "\u0005t\u0000\u0000\u01b7\u01b8\u0005y\u0000\u0000\u01b8\u01b9\u0005p"+ - "\u0000\u0000\u01b9\u01ba\u0005e\u0000\u0000\u01ba\u01bb\u0005d\u0000\u0000"+ - "\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005f\u0000\u0000\u01bdN"+ - "\u0001\u0000\u0000\u0000\u01be\u01bf\u0005c\u0000\u0000\u01bf\u01c0\u0005"+ - "o\u0000\u0000\u01c0\u01c1\u0005n\u0000\u0000\u01c1\u01c2\u0005s\u0000"+ - "\u0000\u01c2\u01c3\u0005t\u0000\u0000\u01c3P\u0001\u0000\u0000\u0000\u01c4"+ - "\u01c5\u0005e\u0000\u0000\u01c5\u01c6\u0005x\u0000\u0000\u01c6\u01c7\u0005"+ - "t\u0000\u0000\u01c7\u01c8\u0005e\u0000\u0000\u01c8\u01c9\u0005r\u0000"+ - "\u0000\u01c9\u01ca\u0005n\u0000\u0000\u01caR\u0001\u0000\u0000\u0000\u01cb"+ - "\u01cc\u0005_\u0000\u0000\u01cc\u01cd\u0005_\u0000\u0000\u01cd\u01ce\u0005"+ - "e\u0000\u0000\u01ce\u01cf\u0005x\u0000\u0000\u01cf\u01d0\u0005p\u0000"+ - "\u0000\u01d0\u01d1\u0005o\u0000\u0000\u01d1\u01d2\u0005r\u0000\u0000\u01d2"+ - "\u01d3\u0005t\u0000\u0000\u01d3T\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005"+ - "_\u0000\u0000\u01d5\u01d6\u0005_\u0000\u0000\u01d6\u01d7\u0005a\u0000"+ - "\u0000\u01d7\u01d8\u0005l\u0000\u0000\u01d8\u01d9\u0005i\u0000\u0000\u01d9"+ - "\u01da\u0005g\u0000\u0000\u01da\u01db\u0005n\u0000\u0000\u01dbV\u0001"+ - "\u0000\u0000\u0000\u01dc\u01dd\u0005i\u0000\u0000\u01dd\u01de\u0005n\u0000"+ - "\u0000\u01de\u01df\u0005l\u0000\u0000\u01df\u01e0\u0005i\u0000\u0000\u01e0"+ - "\u01e1\u0005n\u0000\u0000\u01e1\u01e2\u0005e\u0000\u0000\u01e2X\u0001"+ - "\u0000\u0000\u0000\u01e3\u01e4\u0005v\u0000\u0000\u01e4\u01e5\u0005o\u0000"+ - "\u0000\u01e5\u01e6\u0005l\u0000\u0000\u01e6\u01e7\u0005a\u0000\u0000\u01e7"+ - "\u01e8\u0005t\u0000\u0000\u01e8\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005"+ - "l\u0000\u0000\u01ea\u01eb\u0005e\u0000\u0000\u01ebZ\u0001\u0000\u0000"+ - "\u0000\u01ec\u01ed\u0005s\u0000\u0000\u01ed\u01ee\u0005t\u0000\u0000\u01ee"+ - "\u01ef\u0005a\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0\u01f1\u0005"+ - "i\u0000\u0000\u01f1\u01f2\u0005c\u0000\u0000\u01f2\\\u0001\u0000\u0000"+ - "\u0000\u01f3\u01f4\u0005_\u0000\u0000\u01f4\u01f5\u0005_\u0000\u0000\u01f5"+ - "\u01f6\u0005i\u0000\u0000\u01f6\u01f7\u0005n\u0000\u0000\u01f7\u01f8\u0005"+ - "t\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9\u01fa\u0005r\u0000"+ - "\u0000\u01fa\u01fb\u0005r\u0000\u0000\u01fb\u01fc\u0005u\u0000\u0000\u01fc"+ - "\u01fd\u0005p\u0000\u0000\u01fd\u01fe\u0005t\u0000\u0000\u01fe^\u0001"+ - "\u0000\u0000\u0000\u01ff\u0200\u0005r\u0000\u0000\u0200\u0201\u0005e\u0000"+ - "\u0000\u0201\u0202\u0005g\u0000\u0000\u0202\u0203\u0005i\u0000\u0000\u0203"+ - "\u0204\u0005s\u0000\u0000\u0204\u0205\u0005t\u0000\u0000\u0205\u0206\u0005"+ - "e\u0000\u0000\u0206\u0207\u0005r\u0000\u0000\u0207`\u0001\u0000\u0000"+ - "\u0000\u0208\u0209\u0005_\u0000\u0000\u0209\u020a\u0005_\u0000\u0000\u020a"+ - "\u020b\u0005z\u0000\u0000\u020b\u020c\u0005p\u0000\u0000\u020c\u020d\u0005"+ - "_\u0000\u0000\u020d\u020e\u0005r\u0000\u0000\u020e\u020f\u0005e\u0000"+ - "\u0000\u020f\u0210\u0005s\u0000\u0000\u0210\u0211\u0005e\u0000\u0000\u0211"+ - "\u0212\u0005r\u0000\u0000\u0212\u0213\u0005v\u0000\u0000\u0213\u0214\u0005"+ - "e\u0000\u0000\u0214b\u0001\u0000\u0000\u0000\u0215\u0216\u0005_\u0000"+ - "\u0000\u0216\u0217\u0005_\u0000\u0000\u0217\u0218\u0005a\u0000\u0000\u0218"+ - "\u0219\u0005d\u0000\u0000\u0219\u021a\u0005d\u0000\u0000\u021a\u021b\u0005"+ - "r\u0000\u0000\u021b\u021c\u0005e\u0000\u0000\u021c\u021d\u0005s\u0000"+ - "\u0000\u021d\u021e\u0005s\u0000\u0000\u021ed\u0001\u0000\u0000\u0000\u021f"+ - "\u0220\u0005_\u0000\u0000\u0220\u0221\u0005_\u0000\u0000\u0221\u0222\u0005"+ - "z\u0000\u0000\u0222\u0223\u0005p\u0000\u0000\u0223f\u0001\u0000\u0000"+ - "\u0000\u0224\u0225\u0005_\u0000\u0000\u0225\u0226\u0005_\u0000\u0000\u0226"+ - "\u0227\u0005m\u0000\u0000\u0227\u0228\u0005e\u0000\u0000\u0228\u0229\u0005"+ - "m\u0000\u0000\u0229h\u0001\u0000\u0000\u0000\u022a\u022b\u0005_\u0000"+ - "\u0000\u022b\u022c\u0005_\u0000\u0000\u022c\u022d\u0005f\u0000\u0000\u022d"+ - "\u022e\u0005a\u0000\u0000\u022e\u022f\u0005r\u0000\u0000\u022fj\u0001"+ - "\u0000\u0000\u0000\u0230\u0231\u0005_\u0000\u0000\u0231\u0232\u0005_\u0000"+ - "\u0000\u0232\u0233\u0005s\u0000\u0000\u0233\u0234\u0005s\u0000\u0000\u0234"+ - "\u0235\u0005a\u0000\u0000\u0235l\u0001\u0000\u0000\u0000\u0236\u0237\u0005"+ - "_\u0000\u0000\u0237\u0238\u0005_\u0000\u0000\u0238\u0239\u0005m\u0000"+ - "\u0000\u0239\u023a\u0005a\u0000\u0000\u023an\u0001\u0000\u0000\u0000\u023b"+ - "\u023c\u0005_\u0000\u0000\u023c\u023d\u0005_\u0000\u0000\u023d\u023e\u0005"+ - "i\u0000\u0000\u023e\u023f\u0005n\u0000\u0000\u023f\u0240\u0005t\u0000"+ - "\u0000\u0240\u0241\u0005r\u0000\u0000\u0241\u0242\u0005i\u0000\u0000\u0242"+ - "\u0243\u0005n\u0000\u0000\u0243\u0244\u0005s\u0000\u0000\u0244\u0245\u0005"+ - "i\u0000\u0000\u0245\u0246\u0005c\u0000\u0000\u0246p\u0001\u0000\u0000"+ - "\u0000\u0247\u0248\u0005_\u0000\u0000\u0248\u0249\u0005_\u0000\u0000\u0249"+ - "\u024a\u0005s\u0000\u0000\u024a\u024b\u0005t\u0000\u0000\u024b\u024c\u0005"+ - "a\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d\u024e\u0005k\u0000"+ - "\u0000\u024e\u024f\u0005c\u0000\u0000\u024f\u0250\u0005a\u0000\u0000\u0250"+ - "\u0251\u0005l\u0000\u0000\u0251\u0274\u0005l\u0000\u0000\u0252\u0253\u0005"+ - "_\u0000\u0000\u0253\u0254\u0005_\u0000\u0000\u0254\u0255\u0005p\u0000"+ - "\u0000\u0255\u0256\u0005h\u0000\u0000\u0256\u0257\u0005i\u0000\u0000\u0257"+ - "\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259\u025a\u0005"+ - "l\u0000\u0000\u025a\u0274\u0005l\u0000\u0000\u025b\u025c\u0005_\u0000"+ - "\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005v\u0000\u0000\u025e"+ - "\u025f\u0005a\u0000\u0000\u025f\u0260\u0005r\u0000\u0000\u0260\u0261\u0005"+ - "c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005l\u0000"+ - "\u0000\u0263\u0274\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000\u0000\u0265"+ - "\u0266\u0005_\u0000\u0000\u0266\u0267\u0005i\u0000\u0000\u0267\u0268\u0005"+ - "n\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269\u026a\u0005r\u0000"+ - "\u0000\u026a\u026b\u0005i\u0000\u0000\u026b\u026c\u0005n\u0000\u0000\u026c"+ - "\u026d\u0005s\u0000\u0000\u026d\u026e\u0005i\u0000\u0000\u026e\u026f\u0005"+ - "c\u0000\u0000\u026f\u0270\u0005c\u0000\u0000\u0270\u0271\u0005a\u0000"+ - "\u0000\u0271\u0272\u0005l\u0000\u0000\u0272\u0274\u0005l\u0000\u0000\u0273"+ - "\u0247\u0001\u0000\u0000\u0000\u0273\u0252\u0001\u0000\u0000\u0000\u0273"+ - "\u025b\u0001\u0000\u0000\u0000\u0273\u0264\u0001\u0000\u0000\u0000\u0274"+ - "r\u0001\u0000\u0000\u0000\u0275\u0276\u0005i\u0000\u0000\u0276\u0277\u0005"+ - "f\u0000\u0000\u0277t\u0001\u0000\u0000\u0000\u0278\u0279\u0005e\u0000"+ - "\u0000\u0279\u027a\u0005l\u0000\u0000\u027a\u027b\u0005s\u0000\u0000\u027b"+ - "\u027c\u0005e\u0000\u0000\u027cv\u0001\u0000\u0000\u0000\u027d\u027e\u0005"+ - "w\u0000\u0000\u027e\u027f\u0005h\u0000\u0000\u027f\u0280\u0005i\u0000"+ - "\u0000\u0280\u0281\u0005l\u0000\u0000\u0281\u0282\u0005e\u0000\u0000\u0282"+ - "x\u0001\u0000\u0000\u0000\u0283\u0284\u0005d\u0000\u0000\u0284\u0285\u0005"+ - "o\u0000\u0000\u0285z\u0001\u0000\u0000\u0000\u0286\u0287\u0005f\u0000"+ - "\u0000\u0287\u0288\u0005o\u0000\u0000\u0288\u0289\u0005r\u0000\u0000\u0289"+ - "|\u0001\u0000\u0000\u0000\u028a\u028b\u0005s\u0000\u0000\u028b\u028c\u0005"+ - "w\u0000\u0000\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005t\u0000"+ - "\u0000\u028e\u028f\u0005c\u0000\u0000\u028f\u0290\u0005h\u0000\u0000\u0290"+ - "~\u0001\u0000\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292\u0293\u0005"+ - "e\u0000\u0000\u0293\u0294\u0005t\u0000\u0000\u0294\u0295\u0005u\u0000"+ - "\u0000\u0295\u0296\u0005r\u0000\u0000\u0296\u0297\u0005n\u0000\u0000\u0297"+ - "\u0080\u0001\u0000\u0000\u0000\u0298\u0299\u0005b\u0000\u0000\u0299\u029a"+ - "\u0005r\u0000\u0000\u029a\u029b\u0005e\u0000\u0000\u029b\u029c\u0005a"+ - "\u0000\u0000\u029c\u029d\u0005k\u0000\u0000\u029d\u0082\u0001\u0000\u0000"+ - "\u0000\u029e\u029f\u0005c\u0000\u0000\u029f\u02a0\u0005o\u0000\u0000\u02a0"+ - "\u02a1\u0005n\u0000\u0000\u02a1\u02a2\u0005t\u0000\u0000\u02a2\u02a3\u0005"+ - "i\u0000\u0000\u02a3\u02a4\u0005n\u0000\u0000\u02a4\u02a5\u0005u\u0000"+ - "\u0000\u02a5\u02a6\u0005e\u0000\u0000\u02a6\u0084\u0001\u0000\u0000\u0000"+ - "\u02a7\u02a8\u0005g\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9\u02aa"+ - "\u0005t\u0000\u0000\u02aa\u02ab\u0005o\u0000\u0000\u02ab\u0086\u0001\u0000"+ - "\u0000\u0000\u02ac\u02ad\u0005a\u0000\u0000\u02ad\u02ae\u0005s\u0000\u0000"+ - "\u02ae\u02af\u0005m\u0000\u0000\u02af\u02b0\u0001\u0000\u0000\u0000\u02b0"+ - "\u02b1\u0006B\u0001\u0000\u02b1\u0088\u0001\u0000\u0000\u0000\u02b2\u02b3"+ - "\u0005d\u0000\u0000\u02b3\u02b4\u0005e\u0000\u0000\u02b4\u02b5\u0005f"+ - "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005u\u0000\u0000"+ - "\u02b7\u02b8\u0005l\u0000\u0000\u02b8\u02b9\u0005t\u0000\u0000\u02b9\u008a"+ - "\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005c\u0000\u0000\u02bb\u02bc\u0005"+ - "a\u0000\u0000\u02bc\u02bd\u0005s\u0000\u0000\u02bd\u02be\u0005e\u0000"+ - "\u0000\u02be\u008c\u0001\u0000\u0000\u0000\u02bf\u02c0\u0005s\u0000\u0000"+ - "\u02c0\u02c1\u0005t\u0000\u0000\u02c1\u02c2\u0005r\u0000\u0000\u02c2\u02c3"+ - "\u0005u\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005t"+ - "\u0000\u0000\u02c5\u008e\u0001\u0000\u0000\u0000\u02c6\u02c7\u0005u\u0000"+ - "\u0000\u02c7\u02c8\u0005n\u0000\u0000\u02c8\u02c9\u0005i\u0000\u0000\u02c9"+ - "\u02ca\u0005o\u0000\u0000\u02ca\u02cb\u0005n\u0000\u0000\u02cb\u0090\u0001"+ - "\u0000\u0000\u0000\u02cc\u02cd\u0005e\u0000\u0000\u02cd\u02ce\u0005n\u0000"+ - "\u0000\u02ce\u02cf\u0005u\u0000\u0000\u02cf\u02d0\u0005m\u0000\u0000\u02d0"+ - "\u0092\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005s\u0000\u0000\u02d2\u02d3"+ - "\u0005i\u0000\u0000\u02d3\u02d4\u0005z\u0000\u0000\u02d4\u02d5\u0005e"+ - "\u0000\u0000\u02d5\u02d6\u0005o\u0000\u0000\u02d6\u02d7\u0005f\u0000\u0000"+ - "\u02d7\u0094\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005t\u0000\u0000\u02d9"+ - "\u02da\u0005y\u0000\u0000\u02da\u02db\u0005p\u0000\u0000\u02db\u02dc\u0005"+ - "e\u0000\u0000\u02dc\u02dd\u0005i\u0000\u0000\u02dd\u02de\u0005d\u0000"+ - "\u0000\u02de\u0096\u0001\u0000\u0000\u0000\u02df\u02e0\u0005d\u0000\u0000"+ - "\u02e0\u02e1\u0005e\u0000\u0000\u02e1\u02e2\u0005f\u0000\u0000\u02e2\u02e3"+ - "\u0005i\u0000\u0000\u02e3\u02e4\u0005n\u0000\u0000\u02e4\u02e5\u0005e"+ - "\u0000\u0000\u02e5\u02e6\u0005d\u0000\u0000\u02e6\u0098\u0001\u0000\u0000"+ - "\u0000\u02e7\u02e8\u0005k\u0000\u0000\u02e8\u02e9\u0005i\u0000\u0000\u02e9"+ - "\u02ea\u0005c\u0000\u0000\u02ea\u02eb\u0005k\u0000\u0000\u02eb\u02ec\u0005"+ - "a\u0000\u0000\u02ec\u02ed\u0005s\u0000\u0000\u02ed\u02ee\u0005m\u0000"+ - "\u0000\u02ee\u009a\u0001\u0000\u0000\u0000\u02ef\u02f0\u0005!\u0000\u0000"+ - "\u02f0\u009c\u0001\u0000\u0000\u0000\u02f1\u02f2\u0005s\u0000\u0000\u02f2"+ - "\u02f3\u0005i\u0000\u0000\u02f3\u02f4\u0005g\u0000\u0000\u02f4\u02f5\u0005"+ - "n\u0000\u0000\u02f5\u02f6\u0005e\u0000\u0000\u02f6\u0325\u0005d\u0000"+ - "\u0000\u02f7\u02f8\u0005u\u0000\u0000\u02f8\u02f9\u0005n\u0000\u0000\u02f9"+ - "\u02fa\u0005s\u0000\u0000\u02fa\u02fb\u0005i\u0000\u0000\u02fb\u02fc\u0005"+ - "g\u0000\u0000\u02fc\u02fd\u0005n\u0000\u0000\u02fd\u02fe\u0005e\u0000"+ - "\u0000\u02fe\u0325\u0005d\u0000\u0000\u02ff\u0300\u0005b\u0000\u0000\u0300"+ - "\u0301\u0005y\u0000\u0000\u0301\u0302\u0005t\u0000\u0000\u0302\u0325\u0005"+ - "e\u0000\u0000\u0303\u0304\u0005w\u0000\u0000\u0304\u0305\u0005o\u0000"+ - "\u0000\u0305\u0306\u0005r\u0000\u0000\u0306\u0325\u0005d\u0000\u0000\u0307"+ - "\u0308\u0005d\u0000\u0000\u0308\u0309\u0005w\u0000\u0000\u0309\u030a\u0005"+ - "o\u0000\u0000\u030a\u030b\u0005r\u0000\u0000\u030b\u0325\u0005d\u0000"+ - "\u0000\u030c\u030d\u0005b\u0000\u0000\u030d\u030e\u0005o\u0000\u0000\u030e"+ - "\u030f\u0005o\u0000\u0000\u030f\u0325\u0005l\u0000\u0000\u0310\u0311\u0005"+ - "c\u0000\u0000\u0311\u0312\u0005h\u0000\u0000\u0312\u0313\u0005a\u0000"+ - "\u0000\u0313\u0325\u0005r\u0000\u0000\u0314\u0315\u0005s\u0000\u0000\u0315"+ - "\u0316\u0005h\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317\u0318\u0005"+ - "r\u0000\u0000\u0318\u0325\u0005t\u0000\u0000\u0319\u031a\u0005i\u0000"+ - "\u0000\u031a\u031b\u0005n\u0000\u0000\u031b\u0325\u0005t\u0000\u0000\u031c"+ - "\u031d\u0005l\u0000\u0000\u031d\u031e\u0005o\u0000\u0000\u031e\u031f\u0005"+ - "n\u0000\u0000\u031f\u0325\u0005g\u0000\u0000\u0320\u0321\u0005v\u0000"+ - "\u0000\u0321\u0322\u0005o\u0000\u0000\u0322\u0323\u0005i\u0000\u0000\u0323"+ - "\u0325\u0005d\u0000\u0000\u0324\u02f1\u0001\u0000\u0000\u0000\u0324\u02f7"+ - "\u0001\u0000\u0000\u0000\u0324\u02ff\u0001\u0000\u0000\u0000\u0324\u0303"+ - "\u0001\u0000\u0000\u0000\u0324\u0307\u0001\u0000\u0000\u0000\u0324\u030c"+ - "\u0001\u0000\u0000\u0000\u0324\u0310\u0001\u0000\u0000\u0000\u0324\u0314"+ - "\u0001\u0000\u0000\u0000\u0324\u0319\u0001\u0000\u0000\u0000\u0324\u031c"+ - "\u0001\u0000\u0000\u0000\u0324\u0320\u0001\u0000\u0000\u0000\u0325\u009e"+ - "\u0001\u0000\u0000\u0000\u0326\u0327\u0005t\u0000\u0000\u0327\u0328\u0005"+ - "r\u0000\u0000\u0328\u0329\u0005u\u0000\u0000\u0329\u0330\u0005e\u0000"+ - "\u0000\u032a\u032b\u0005f\u0000\u0000\u032b\u032c\u0005a\u0000\u0000\u032c"+ - "\u032d\u0005l\u0000\u0000\u032d\u032e\u0005s\u0000\u0000\u032e\u0330\u0005"+ - "e\u0000\u0000\u032f\u0326\u0001\u0000\u0000\u0000\u032f\u032a\u0001\u0000"+ - "\u0000\u0000\u0330\u00a0\u0001\u0000\u0000\u0000\u0331\u0332\u0005{\u0000"+ - "\u0000\u0332\u0333\u0005{\u0000\u0000\u0333\u0337\u0001\u0000\u0000\u0000"+ - "\u0334\u0336\t\u0000\u0000\u0000\u0335\u0334\u0001\u0000\u0000\u0000\u0336"+ - "\u0339\u0001\u0000\u0000\u0000\u0337\u0338\u0001\u0000\u0000\u0000\u0337"+ - "\u0335\u0001\u0000\u0000\u0000\u0338\u033a\u0001\u0000\u0000\u0000\u0339"+ - "\u0337\u0001\u0000\u0000\u0000\u033a\u033b\u0005}\u0000\u0000\u033b\u033c"+ - "\u0005}\u0000\u0000\u033c\u00a2\u0001\u0000\u0000\u0000\u033d\u033e\u0005"+ - "#\u0000\u0000\u033e\u033f\u0005i\u0000\u0000\u033f\u0340\u0005m\u0000"+ - "\u0000\u0340\u0341\u0005p\u0000\u0000\u0341\u0342\u0005o\u0000\u0000\u0342"+ - "\u0343\u0005r\u0000\u0000\u0343\u0344\u0005t\u0000\u0000\u0344\u0345\u0001"+ - "\u0000\u0000\u0000\u0345\u0346\u0006P\u0002\u0000\u0346\u00a4\u0001\u0000"+ - "\u0000\u0000\u0347\u0348\u0005#\u0000\u0000\u0348\u0349\u0005i\u0000\u0000"+ - "\u0349\u034a\u0005n\u0000\u0000\u034a\u034b\u0005c\u0000\u0000\u034b\u034c"+ - "\u0005l\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005d"+ - "\u0000\u0000\u034e\u034f\u0005e\u0000\u0000\u034f\u0350\u0001\u0000\u0000"+ - "\u0000\u0350\u0351\u0006Q\u0003\u0000\u0351\u00a6\u0001\u0000\u0000\u0000"+ - "\u0352\u0353\u0005#\u0000\u0000\u0353\u0354\u0005p\u0000\u0000\u0354\u0355"+ - "\u0005r\u0000\u0000\u0355\u0356\u0005a\u0000\u0000\u0356\u0357\u0005g"+ - "\u0000\u0000\u0357\u0358\u0005m\u0000\u0000\u0358\u0359\u0005a\u0000\u0000"+ - "\u0359\u00a8\u0001\u0000\u0000\u0000\u035a\u035b\u0005#\u0000\u0000\u035b"+ - "\u035c\u0005d\u0000\u0000\u035c\u035d\u0005e\u0000\u0000\u035d\u035e\u0005"+ - "f\u0000\u0000\u035e\u035f\u0005i\u0000\u0000\u035f\u0360\u0005n\u0000"+ - "\u0000\u0360\u0361\u0005e\u0000\u0000\u0361\u00aa\u0001\u0000\u0000\u0000"+ - "\u0362\u0363\u0005\\\u0000\u0000\u0363\u0368\u0005\n\u0000\u0000\u0364"+ - "\u0365\u0005\\\u0000\u0000\u0365\u0366\u0005\r\u0000\u0000\u0366\u0368"+ - "\u0005\n\u0000\u0000\u0367\u0362\u0001\u0000\u0000\u0000\u0367\u0364\u0001"+ - "\u0000\u0000\u0000\u0368\u00ac\u0001\u0000\u0000\u0000\u0369\u036a\u0005"+ - "#\u0000\u0000\u036a\u036b\u0005u\u0000\u0000\u036b\u036c\u0005n\u0000"+ - "\u0000\u036c\u036d\u0005d\u0000\u0000\u036d\u036e\u0005e\u0000\u0000\u036e"+ - "\u036f\u0005f\u0000\u0000\u036f\u00ae\u0001\u0000\u0000\u0000\u0370\u0371"+ - "\u0005#\u0000\u0000\u0371\u0372\u0005i\u0000\u0000\u0372\u0373\u0005f"+ - "\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u0375\u0005e\u0000\u0000"+ - "\u0375\u0376\u0005f\u0000\u0000\u0376\u00b0\u0001\u0000\u0000\u0000\u0377"+ - "\u0378\u0005#\u0000\u0000\u0378\u0379\u0005i\u0000\u0000\u0379\u037a\u0005"+ - "f\u0000\u0000\u037a\u037b\u0005n\u0000\u0000\u037b\u037c\u0005d\u0000"+ - "\u0000\u037c\u037d\u0005e\u0000\u0000\u037d\u037e\u0005f\u0000\u0000\u037e"+ - "\u00b2\u0001\u0000\u0000\u0000\u037f\u0380\u0005#\u0000\u0000\u0380\u0381"+ - "\u0005i\u0000\u0000\u0381\u0382\u0005f\u0000\u0000\u0382\u00b4\u0001\u0000"+ - "\u0000\u0000\u0383\u0384\u0005#\u0000\u0000\u0384\u0385\u0005e\u0000\u0000"+ - "\u0385\u0386\u0005l\u0000\u0000\u0386\u0387\u0005i\u0000\u0000\u0387\u0388"+ - "\u0005f\u0000\u0000\u0388\u00b6\u0001\u0000\u0000\u0000\u0389\u038a\u0005"+ - "#\u0000\u0000\u038a\u038b\u0005e\u0000\u0000\u038b\u038c\u0005l\u0000"+ - "\u0000\u038c\u038d\u0005s\u0000\u0000\u038d\u038e\u0005e\u0000\u0000\u038e"+ - "\u00b8\u0001\u0000\u0000\u0000\u038f\u0390\u0005#\u0000\u0000\u0390\u0391"+ - "\u0005e\u0000\u0000\u0391\u0392\u0005n\u0000\u0000\u0392\u0393\u0005d"+ - "\u0000\u0000\u0393\u0394\u0005i\u0000\u0000\u0394\u0395\u0005f\u0000\u0000"+ - "\u0395\u00ba\u0001\u0000\u0000\u0000\u0396\u0397\u0005#\u0000\u0000\u0397"+ - "\u0398\u0005e\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399\u039a\u0005"+ - "r\u0000\u0000\u039a\u039b\u0005o\u0000\u0000\u039b\u039c\u0005r\u0000"+ - "\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005#\u0000\u0000"+ - "\u039e\u039f\u0003\u00d9k\u0000\u039f\u00be\u0001\u0000\u0000\u0000\u03a0"+ - "\u03a1\u0005#\u0000\u0000\u03a1\u03a2\u0003\u00d9k\u0000\u03a2\u00c0\u0001"+ - "\u0000\u0000\u0000\u03a3\u03a6\u0003\u00c3`\u0000\u03a4\u03a6\u0003\u00cb"+ - "d\u0000\u03a5\u03a3\u0001\u0000\u0000\u0000\u03a5\u03a4\u0001\u0000\u0000"+ - "\u0000\u03a6\u00c2\u0001\u0000\u0000\u0000\u03a7\u03ab\u0003\u00c5a\u0000"+ - "\u03a8\u03ab\u0003\u00c7b\u0000\u03a9\u03ab\u0003\u00c9c\u0000\u03aa\u03a7"+ - "\u0001\u0000\u0000\u0000\u03aa\u03a8\u0001\u0000\u0000\u0000\u03aa\u03a9"+ - "\u0001\u0000\u0000\u0000\u03ab\u00c4\u0001\u0000\u0000\u0000\u03ac\u03b2"+ - "\u0005%\u0000\u0000\u03ad\u03ae\u00050\u0000\u0000\u03ae\u03b2\u0005b"+ - "\u0000\u0000\u03af\u03b0\u00050\u0000\u0000\u03b0\u03b2\u0005B\u0000\u0000"+ - "\u03b1\u03ac\u0001\u0000\u0000\u0000\u03b1\u03ad\u0001\u0000\u0000\u0000"+ - "\u03b1\u03af\u0001\u0000\u0000\u0000\u03b2\u03b6\u0001\u0000\u0000\u0000"+ - "\u03b3\u03b5\u0003\u00d3h\u0000\u03b4\u03b3\u0001\u0000\u0000\u0000\u03b5"+ - "\u03b8\u0001\u0000\u0000\u0000\u03b6\u03b4\u0001\u0000\u0000\u0000\u03b6"+ - "\u03b7\u0001\u0000\u0000\u0000\u03b7\u03b9\u0001\u0000\u0000\u0000\u03b8"+ - "\u03b6\u0001\u0000\u0000\u0000\u03b9\u03bb\u0005.\u0000\u0000\u03ba\u03bc"+ - "\u0003\u00d3h\u0000\u03bb\u03ba\u0001\u0000\u0000\u0000\u03bc\u03bd\u0001"+ - "\u0000\u0000\u0000\u03bd\u03bb\u0001\u0000\u0000\u0000\u03bd\u03be\u0001"+ - "\u0000\u0000\u0000\u03be\u00c6\u0001\u0000\u0000\u0000\u03bf\u03c1\u0003"+ - "\u00d5i\u0000\u03c0\u03bf\u0001\u0000\u0000\u0000\u03c1\u03c4\u0001\u0000"+ - "\u0000\u0000\u03c2\u03c0\u0001\u0000\u0000\u0000\u03c2\u03c3\u0001\u0000"+ - "\u0000\u0000\u03c3\u03c5\u0001\u0000\u0000\u0000\u03c4\u03c2\u0001\u0000"+ - "\u0000\u0000\u03c5\u03c7\u0005.\u0000\u0000\u03c6\u03c8\u0003\u00d5i\u0000"+ - "\u03c7\u03c6\u0001\u0000\u0000\u0000\u03c8\u03c9\u0001\u0000\u0000\u0000"+ - "\u03c9\u03c7\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001\u0000\u0000\u0000"+ - "\u03ca\u00c8\u0001\u0000\u0000\u0000\u03cb\u03d1\u0005$\u0000\u0000\u03cc"+ - "\u03cd\u00050\u0000\u0000\u03cd\u03d1\u0005x\u0000\u0000\u03ce\u03cf\u0005"+ - "0\u0000\u0000\u03cf\u03d1\u0005X\u0000\u0000\u03d0\u03cb\u0001\u0000\u0000"+ - "\u0000\u03d0\u03cc\u0001\u0000\u0000\u0000\u03d0\u03ce\u0001\u0000\u0000"+ - "\u0000\u03d1\u03d5\u0001\u0000\u0000\u0000\u03d2\u03d4\u0003\u00d7j\u0000"+ - "\u03d3\u03d2\u0001\u0000\u0000\u0000\u03d4\u03d7\u0001\u0000\u0000\u0000"+ - "\u03d5\u03d3\u0001\u0000\u0000\u0000\u03d5\u03d6\u0001\u0000\u0000\u0000"+ - "\u03d6\u03d8\u0001\u0000\u0000\u0000\u03d7\u03d5\u0001\u0000\u0000\u0000"+ - "\u03d8\u03da\u0005.\u0000\u0000\u03d9\u03db\u0003\u00d7j\u0000\u03da\u03d9"+ - "\u0001\u0000\u0000\u0000\u03db\u03dc\u0001\u0000\u0000\u0000\u03dc\u03da"+ - "\u0001\u0000\u0000\u0000\u03dc\u03dd\u0001\u0000\u0000\u0000\u03dd\u00ca"+ - "\u0001\u0000\u0000\u0000\u03de\u03e2\u0003\u00cff\u0000\u03df\u03e2\u0003"+ - "\u00d1g\u0000\u03e0\u03e2\u0003\u00cde\u0000\u03e1\u03de\u0001\u0000\u0000"+ - "\u0000\u03e1\u03df\u0001\u0000\u0000\u0000\u03e1\u03e0\u0001\u0000\u0000"+ - "\u0000\u03e2\u03e6\u0001\u0000\u0000\u0000\u03e3\u03e4\u0007\u0000\u0000"+ - "\u0000\u03e4\u03e7\u0007\u0001\u0000\u0000\u03e5\u03e7\u0007\u0002\u0000"+ - "\u0000\u03e6\u03e3\u0001\u0000\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ - "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u00cc\u0001\u0000\u0000"+ - "\u0000\u03e8\u03e9\u00050\u0000\u0000\u03e9\u03eb\u0007\u0003\u0000\u0000"+ - "\u03ea\u03ec\u0003\u00d3h\u0000\u03eb\u03ea\u0001\u0000\u0000\u0000\u03ec"+ - "\u03ed\u0001\u0000\u0000\u0000\u03ed\u03eb\u0001\u0000\u0000\u0000\u03ed"+ - "\u03ee\u0001\u0000\u0000\u0000\u03ee\u03f6\u0001\u0000\u0000\u0000\u03ef"+ - "\u03f1\u0005%\u0000\u0000\u03f0\u03f2\u0003\u00d3h\u0000\u03f1\u03f0\u0001"+ - "\u0000\u0000\u0000\u03f2\u03f3\u0001\u0000\u0000\u0000\u03f3\u03f1\u0001"+ - "\u0000\u0000\u0000\u03f3\u03f4\u0001\u0000\u0000\u0000\u03f4\u03f6\u0001"+ - "\u0000\u0000\u0000\u03f5\u03e8\u0001\u0000\u0000\u0000\u03f5\u03ef\u0001"+ - "\u0000\u0000\u0000\u03f6\u00ce\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003"+ - "\u00d5i\u0000\u03f8\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fa\u0001\u0000"+ - "\u0000\u0000\u03fa\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000"+ - "\u0000\u0000\u03fb\u00d0\u0001\u0000\u0000\u0000\u03fc\u0402\u0005$\u0000"+ - "\u0000\u03fd\u03fe\u00050\u0000\u0000\u03fe\u0402\u0005x\u0000\u0000\u03ff"+ - "\u0400\u00050\u0000\u0000\u0400\u0402\u0005X\u0000\u0000\u0401\u03fc\u0001"+ - "\u0000\u0000\u0000\u0401\u03fd\u0001\u0000\u0000\u0000\u0401\u03ff\u0001"+ - "\u0000\u0000\u0000\u0402\u0404\u0001\u0000\u0000\u0000\u0403\u0405\u0003"+ - "\u00d7j\u0000\u0404\u0403\u0001\u0000\u0000\u0000\u0405\u0406\u0001\u0000"+ - "\u0000\u0000\u0406\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ - "\u0000\u0000\u0407\u00d2\u0001\u0000\u0000\u0000\u0408\u0409\u0007\u0004"+ - "\u0000\u0000\u0409\u00d4\u0001\u0000\u0000\u0000\u040a\u040b\u0007\u0005"+ - "\u0000\u0000\u040b\u00d6\u0001\u0000\u0000\u0000\u040c\u040d\u0007\u0006"+ - "\u0000\u0000\u040d\u00d8\u0001\u0000\u0000\u0000\u040e\u0412\u0003\u00db"+ - "l\u0000\u040f\u0411\u0003\u00ddm\u0000\u0410\u040f\u0001\u0000\u0000\u0000"+ - "\u0411\u0414\u0001\u0000\u0000\u0000\u0412\u0410\u0001\u0000\u0000\u0000"+ - "\u0412\u0413\u0001\u0000\u0000\u0000\u0413\u0415\u0001\u0000\u0000\u0000"+ - "\u0414\u0412\u0001\u0000\u0000\u0000\u0415\u0416\u0006k\u0004\u0000\u0416"+ - "\u00da\u0001\u0000\u0000\u0000\u0417\u0418\u0007\u0007\u0000\u0000\u0418"+ - "\u00dc\u0001\u0000\u0000\u0000\u0419\u041a\u0007\b\u0000\u0000\u041a\u00de"+ - "\u0001\u0000\u0000\u0000\u041b\u0421\u0005\"\u0000\u0000\u041c\u041d\u0005"+ - "\\\u0000\u0000\u041d\u0420\u0005\"\u0000\u0000\u041e\u0420\b\t\u0000\u0000"+ - "\u041f\u041c\u0001\u0000\u0000\u0000\u041f\u041e\u0001\u0000\u0000\u0000"+ - "\u0420\u0423\u0001\u0000\u0000\u0000\u0421\u041f\u0001\u0000\u0000\u0000"+ - "\u0421\u0422\u0001\u0000\u0000\u0000\u0422\u0424\u0001\u0000\u0000\u0000"+ - "\u0423\u0421\u0001\u0000\u0000\u0000\u0424\u0426\u0005\"\u0000\u0000\u0425"+ - "\u0427\u0007\n\u0000\u0000\u0426\u0425\u0001\u0000\u0000\u0000\u0426\u0427"+ - "\u0001\u0000\u0000\u0000\u0427\u042c\u0001\u0000\u0000\u0000\u0428\u042a"+ - "\u0007\u000b\u0000\u0000\u0429\u042b\u0007\f\u0000\u0000\u042a\u0429\u0001"+ - "\u0000\u0000\u0000\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001"+ - "\u0000\u0000\u0000\u042c\u0428\u0001\u0000\u0000\u0000\u042c\u042d\u0001"+ - "\u0000\u0000\u0000\u042d\u042f\u0001\u0000\u0000\u0000\u042e\u0430\u0007"+ - "\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430\u0001\u0000"+ - "\u0000\u0000\u0430\u00e0\u0001\u0000\u0000\u0000\u0431\u0440\u0005\'\u0000"+ - "\u0000\u0432\u043d\u0005\\\u0000\u0000\u0433\u0435\u0007\r\u0000\u0000"+ - "\u0434\u0436\u0007\u0005\u0000\u0000\u0435\u0434\u0001\u0000\u0000\u0000"+ - "\u0435\u0436\u0001\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000"+ - "\u0437\u0439\u0007\u0005\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000"+ - "\u0438\u0439\u0001\u0000\u0000\u0000\u0439\u043e\u0001\u0000\u0000\u0000"+ - "\u043a\u043b\u0005x\u0000\u0000\u043b\u043c\u0007\u000e\u0000\u0000\u043c"+ - "\u043e\u0007\u000e\u0000\u0000\u043d\u0433\u0001\u0000\u0000\u0000\u043d"+ - "\u043a\u0001\u0000\u0000\u0000\u043e\u0441\u0001\u0000\u0000\u0000\u043f"+ - "\u0441\b\u000f\u0000\u0000\u0440\u0432\u0001\u0000\u0000\u0000\u0440\u043f"+ - "\u0001\u0000\u0000\u0000\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0443"+ - "\u0005\'\u0000\u0000\u0443\u00e2\u0001\u0000\u0000\u0000\u0444\u0446\u0007"+ - "\u0010\u0000\u0000\u0445\u0444\u0001\u0000\u0000\u0000\u0446\u0447\u0001"+ - "\u0000\u0000\u0000\u0447\u0445\u0001\u0000\u0000\u0000\u0447\u0448\u0001"+ - "\u0000\u0000\u0000\u0448\u0449\u0001\u0000\u0000\u0000\u0449\u044a\u0006"+ - "p\u0005\u0000\u044a\u00e4\u0001\u0000\u0000\u0000\u044b\u044c\u0005/\u0000"+ - "\u0000\u044c\u044d\u0005/\u0000\u0000\u044d\u0451\u0001\u0000\u0000\u0000"+ - "\u044e\u0450\b\u0011\u0000\u0000\u044f\u044e\u0001\u0000\u0000\u0000\u0450"+ - "\u0453\u0001\u0000\u0000\u0000\u0451\u044f\u0001\u0000\u0000\u0000\u0451"+ - "\u0452\u0001\u0000\u0000\u0000\u0452\u0454\u0001\u0000\u0000\u0000\u0453"+ - "\u0451\u0001\u0000\u0000\u0000\u0454\u0455\u0006q\u0006\u0000\u0455\u00e6"+ - "\u0001\u0000\u0000\u0000\u0456\u0457\u0005/\u0000\u0000\u0457\u0458\u0005"+ - "*\u0000\u0000\u0458\u045c\u0001\u0000\u0000\u0000\u0459\u045b\t\u0000"+ - "\u0000\u0000\u045a\u0459\u0001\u0000\u0000\u0000\u045b\u045e\u0001\u0000"+ - "\u0000\u0000\u045c\u045d\u0001\u0000\u0000\u0000\u045c\u045a\u0001\u0000"+ - "\u0000\u0000\u045d\u045f\u0001\u0000\u0000\u0000\u045e\u045c\u0001\u0000"+ - "\u0000\u0000\u045f\u0460\u0005*\u0000\u0000\u0460\u0461\u0005/\u0000\u0000"+ - "\u0461\u0462\u0001\u0000\u0000\u0000\u0462\u0463\u0006r\u0006\u0000\u0463"+ - "\u00e8\u0001\u0000\u0000\u0000\u0464\u0465\u0005.\u0000\u0000\u0465\u0466"+ - "\u0005b\u0000\u0000\u0466\u0467\u0005y\u0000\u0000\u0467\u0468\u0005t"+ - "\u0000\u0000\u0468\u0469\u0005e\u0000\u0000\u0469\u00ea\u0001\u0000\u0000"+ - "\u0000\u046a\u046b\u0005b\u0000\u0000\u046b\u046c\u0005r\u0000\u0000\u046c"+ - "\u06ca\u0005k\u0000\u0000\u046d\u046e\u0005o\u0000\u0000\u046e\u046f\u0005"+ - "r\u0000\u0000\u046f\u06ca\u0005a\u0000\u0000\u0470\u0471\u0005k\u0000"+ - "\u0000\u0471\u0472\u0005i\u0000\u0000\u0472\u06ca\u0005l\u0000\u0000\u0473"+ - "\u0474\u0005s\u0000\u0000\u0474\u0475\u0005l\u0000\u0000\u0475\u06ca\u0005"+ - "o\u0000\u0000\u0476\u0477\u0005n\u0000\u0000\u0477\u0478\u0005o\u0000"+ - "\u0000\u0478\u06ca\u0005p\u0000\u0000\u0479\u047a\u0005a\u0000\u0000\u047a"+ - "\u047b\u0005s\u0000\u0000\u047b\u06ca\u0005l\u0000\u0000\u047c\u047d\u0005"+ - "p\u0000\u0000\u047d\u047e\u0005h\u0000\u0000\u047e\u06ca\u0005p\u0000"+ - "\u0000\u047f\u0480\u0005a\u0000\u0000\u0480\u0481\u0005n\u0000\u0000\u0481"+ - "\u06ca\u0005c\u0000\u0000\u0482\u0483\u0005b\u0000\u0000\u0483\u0484\u0005"+ - "p\u0000\u0000\u0484\u06ca\u0005l\u0000\u0000\u0485\u0486\u0005c\u0000"+ - "\u0000\u0486\u0487\u0005l\u0000\u0000\u0487\u06ca\u0005c\u0000\u0000\u0488"+ - "\u0489\u0005j\u0000\u0000\u0489\u048a\u0005s\u0000\u0000\u048a\u06ca\u0005"+ - "r\u0000\u0000\u048b\u048c\u0005a\u0000\u0000\u048c\u048d\u0005n\u0000"+ - "\u0000\u048d\u06ca\u0005d\u0000\u0000\u048e\u048f\u0005r\u0000\u0000\u048f"+ - "\u0490\u0005l\u0000\u0000\u0490\u06ca\u0005a\u0000\u0000\u0491\u0492\u0005"+ - "b\u0000\u0000\u0492\u0493\u0005i\u0000\u0000\u0493\u06ca\u0005t\u0000"+ - "\u0000\u0494\u0495\u0005r\u0000\u0000\u0495\u0496\u0005o\u0000\u0000\u0496"+ - "\u06ca\u0005l\u0000\u0000\u0497\u0498\u0005p\u0000\u0000\u0498\u0499\u0005"+ - "l\u0000\u0000\u0499\u06ca\u0005a\u0000\u0000\u049a\u049b\u0005p\u0000"+ - "\u0000\u049b\u049c\u0005l\u0000\u0000\u049c\u06ca\u0005p\u0000\u0000\u049d"+ - "\u049e\u0005b\u0000\u0000\u049e\u049f\u0005m\u0000\u0000\u049f\u06ca\u0005"+ - "i\u0000\u0000\u04a0\u04a1\u0005s\u0000\u0000\u04a1\u04a2\u0005e\u0000"+ - "\u0000\u04a2\u06ca\u0005c\u0000\u0000\u04a3\u04a4\u0005r\u0000\u0000\u04a4"+ - "\u04a5\u0005t\u0000\u0000\u04a5\u06ca\u0005i\u0000\u0000\u04a6\u04a7\u0005"+ - "e\u0000\u0000\u04a7\u04a8\u0005o\u0000\u0000\u04a8\u06ca\u0005r\u0000"+ - "\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005r\u0000\u0000\u04ab"+ - "\u06ca\u0005e\u0000\u0000\u04ac\u04ad\u0005l\u0000\u0000\u04ad\u04ae\u0005"+ - "s\u0000\u0000\u04ae\u06ca\u0005r\u0000\u0000\u04af\u04b0\u0005p\u0000"+ - "\u0000\u04b0\u04b1\u0005h\u0000\u0000\u04b1\u06ca\u0005a\u0000\u0000\u04b2"+ - "\u04b3\u0005a\u0000\u0000\u04b3\u04b4\u0005l\u0000\u0000\u04b4\u06ca\u0005"+ - "r\u0000\u0000\u04b5\u04b6\u0005j\u0000\u0000\u04b6\u04b7\u0005m\u0000"+ - "\u0000\u04b7\u06ca\u0005p\u0000\u0000\u04b8\u04b9\u0005b\u0000\u0000\u04b9"+ - "\u04ba\u0005v\u0000\u0000\u04ba\u06ca\u0005c\u0000\u0000\u04bb\u04bc\u0005"+ - "c\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06ca\u0005i\u0000"+ - "\u0000\u04be\u04bf\u0005r\u0000\u0000\u04bf\u04c0\u0005t\u0000\u0000\u04c0"+ - "\u06ca\u0005s\u0000\u0000\u04c1\u04c2\u0005a\u0000\u0000\u04c2\u04c3\u0005"+ - "d\u0000\u0000\u04c3\u06ca\u0005c\u0000\u0000\u04c4\u04c5\u0005r\u0000"+ - "\u0000\u04c5\u04c6\u0005r\u0000\u0000\u04c6\u06ca\u0005a\u0000\u0000\u04c7"+ - "\u04c8\u0005b\u0000\u0000\u04c8\u04c9\u0005v\u0000\u0000\u04c9\u06ca\u0005"+ - "s\u0000\u0000\u04ca\u04cb\u0005s\u0000\u0000\u04cb\u04cc\u0005e\u0000"+ - "\u0000\u04cc\u06ca\u0005i\u0000\u0000\u04cd\u04ce\u0005s\u0000\u0000\u04ce"+ - "\u04cf\u0005a\u0000\u0000\u04cf\u06ca\u0005x\u0000\u0000\u04d0\u04d1\u0005"+ - "s\u0000\u0000\u04d1\u04d2\u0005t\u0000\u0000\u04d2\u06ca\u0005y\u0000"+ - "\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005t\u0000\u0000\u04d5"+ - "\u06ca\u0005a\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7\u04d8\u0005"+ - "t\u0000\u0000\u04d8\u06ca\u0005x\u0000\u0000\u04d9\u04da\u0005d\u0000"+ - "\u0000\u04da\u04db\u0005e\u0000\u0000\u04db\u06ca\u0005y\u0000\u0000\u04dc"+ - "\u04dd\u0005t\u0000\u0000\u04dd\u04de\u0005x\u0000\u0000\u04de\u06ca\u0005"+ - "a\u0000\u0000\u04df\u04e0\u0005x\u0000\u0000\u04e0\u04e1\u0005a\u0000"+ - "\u0000\u04e1\u06ca\u0005a\u0000\u0000\u04e2\u04e3\u0005b\u0000\u0000\u04e3"+ - "\u04e4\u0005c\u0000\u0000\u04e4\u06ca\u0005c\u0000\u0000\u04e5\u04e6\u0005"+ - "a\u0000\u0000\u04e6\u04e7\u0005h\u0000\u0000\u04e7\u06ca\u0005x\u0000"+ - "\u0000\u04e8\u04e9\u0005t\u0000\u0000\u04e9\u04ea\u0005y\u0000\u0000\u04ea"+ - "\u06ca\u0005a\u0000\u0000\u04eb\u04ec\u0005t\u0000\u0000\u04ec\u04ed\u0005"+ - "x\u0000\u0000\u04ed\u06ca\u0005s\u0000\u0000\u04ee\u04ef\u0005t\u0000"+ - "\u0000\u04ef\u04f0\u0005a\u0000\u0000\u04f0\u06ca\u0005s\u0000\u0000\u04f1"+ - "\u04f2\u0005s\u0000\u0000\u04f2\u04f3\u0005h\u0000\u0000\u04f3\u06ca\u0005"+ - "y\u0000\u0000\u04f4\u04f5\u0005s\u0000\u0000\u04f5\u04f6\u0005h\u0000"+ - "\u0000\u04f6\u06ca\u0005x\u0000\u0000\u04f7\u04f8\u0005l\u0000\u0000\u04f8"+ - "\u04f9\u0005d\u0000\u0000\u04f9\u06ca\u0005y\u0000\u0000\u04fa\u04fb\u0005"+ - "l\u0000\u0000\u04fb\u04fc\u0005d\u0000\u0000\u04fc\u06ca\u0005a\u0000"+ - "\u0000\u04fd\u04fe\u0005l\u0000\u0000\u04fe\u04ff\u0005d\u0000\u0000\u04ff"+ - "\u06ca\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501\u0502\u0005"+ - "a\u0000\u0000\u0502\u06ca\u0005x\u0000\u0000\u0503\u0504\u0005t\u0000"+ - "\u0000\u0504\u0505\u0005a\u0000\u0000\u0505\u06ca\u0005y\u0000\u0000\u0506"+ - "\u0507\u0005t\u0000\u0000\u0507\u0508\u0005a\u0000\u0000\u0508\u06ca\u0005"+ - "x\u0000\u0000\u0509\u050a\u0005b\u0000\u0000\u050a\u050b\u0005c\u0000"+ - "\u0000\u050b\u06ca\u0005s\u0000\u0000\u050c\u050d\u0005c\u0000\u0000\u050d"+ - "\u050e\u0005l\u0000\u0000\u050e\u06ca\u0005v\u0000\u0000\u050f\u0510\u0005"+ - "t\u0000\u0000\u0510\u0511\u0005s\u0000\u0000\u0511\u06ca\u0005x\u0000"+ - "\u0000\u0512\u0513\u0005l\u0000\u0000\u0513\u0514\u0005a\u0000\u0000\u0514"+ - "\u06ca\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516\u0517\u0005"+ - "p\u0000\u0000\u0517\u06ca\u0005y\u0000\u0000\u0518\u0519\u0005c\u0000"+ - "\u0000\u0519\u051a\u0005m\u0000\u0000\u051a\u06ca\u0005p\u0000\u0000\u051b"+ - "\u051c\u0005c\u0000\u0000\u051c\u051d\u0005p\u0000\u0000\u051d\u06ca\u0005"+ - "x\u0000\u0000\u051e\u051f\u0005d\u0000\u0000\u051f\u0520\u0005c\u0000"+ - "\u0000\u0520\u06ca\u0005p\u0000\u0000\u0521\u0522\u0005d\u0000\u0000\u0522"+ - "\u0523\u0005e\u0000\u0000\u0523\u06ca\u0005c\u0000\u0000\u0524\u0525\u0005"+ - "i\u0000\u0000\u0525\u0526\u0005n\u0000\u0000\u0526\u06ca\u0005c\u0000"+ - "\u0000\u0527\u0528\u0005a\u0000\u0000\u0528\u0529\u0005x\u0000\u0000\u0529"+ - "\u06ca\u0005s\u0000\u0000\u052a\u052b\u0005b\u0000\u0000\u052b\u052c\u0005"+ - "n\u0000\u0000\u052c\u06ca\u0005e\u0000\u0000\u052d\u052e\u0005c\u0000"+ - "\u0000\u052e\u052f\u0005l\u0000\u0000\u052f\u06ca\u0005d\u0000\u0000\u0530"+ - "\u0531\u0005s\u0000\u0000\u0531\u0532\u0005b\u0000\u0000\u0532\u06ca\u0005"+ - "c\u0000\u0000\u0533\u0534\u0005i\u0000\u0000\u0534\u0535\u0005s\u0000"+ - "\u0000\u0535\u06ca\u0005c\u0000\u0000\u0536\u0537\u0005i\u0000\u0000\u0537"+ - "\u0538\u0005n\u0000\u0000\u0538\u06ca\u0005x\u0000\u0000\u0539\u053a\u0005"+ - "b\u0000\u0000\u053a\u053b\u0005e\u0000\u0000\u053b\u06ca\u0005q\u0000"+ - "\u0000\u053c\u053d\u0005s\u0000\u0000\u053d\u053e\u0005e\u0000\u0000\u053e"+ - "\u06ca\u0005d\u0000\u0000\u053f\u0540\u0005d\u0000\u0000\u0540\u0541\u0005"+ - "e\u0000\u0000\u0541\u06ca\u0005x\u0000\u0000\u0542\u0543\u0005i\u0000"+ - "\u0000\u0543\u0544\u0005n\u0000\u0000\u0544\u06ca\u0005y\u0000\u0000\u0545"+ - "\u0546\u0005r\u0000\u0000\u0546\u0547\u0005o\u0000\u0000\u0547\u06ca\u0005"+ - "r\u0000\u0000\u0548\u0549\u0005b\u0000\u0000\u0549\u054a\u0005b\u0000"+ - "\u0000\u054a\u054b\u0005r\u0000\u0000\u054b\u06ca\u00050\u0000\u0000\u054c"+ - "\u054d\u0005b\u0000\u0000\u054d\u054e\u0005b\u0000\u0000\u054e\u054f\u0005"+ - "r\u0000\u0000\u054f\u06ca\u00051\u0000\u0000\u0550\u0551\u0005b\u0000"+ - "\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005r\u0000\u0000\u0553"+ - "\u06ca\u00052\u0000\u0000\u0554\u0555\u0005b\u0000\u0000\u0555\u0556\u0005"+ - "b\u0000\u0000\u0556\u0557\u0005r\u0000\u0000\u0557\u06ca\u00053\u0000"+ - "\u0000\u0558\u0559\u0005b\u0000\u0000\u0559\u055a\u0005b\u0000\u0000\u055a"+ - "\u055b\u0005r\u0000\u0000\u055b\u06ca\u00054\u0000\u0000\u055c\u055d\u0005"+ - "b\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005r\u0000"+ - "\u0000\u055f\u06ca\u00055\u0000\u0000\u0560\u0561\u0005b\u0000\u0000\u0561"+ - "\u0562\u0005b\u0000\u0000\u0562\u0563\u0005r\u0000\u0000\u0563\u06ca\u0005"+ - "6\u0000\u0000\u0564\u0565\u0005b\u0000\u0000\u0565\u0566\u0005b\u0000"+ - "\u0000\u0566\u0567\u0005r\u0000\u0000\u0567\u06ca\u00057\u0000\u0000\u0568"+ - "\u0569\u0005b\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a\u056b\u0005"+ - "s\u0000\u0000\u056b\u06ca\u00050\u0000\u0000\u056c\u056d\u0005b\u0000"+ - "\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005s\u0000\u0000\u056f"+ - "\u06ca\u00051\u0000\u0000\u0570\u0571\u0005b\u0000\u0000\u0571\u0572\u0005"+ - "b\u0000\u0000\u0572\u0573\u0005s\u0000\u0000\u0573\u06ca\u00052\u0000"+ - "\u0000\u0574\u0575\u0005b\u0000\u0000\u0575\u0576\u0005b\u0000\u0000\u0576"+ - "\u0577\u0005s\u0000\u0000\u0577\u06ca\u00053\u0000\u0000\u0578\u0579\u0005"+ - "b\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005s\u0000"+ - "\u0000\u057b\u06ca\u00054\u0000\u0000\u057c\u057d\u0005b\u0000\u0000\u057d"+ - "\u057e\u0005b\u0000\u0000\u057e\u057f\u0005s\u0000\u0000\u057f\u06ca\u0005"+ - "5\u0000\u0000\u0580\u0581\u0005b\u0000\u0000\u0581\u0582\u0005b\u0000"+ - "\u0000\u0582\u0583\u0005s\u0000\u0000\u0583\u06ca\u00056\u0000\u0000\u0584"+ - "\u0585\u0005b\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586\u0587\u0005"+ - "s\u0000\u0000\u0587\u06ca\u00057\u0000\u0000\u0588\u0589\u0005b\u0000"+ - "\u0000\u0589\u058a\u0005r\u0000\u0000\u058a\u06ca\u0005a\u0000\u0000\u058b"+ - "\u058c\u0005p\u0000\u0000\u058c\u058d\u0005h\u0000\u0000\u058d\u06ca\u0005"+ - "x\u0000\u0000\u058e\u058f\u0005p\u0000\u0000\u058f\u0590\u0005h\u0000"+ - "\u0000\u0590\u06ca\u0005y\u0000\u0000\u0591\u0592\u0005p\u0000\u0000\u0592"+ - "\u0593\u0005l\u0000\u0000\u0593\u06ca\u0005x\u0000\u0000\u0594\u0595\u0005"+ - "p\u0000\u0000\u0595\u0596\u0005l\u0000\u0000\u0596\u06ca\u0005y\u0000"+ - "\u0000\u0597\u0598\u0005r\u0000\u0000\u0598\u0599\u0005m\u0000\u0000\u0599"+ - "\u059a\u0005b\u0000\u0000\u059a\u06ca\u00050\u0000\u0000\u059b\u059c\u0005"+ - "r\u0000\u0000\u059c\u059d\u0005m\u0000\u0000\u059d\u059e\u0005b\u0000"+ - "\u0000\u059e\u06ca\u00051\u0000\u0000\u059f\u05a0\u0005r\u0000\u0000\u05a0"+ - "\u05a1\u0005m\u0000\u0000\u05a1\u05a2\u0005b\u0000\u0000\u05a2\u06ca\u0005"+ - "2\u0000\u0000\u05a3\u05a4\u0005r\u0000\u0000\u05a4\u05a5\u0005m\u0000"+ - "\u0000\u05a5\u05a6\u0005b\u0000\u0000\u05a6\u06ca\u00053\u0000\u0000\u05a7"+ - "\u05a8\u0005r\u0000\u0000\u05a8\u05a9\u0005m\u0000\u0000\u05a9\u05aa\u0005"+ - "b\u0000\u0000\u05aa\u06ca\u00054\u0000\u0000\u05ab\u05ac\u0005r\u0000"+ - "\u0000\u05ac\u05ad\u0005m\u0000\u0000\u05ad\u05ae\u0005b\u0000\u0000\u05ae"+ - "\u06ca\u00055\u0000\u0000\u05af\u05b0\u0005r\u0000\u0000\u05b0\u05b1\u0005"+ - "m\u0000\u0000\u05b1\u05b2\u0005b\u0000\u0000\u05b2\u06ca\u00056\u0000"+ - "\u0000\u05b3\u05b4\u0005r\u0000\u0000\u05b4\u05b5\u0005m\u0000\u0000\u05b5"+ - "\u05b6\u0005b\u0000\u0000\u05b6\u06ca\u00057\u0000\u0000\u05b7\u05b8\u0005"+ - "s\u0000\u0000\u05b8\u05b9\u0005m\u0000\u0000\u05b9\u05ba\u0005b\u0000"+ - "\u0000\u05ba\u06ca\u00050\u0000\u0000\u05bb\u05bc\u0005s\u0000\u0000\u05bc"+ - "\u05bd\u0005m\u0000\u0000\u05bd\u05be\u0005b\u0000\u0000\u05be\u06ca\u0005"+ - "1\u0000\u0000\u05bf\u05c0\u0005s\u0000\u0000\u05c0\u05c1\u0005m\u0000"+ - "\u0000\u05c1\u05c2\u0005b\u0000\u0000\u05c2\u06ca\u00052\u0000\u0000\u05c3"+ - "\u05c4\u0005s\u0000\u0000\u05c4\u05c5\u0005m\u0000\u0000\u05c5\u05c6\u0005"+ - "b\u0000\u0000\u05c6\u06ca\u00053\u0000\u0000\u05c7\u05c8\u0005s\u0000"+ - "\u0000\u05c8\u05c9\u0005m\u0000\u0000\u05c9\u05ca\u0005b\u0000\u0000\u05ca"+ - "\u06ca\u00054\u0000\u0000\u05cb\u05cc\u0005s\u0000\u0000\u05cc\u05cd\u0005"+ - "m\u0000\u0000\u05cd\u05ce\u0005b\u0000\u0000\u05ce\u06ca\u00055\u0000"+ - "\u0000\u05cf\u05d0\u0005s\u0000\u0000\u05d0\u05d1\u0005m\u0000\u0000\u05d1"+ - "\u05d2\u0005b\u0000\u0000\u05d2\u06ca\u00056\u0000\u0000\u05d3\u05d4\u0005"+ - "s\u0000\u0000\u05d4\u05d5\u0005m\u0000\u0000\u05d5\u05d6\u0005b\u0000"+ - "\u0000\u05d6\u06ca\u00057\u0000\u0000\u05d7\u05d8\u0005s\u0000\u0000\u05d8"+ - "\u05d9\u0005t\u0000\u0000\u05d9\u06ca\u0005p\u0000\u0000\u05da\u05db\u0005"+ - "s\u0000\u0000\u05db\u05dc\u0005t\u0000\u0000\u05dc\u06ca\u0005z\u0000"+ - "\u0000\u05dd\u05de\u0005t\u0000\u0000\u05de\u05df\u0005r\u0000\u0000\u05df"+ - "\u06ca\u0005b\u0000\u0000\u05e0\u05e1\u0005t\u0000\u0000\u05e1\u05e2\u0005"+ - "s\u0000\u0000\u05e2\u06ca\u0005b\u0000\u0000\u05e3\u05e4\u0005w\u0000"+ - "\u0000\u05e4\u05e5\u0005a\u0000\u0000\u05e5\u06ca\u0005i\u0000\u0000\u05e6"+ - "\u05e7\u0005c\u0000\u0000\u05e7\u05e8\u0005l\u0000\u0000\u05e8\u06ca\u0005"+ - "e\u0000\u0000\u05e9\u05ea\u0005s\u0000\u0000\u05ea\u05eb\u0005e\u0000"+ - "\u0000\u05eb\u06ca\u0005e\u0000\u0000\u05ec\u05ed\u0005t\u0000\u0000\u05ed"+ - "\u05ee\u0005s\u0000\u0000\u05ee\u06ca\u0005y\u0000\u0000\u05ef\u05f0\u0005"+ - "l\u0000\u0000\u05f0\u05f1\u0005b\u0000\u0000\u05f1\u05f2\u0005p\u0000"+ - "\u0000\u05f2\u06ca\u0005l\u0000\u0000\u05f3\u05f4\u0005i\u0000\u0000\u05f4"+ - "\u05f5\u0005n\u0000\u0000\u05f5\u06ca\u0005z\u0000\u0000\u05f6\u05f7\u0005"+ - "t\u0000\u0000\u05f7\u05f8\u0005y\u0000\u0000\u05f8\u06ca\u0005s\u0000"+ - "\u0000\u05f9\u05fa\u0005l\u0000\u0000\u05fa\u05fb\u0005b\u0000\u0000\u05fb"+ - "\u05fc\u0005m\u0000\u0000\u05fc\u06ca\u0005i\u0000\u0000\u05fd\u05fe\u0005"+ - "d\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff\u06ca\u0005z\u0000"+ - "\u0000\u0600\u0601\u0005n\u0000\u0000\u0601\u0602\u0005e\u0000\u0000\u0602"+ - "\u06ca\u0005g\u0000\u0000\u0603\u0604\u0005a\u0000\u0000\u0604\u0605\u0005"+ - "s\u0000\u0000\u0605\u06ca\u0005r\u0000\u0000\u0606\u0607\u0005t\u0000"+ - "\u0000\u0607\u0608\u0005a\u0000\u0000\u0608\u06ca\u0005z\u0000\u0000\u0609"+ - "\u060a\u0005l\u0000\u0000\u060a\u060b\u0005b\u0000\u0000\u060b\u060c\u0005"+ - "v\u0000\u0000\u060c\u06ca\u0005c\u0000\u0000\u060d\u060e\u0005t\u0000"+ - "\u0000\u060e\u060f\u0005a\u0000\u0000\u060f\u06ca\u0005b\u0000\u0000\u0610"+ - "\u0611\u0005m\u0000\u0000\u0611\u0612\u0005a\u0000\u0000\u0612\u06ca\u0005"+ - "p\u0000\u0000\u0613\u0614\u0005r\u0000\u0000\u0614\u0615\u0005t\u0000"+ - "\u0000\u0615\u06ca\u0005n\u0000\u0000\u0616\u0617\u0005l\u0000\u0000\u0617"+ - "\u0618\u0005b\u0000\u0000\u0618\u0619\u0005s\u0000\u0000\u0619\u06ca\u0005"+ - "r\u0000\u0000\u061a\u061b\u0005t\u0000\u0000\u061b\u061c\u0005z\u0000"+ - "\u0000\u061c\u06ca\u0005a\u0000\u0000\u061d\u061e\u0005l\u0000\u0000\u061e"+ - "\u061f\u0005b\u0000\u0000\u061f\u0620\u0005v\u0000\u0000\u0620\u06ca\u0005"+ - "s\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622\u0623\u0005b\u0000"+ - "\u0000\u0623\u06ca\u0005a\u0000\u0000\u0624\u0625\u0005l\u0000\u0000\u0625"+ - "\u0626\u0005b\u0000\u0000\u0626\u0627\u0005r\u0000\u0000\u0627\u06ca\u0005"+ - "a\u0000\u0000\u0628\u0629\u0005l\u0000\u0000\u0629\u062a\u0005b\u0000"+ - "\u0000\u062a\u062b\u0005c\u0000\u0000\u062b\u06ca\u0005c\u0000\u0000\u062c"+ - "\u062d\u0005l\u0000\u0000\u062d\u062e\u0005d\u0000\u0000\u062e\u06ca\u0005"+ - "z\u0000\u0000\u062f\u0630\u0005l\u0000\u0000\u0630\u0631\u0005b\u0000"+ - "\u0000\u0631\u0632\u0005c\u0000\u0000\u0632\u06ca\u0005s\u0000\u0000\u0633"+ - "\u0634\u0005c\u0000\u0000\u0634\u0635\u0005p\u0000\u0000\u0635\u06ca\u0005"+ - "z\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u0638\u0005e\u0000"+ - "\u0000\u0638\u06ca\u0005w\u0000\u0000\u0639\u063a\u0005a\u0000\u0000\u063a"+ - "\u063b\u0005s\u0000\u0000\u063b\u06ca\u0005w\u0000\u0000\u063c\u063d\u0005"+ - "l\u0000\u0000\u063d\u063e\u0005b\u0000\u0000\u063e\u063f\u0005n\u0000"+ - "\u0000\u063f\u06ca\u0005e\u0000\u0000\u0640\u0641\u0005p\u0000\u0000\u0641"+ - "\u0642\u0005h\u0000\u0000\u0642\u06ca\u0005z\u0000\u0000\u0643\u0644\u0005"+ - "i\u0000\u0000\u0644\u0645\u0005n\u0000\u0000\u0645\u06ca\u0005w\u0000"+ - "\u0000\u0646\u0647\u0005r\u0000\u0000\u0647\u0648\u0005o\u0000\u0000\u0648"+ - "\u06ca\u0005w\u0000\u0000\u0649\u064a\u0005l\u0000\u0000\u064a\u064b\u0005"+ - "b\u0000\u0000\u064b\u064c\u0005e\u0000\u0000\u064c\u06ca\u0005q\u0000"+ - "\u0000\u064d\u064e\u0005p\u0000\u0000\u064e\u064f\u0005h\u0000\u0000\u064f"+ - "\u06ca\u0005w\u0000\u0000\u0650\u0651\u0005p\u0000\u0000\u0651\u0652\u0005"+ - "l\u0000\u0000\u0652\u06ca\u0005z\u0000\u0000\u0653\u0654\u0005e\u0000"+ - "\u0000\u0654\u0655\u0005o\u0000\u0000\u0655\u06ca\u0005m\u0000\u0000\u0656"+ - "\u0657\u0005a\u0000\u0000\u0657\u0658\u0005d\u0000\u0000\u0658\u0659\u0005"+ - "c\u0000\u0000\u0659\u06ca\u0005q\u0000\u0000\u065a\u065b\u0005a\u0000"+ - "\u0000\u065b\u065c\u0005n\u0000\u0000\u065c\u065d\u0005d\u0000\u0000\u065d"+ - "\u06ca\u0005q\u0000\u0000\u065e\u065f\u0005a\u0000\u0000\u065f\u0660\u0005"+ - "s\u0000\u0000\u0660\u0661\u0005l\u0000\u0000\u0661\u06ca\u0005q\u0000"+ - "\u0000\u0662\u0663\u0005a\u0000\u0000\u0663\u0664\u0005s\u0000\u0000\u0664"+ - "\u0665\u0005r\u0000\u0000\u0665\u06ca\u0005q\u0000\u0000\u0666\u0667\u0005"+ - "b\u0000\u0000\u0667\u0668\u0005i\u0000\u0000\u0668\u0669\u0005t\u0000"+ - "\u0000\u0669\u06ca\u0005q\u0000\u0000\u066a\u066b\u0005c\u0000\u0000\u066b"+ - "\u066c\u0005p\u0000\u0000\u066c\u06ca\u0005q\u0000\u0000\u066d\u066e\u0005"+ - "d\u0000\u0000\u066e\u066f\u0005e\u0000\u0000\u066f\u06ca\u0005q\u0000"+ - "\u0000\u0670\u0671\u0005e\u0000\u0000\u0671\u0672\u0005o\u0000\u0000\u0672"+ - "\u0673\u0005r\u0000\u0000\u0673\u06ca\u0005q\u0000\u0000\u0674\u0675\u0005"+ - "i\u0000\u0000\u0675\u0676\u0005n\u0000\u0000\u0676\u06ca\u0005q\u0000"+ - "\u0000\u0677\u0678\u0005l\u0000\u0000\u0678\u0679\u0005d\u0000\u0000\u0679"+ - "\u06ca\u0005q\u0000\u0000\u067a\u067b\u0005l\u0000\u0000\u067b\u067c\u0005"+ - "s\u0000\u0000\u067c\u067d\u0005r\u0000\u0000\u067d\u06ca\u0005q\u0000"+ - "\u0000\u067e\u067f\u0005o\u0000\u0000\u067f\u0680\u0005r\u0000\u0000\u0680"+ - "\u06ca\u0005q\u0000\u0000\u0681\u0682\u0005r\u0000\u0000\u0682\u0683\u0005"+ - "o\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u06ca\u0005q\u0000"+ - "\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ - "\u0688\u0005r\u0000\u0000\u0688\u06ca\u0005q\u0000\u0000\u0689\u068a\u0005"+ - "s\u0000\u0000\u068a\u068b\u0005b\u0000\u0000\u068b\u068c\u0005c\u0000"+ - "\u0000\u068c\u06ca\u0005q\u0000\u0000\u068d\u068e\u0005s\u0000\u0000\u068e"+ - "\u068f\u0005t\u0000\u0000\u068f\u06ca\u0005q\u0000\u0000\u0690\u0691\u0005"+ - "s\u0000\u0000\u0691\u0692\u0005x\u0000\u0000\u0692\u06ca\u0005y\u0000"+ - "\u0000\u0693\u0694\u0005s\u0000\u0000\u0694\u0695\u0005t\u0000\u0000\u0695"+ - "\u06ca\u00050\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697\u0698\u0005"+ - "t\u0000\u0000\u0698\u06ca\u00051\u0000\u0000\u0699\u069a\u0005s\u0000"+ - "\u0000\u069a\u069b\u0005t\u0000\u0000\u069b\u06ca\u00052\u0000\u0000\u069c"+ - "\u069d\u0005s\u0000\u0000\u069d\u069e\u0005a\u0000\u0000\u069e\u06ca\u0005"+ - "y\u0000\u0000\u069f\u06a0\u0005t\u0000\u0000\u06a0\u06a1\u0005m\u0000"+ - "\u0000\u06a1\u06ca\u0005a\u0000\u0000\u06a2\u06a3\u0005b\u0000\u0000\u06a3"+ - "\u06a4\u0005s\u0000\u0000\u06a4\u06ca\u0005r\u0000\u0000\u06a5\u06a6\u0005"+ - "t\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06ca\u0005m\u0000"+ - "\u0000\u06a8\u06a9\u0005c\u0000\u0000\u06a9\u06aa\u0005s\u0000\u0000\u06aa"+ - "\u06ca\u0005l\u0000\u0000\u06ab\u06ac\u0005c\u0000\u0000\u06ac\u06ad\u0005"+ - "l\u0000\u0000\u06ad\u06ca\u0005a\u0000\u0000\u06ae\u06af\u0005c\u0000"+ - "\u0000\u06af\u06b0\u0005l\u0000\u0000\u06b0\u06ca\u0005x\u0000\u0000\u06b1"+ - "\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005l\u0000\u0000\u06b3\u06ca\u0005"+ - "y\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005s\u0000"+ - "\u0000\u06b6\u06ca\u0005h\u0000\u0000\u06b7\u06b8\u0005s\u0000\u0000\u06b8"+ - "\u06b9\u0005e\u0000\u0000\u06b9\u06ca\u0005t\u0000\u0000\u06ba\u06bb\u0005"+ - "t\u0000\u0000\u06bb\u06bc\u0005s\u0000\u0000\u06bc\u06ca\u0005t\u0000"+ - "\u0000\u06bd\u06be\u0005t\u0000\u0000\u06be\u06bf\u0005i\u0000\u0000\u06bf"+ - "\u06ca\u0005a\u0000\u0000\u06c0\u06c1\u0005t\u0000\u0000\u06c1\u06c2\u0005"+ - "d\u0000\u0000\u06c2\u06ca\u0005d\u0000\u0000\u06c3\u06c4\u0005t\u0000"+ - "\u0000\u06c4\u06c5\u0005i\u0000\u0000\u06c5\u06ca\u0005n\u0000\u0000\u06c6"+ - "\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8\u06ca\u0005"+ - "i\u0000\u0000\u06c9\u046a\u0001\u0000\u0000\u0000\u06c9\u046d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0470\u0001\u0000\u0000\u0000\u06c9\u0473\u0001\u0000"+ - "\u0000\u0000\u06c9\u0476\u0001\u0000\u0000\u0000\u06c9\u0479\u0001\u0000"+ - "\u0000\u0000\u06c9\u047c\u0001\u0000\u0000\u0000\u06c9\u047f\u0001\u0000"+ - "\u0000\u0000\u06c9\u0482\u0001\u0000\u0000\u0000\u06c9\u0485\u0001\u0000"+ - "\u0000\u0000\u06c9\u0488\u0001\u0000\u0000\u0000\u06c9\u048b\u0001\u0000"+ - "\u0000\u0000\u06c9\u048e\u0001\u0000\u0000\u0000\u06c9\u0491\u0001\u0000"+ - "\u0000\u0000\u06c9\u0494\u0001\u0000\u0000\u0000\u06c9\u0497\u0001\u0000"+ - "\u0000\u0000\u06c9\u049a\u0001\u0000\u0000\u0000\u06c9\u049d\u0001\u0000"+ - "\u0000\u0000\u06c9\u04a0\u0001\u0000\u0000\u0000\u06c9\u04a3\u0001\u0000"+ - "\u0000\u0000\u06c9\u04a6\u0001\u0000\u0000\u0000\u06c9\u04a9\u0001\u0000"+ - "\u0000\u0000\u06c9\u04ac\u0001\u0000\u0000\u0000\u06c9\u04af\u0001\u0000"+ - "\u0000\u0000\u06c9\u04b2\u0001\u0000\u0000\u0000\u06c9\u04b5\u0001\u0000"+ - "\u0000\u0000\u06c9\u04b8\u0001\u0000\u0000\u0000\u06c9\u04bb\u0001\u0000"+ - "\u0000\u0000\u06c9\u04be\u0001\u0000\u0000\u0000\u06c9\u04c1\u0001\u0000"+ - "\u0000\u0000\u06c9\u04c4\u0001\u0000\u0000\u0000\u06c9\u04c7\u0001\u0000"+ - "\u0000\u0000\u06c9\u04ca\u0001\u0000\u0000\u0000\u06c9\u04cd\u0001\u0000"+ - "\u0000\u0000\u06c9\u04d0\u0001\u0000\u0000\u0000\u06c9\u04d3\u0001\u0000"+ - "\u0000\u0000\u06c9\u04d6\u0001\u0000\u0000\u0000\u06c9\u04d9\u0001\u0000"+ - "\u0000\u0000\u06c9\u04dc\u0001\u0000\u0000\u0000\u06c9\u04df\u0001\u0000"+ - "\u0000\u0000\u06c9\u04e2\u0001\u0000\u0000\u0000\u06c9\u04e5\u0001\u0000"+ - "\u0000\u0000\u06c9\u04e8\u0001\u0000\u0000\u0000\u06c9\u04eb\u0001\u0000"+ - "\u0000\u0000\u06c9\u04ee\u0001\u0000\u0000\u0000\u06c9\u04f1\u0001\u0000"+ - "\u0000\u0000\u06c9\u04f4\u0001\u0000\u0000\u0000\u06c9\u04f7\u0001\u0000"+ - "\u0000\u0000\u06c9\u04fa\u0001\u0000\u0000\u0000\u06c9\u04fd\u0001\u0000"+ - "\u0000\u0000\u06c9\u0500\u0001\u0000\u0000\u0000\u06c9\u0503\u0001\u0000"+ - "\u0000\u0000\u06c9\u0506\u0001\u0000\u0000\u0000\u06c9\u0509\u0001\u0000"+ - "\u0000\u0000\u06c9\u050c\u0001\u0000\u0000\u0000\u06c9\u050f\u0001\u0000"+ - "\u0000\u0000\u06c9\u0512\u0001\u0000\u0000\u0000\u06c9\u0515\u0001\u0000"+ - "\u0000\u0000\u06c9\u0518\u0001\u0000\u0000\u0000\u06c9\u051b\u0001\u0000"+ - "\u0000\u0000\u06c9\u051e\u0001\u0000\u0000\u0000\u06c9\u0521\u0001\u0000"+ - "\u0000\u0000\u06c9\u0524\u0001\u0000\u0000\u0000\u06c9\u0527\u0001\u0000"+ - "\u0000\u0000\u06c9\u052a\u0001\u0000\u0000\u0000\u06c9\u052d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0530\u0001\u0000\u0000\u0000\u06c9\u0533\u0001\u0000"+ - "\u0000\u0000\u06c9\u0536\u0001\u0000\u0000\u0000\u06c9\u0539\u0001\u0000"+ - "\u0000\u0000\u06c9\u053c\u0001\u0000\u0000\u0000\u06c9\u053f\u0001\u0000"+ - "\u0000\u0000\u06c9\u0542\u0001\u0000\u0000\u0000\u06c9\u0545\u0001\u0000"+ - "\u0000\u0000\u06c9\u0548\u0001\u0000\u0000\u0000\u06c9\u054c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0550\u0001\u0000\u0000\u0000\u06c9\u0554\u0001\u0000"+ - "\u0000\u0000\u06c9\u0558\u0001\u0000\u0000\u0000\u06c9\u055c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0560\u0001\u0000\u0000\u0000\u06c9\u0564\u0001\u0000"+ - "\u0000\u0000\u06c9\u0568\u0001\u0000\u0000\u0000\u06c9\u056c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0570\u0001\u0000\u0000\u0000\u06c9\u0574\u0001\u0000"+ - "\u0000\u0000\u06c9\u0578\u0001\u0000\u0000\u0000\u06c9\u057c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0580\u0001\u0000\u0000\u0000\u06c9\u0584\u0001\u0000"+ - "\u0000\u0000\u06c9\u0588\u0001\u0000\u0000\u0000\u06c9\u058b\u0001\u0000"+ - "\u0000\u0000\u06c9\u058e\u0001\u0000\u0000\u0000\u06c9\u0591\u0001\u0000"+ - "\u0000\u0000\u06c9\u0594\u0001\u0000\u0000\u0000\u06c9\u0597\u0001\u0000"+ - "\u0000\u0000\u06c9\u059b\u0001\u0000\u0000\u0000\u06c9\u059f\u0001\u0000"+ - "\u0000\u0000\u06c9\u05a3\u0001\u0000\u0000\u0000\u06c9\u05a7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05ab\u0001\u0000\u0000\u0000\u06c9\u05af\u0001\u0000"+ - "\u0000\u0000\u06c9\u05b3\u0001\u0000\u0000\u0000\u06c9\u05b7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05bb\u0001\u0000\u0000\u0000\u06c9\u05bf\u0001\u0000"+ - "\u0000\u0000\u06c9\u05c3\u0001\u0000\u0000\u0000\u06c9\u05c7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05cb\u0001\u0000\u0000\u0000\u06c9\u05cf\u0001\u0000"+ - "\u0000\u0000\u06c9\u05d3\u0001\u0000\u0000\u0000\u06c9\u05d7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05da\u0001\u0000\u0000\u0000\u06c9\u05dd\u0001\u0000"+ - "\u0000\u0000\u06c9\u05e0\u0001\u0000\u0000\u0000\u06c9\u05e3\u0001\u0000"+ - "\u0000\u0000\u06c9\u05e6\u0001\u0000\u0000\u0000\u06c9\u05e9\u0001\u0000"+ - "\u0000\u0000\u06c9\u05ec\u0001\u0000\u0000\u0000\u06c9\u05ef\u0001\u0000"+ - "\u0000\u0000\u06c9\u05f3\u0001\u0000\u0000\u0000\u06c9\u05f6\u0001\u0000"+ - "\u0000\u0000\u06c9\u05f9\u0001\u0000\u0000\u0000\u06c9\u05fd\u0001\u0000"+ - "\u0000\u0000\u06c9\u0600\u0001\u0000\u0000\u0000\u06c9\u0603\u0001\u0000"+ - "\u0000\u0000\u06c9\u0606\u0001\u0000\u0000\u0000\u06c9\u0609\u0001\u0000"+ - "\u0000\u0000\u06c9\u060d\u0001\u0000\u0000\u0000\u06c9\u0610\u0001\u0000"+ - "\u0000\u0000\u06c9\u0613\u0001\u0000\u0000\u0000\u06c9\u0616\u0001\u0000"+ - "\u0000\u0000\u06c9\u061a\u0001\u0000\u0000\u0000\u06c9\u061d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0621\u0001\u0000\u0000\u0000\u06c9\u0624\u0001\u0000"+ - "\u0000\u0000\u06c9\u0628\u0001\u0000\u0000\u0000\u06c9\u062c\u0001\u0000"+ - "\u0000\u0000\u06c9\u062f\u0001\u0000\u0000\u0000\u06c9\u0633\u0001\u0000"+ - "\u0000\u0000\u06c9\u0636\u0001\u0000\u0000\u0000\u06c9\u0639\u0001\u0000"+ - "\u0000\u0000\u06c9\u063c\u0001\u0000\u0000\u0000\u06c9\u0640\u0001\u0000"+ - "\u0000\u0000\u06c9\u0643\u0001\u0000\u0000\u0000\u06c9\u0646\u0001\u0000"+ - "\u0000\u0000\u06c9\u0649\u0001\u0000\u0000\u0000\u06c9\u064d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0650\u0001\u0000\u0000\u0000\u06c9\u0653\u0001\u0000"+ - "\u0000\u0000\u06c9\u0656\u0001\u0000\u0000\u0000\u06c9\u065a\u0001\u0000"+ - "\u0000\u0000\u06c9\u065e\u0001\u0000\u0000\u0000\u06c9\u0662\u0001\u0000"+ - "\u0000\u0000\u06c9\u0666\u0001\u0000\u0000\u0000\u06c9\u066a\u0001\u0000"+ - "\u0000\u0000\u06c9\u066d\u0001\u0000\u0000\u0000\u06c9\u0670\u0001\u0000"+ - "\u0000\u0000\u06c9\u0674\u0001\u0000\u0000\u0000\u06c9\u0677\u0001\u0000"+ - "\u0000\u0000\u06c9\u067a\u0001\u0000\u0000\u0000\u06c9\u067e\u0001\u0000"+ - "\u0000\u0000\u06c9\u0681\u0001\u0000\u0000\u0000\u06c9\u0685\u0001\u0000"+ - "\u0000\u0000\u06c9\u0689\u0001\u0000\u0000\u0000\u06c9\u068d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0690\u0001\u0000\u0000\u0000\u06c9\u0693\u0001\u0000"+ - "\u0000\u0000\u06c9\u0696\u0001\u0000\u0000\u0000\u06c9\u0699\u0001\u0000"+ - "\u0000\u0000\u06c9\u069c\u0001\u0000\u0000\u0000\u06c9\u069f\u0001\u0000"+ - "\u0000\u0000\u06c9\u06a2\u0001\u0000\u0000\u0000\u06c9\u06a5\u0001\u0000"+ - "\u0000\u0000\u06c9\u06a8\u0001\u0000\u0000\u0000\u06c9\u06ab\u0001\u0000"+ - "\u0000\u0000\u06c9\u06ae\u0001\u0000\u0000\u0000\u06c9\u06b1\u0001\u0000"+ - "\u0000\u0000\u06c9\u06b4\u0001\u0000\u0000\u0000\u06c9\u06b7\u0001\u0000"+ - "\u0000\u0000\u06c9\u06ba\u0001\u0000\u0000\u0000\u06c9\u06bd\u0001\u0000"+ - "\u0000\u0000\u06c9\u06c0\u0001\u0000\u0000\u0000\u06c9\u06c3\u0001\u0000"+ - "\u0000\u0000\u06c9\u06c6\u0001\u0000\u0000\u0000\u06ca\u00ec\u0001\u0000"+ - "\u0000\u0000\u06cb\u06cc\u0005#\u0000\u0000\u06cc\u00ee\u0001\u0000\u0000"+ - "\u0000\u06cd\u06ce\u0005:\u0000\u0000\u06ce\u00f0\u0001\u0000\u0000\u0000"+ - "\u06cf\u06d0\u0005,\u0000\u0000\u06d0\u00f2\u0001\u0000\u0000\u0000\u06d1"+ - "\u06d2\u0005(\u0000\u0000\u06d2\u00f4\u0001\u0000\u0000\u0000\u06d3\u06d4"+ - "\u0005)\u0000\u0000\u06d4\u00f6\u0001\u0000\u0000\u0000\u06d5\u06d6\u0005"+ - "[\u0000\u0000\u06d6\u00f8\u0001\u0000\u0000\u0000\u06d7\u06d8\u0005]\u0000"+ - "\u0000\u06d8\u00fa\u0001\u0000\u0000\u0000\u06d9\u06da\u0005.\u0000\u0000"+ - "\u06da\u00fc\u0001\u0000\u0000\u0000\u06db\u06dc\u0005<\u0000\u0000\u06dc"+ - "\u06dd\u0005<\u0000\u0000\u06dd\u00fe\u0001\u0000\u0000\u0000\u06de\u06df"+ - "\u0005>\u0000\u0000\u06df\u06e0\u0005>\u0000\u0000\u06e0\u0100\u0001\u0000"+ - "\u0000\u0000\u06e1\u06e2\u0005+\u0000\u0000\u06e2\u0102\u0001\u0000\u0000"+ - "\u0000\u06e3\u06e4\u0005-\u0000\u0000\u06e4\u0104\u0001\u0000\u0000\u0000"+ - "\u06e5\u06e6\u0005<\u0000\u0000\u06e6\u0106\u0001\u0000\u0000\u0000\u06e7"+ - "\u06e8\u0005>\u0000\u0000\u06e8\u0108\u0001\u0000\u0000\u0000\u06e9\u06ea"+ - "\u0005*\u0000\u0000\u06ea\u010a\u0001\u0000\u0000\u0000\u06eb\u06ec\u0005"+ - "/\u0000\u0000\u06ec\u010c\u0001\u0000\u0000\u0000\u06ed\u06ee\u0005{\u0000"+ - "\u0000\u06ee\u06ef\u0006\u0085\u0007\u0000\u06ef\u010e\u0001\u0000\u0000"+ - "\u0000\u06f0\u06f1\u0005}\u0000\u0000\u06f1\u06f2\u0006\u0086\b\u0000"+ - "\u06f2\u0110\u0001\u0000\u0000\u0000\u06f3\u06f6\u0003\u0113\u0088\u0000"+ - "\u06f4\u06f6\u0003\u011b\u008c\u0000\u06f5\u06f3\u0001\u0000\u0000\u0000"+ - "\u06f5\u06f4\u0001\u0000\u0000\u0000\u06f6\u0112\u0001\u0000\u0000\u0000"+ - "\u06f7\u06fb\u0003\u0115\u0089\u0000\u06f8\u06fb\u0003\u0117\u008a\u0000"+ - "\u06f9\u06fb\u0003\u0119\u008b\u0000\u06fa\u06f7\u0001\u0000\u0000\u0000"+ - "\u06fa\u06f8\u0001\u0000\u0000\u0000\u06fa\u06f9\u0001\u0000\u0000\u0000"+ - "\u06fb\u0114\u0001\u0000\u0000\u0000\u06fc\u0700\u0005%\u0000\u0000\u06fd"+ - "\u06ff\u0003\u0123\u0090\u0000\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff"+ - "\u0702\u0001\u0000\u0000\u0000\u0700\u06fe\u0001\u0000\u0000\u0000\u0700"+ - "\u0701\u0001\u0000\u0000\u0000\u0701\u0703\u0001\u0000\u0000\u0000\u0702"+ - "\u0700\u0001\u0000\u0000\u0000\u0703\u0705\u0005.\u0000\u0000\u0704\u0706"+ - "\u0003\u0123\u0090\u0000\u0705\u0704\u0001\u0000\u0000\u0000\u0706\u0707"+ - "\u0001\u0000\u0000\u0000\u0707\u0705\u0001\u0000\u0000\u0000\u0707\u0708"+ - "\u0001\u0000\u0000\u0000\u0708\u0116\u0001\u0000\u0000\u0000\u0709\u070b"+ - "\u0003\u0125\u0091\u0000\u070a\u0709\u0001\u0000\u0000\u0000\u070b\u070e"+ - "\u0001\u0000\u0000\u0000\u070c\u070a\u0001\u0000\u0000\u0000\u070c\u070d"+ - "\u0001\u0000\u0000\u0000\u070d\u070f\u0001\u0000\u0000\u0000\u070e\u070c"+ - "\u0001\u0000\u0000\u0000\u070f\u0711\u0005.\u0000\u0000\u0710\u0712\u0003"+ - "\u0125\u0091\u0000\u0711\u0710\u0001\u0000\u0000\u0000\u0712\u0713\u0001"+ - "\u0000\u0000\u0000\u0713\u0711\u0001\u0000\u0000\u0000\u0713\u0714\u0001"+ - "\u0000\u0000\u0000\u0714\u0118\u0001\u0000\u0000\u0000\u0715\u0719\u0005"+ - "$\u0000\u0000\u0716\u0718\u0003\u0127\u0092\u0000\u0717\u0716\u0001\u0000"+ - "\u0000\u0000\u0718\u071b\u0001\u0000\u0000\u0000\u0719\u0717\u0001\u0000"+ - "\u0000\u0000\u0719\u071a\u0001\u0000\u0000\u0000\u071a\u071c\u0001\u0000"+ - "\u0000\u0000\u071b\u0719\u0001\u0000\u0000\u0000\u071c\u071e\u0005.\u0000"+ - "\u0000\u071d\u071f\u0003\u0127\u0092\u0000\u071e\u071d\u0001\u0000\u0000"+ - "\u0000\u071f\u0720\u0001\u0000\u0000\u0000\u0720\u071e\u0001\u0000\u0000"+ - "\u0000\u0720\u0721\u0001\u0000\u0000\u0000\u0721\u011a\u0001\u0000\u0000"+ - "\u0000\u0722\u0726\u0003\u011f\u008e\u0000\u0723\u0726\u0003\u0121\u008f"+ - "\u0000\u0724\u0726\u0003\u011d\u008d\u0000\u0725\u0722\u0001\u0000\u0000"+ - "\u0000\u0725\u0723\u0001\u0000\u0000\u0000\u0725\u0724\u0001\u0000\u0000"+ - "\u0000\u0726\u011c\u0001\u0000\u0000\u0000\u0727\u0729\u0005%\u0000\u0000"+ - "\u0728\u072a\u0003\u0123\u0090\u0000\u0729\u0728\u0001\u0000\u0000\u0000"+ - "\u072a\u072b\u0001\u0000\u0000\u0000\u072b\u0729\u0001\u0000\u0000\u0000"+ - "\u072b\u072c\u0001\u0000\u0000\u0000\u072c\u011e\u0001\u0000\u0000\u0000"+ - "\u072d\u072f\u0003\u0125\u0091\u0000\u072e\u072d\u0001\u0000\u0000\u0000"+ - "\u072f\u0730\u0001\u0000\u0000\u0000\u0730\u072e\u0001\u0000\u0000\u0000"+ - "\u0730\u0731\u0001\u0000\u0000\u0000\u0731\u0120\u0001\u0000\u0000\u0000"+ - "\u0732\u0734\u0005$\u0000\u0000\u0733\u0735\u0003\u0127\u0092\u0000\u0734"+ - "\u0733\u0001\u0000\u0000\u0000\u0735\u0736\u0001\u0000\u0000\u0000\u0736"+ - "\u0734\u0001\u0000\u0000\u0000\u0736\u0737\u0001\u0000\u0000\u0000\u0737"+ - "\u0122\u0001\u0000\u0000\u0000\u0738\u0739\u0007\u0004\u0000\u0000\u0739"+ - "\u0124\u0001\u0000\u0000\u0000\u073a\u073b\u0007\u0005\u0000\u0000\u073b"+ - "\u0126\u0001\u0000\u0000\u0000\u073c\u073d\u0007\u0006\u0000\u0000\u073d"+ - "\u0128\u0001\u0000\u0000\u0000\u073e\u0742\u0005\'\u0000\u0000\u073f\u0740"+ - "\u0005\\\u0000\u0000\u0740\u0743\u0007\u0012\u0000\u0000\u0741\u0743\b"+ - "\u000f\u0000\u0000\u0742\u073f\u0001\u0000\u0000\u0000\u0742\u0741\u0001"+ - "\u0000\u0000\u0000\u0743\u0744\u0001\u0000\u0000\u0000\u0744\u0745\u0005"+ - "\'\u0000\u0000\u0745\u012a\u0001\u0000\u0000\u0000\u0746\u0748\u0003\u012d"+ - "\u0095\u0000\u0747\u0749\u0007\u0013\u0000\u0000\u0748\u0747\u0001\u0000"+ - "\u0000\u0000\u0749\u074a\u0001\u0000\u0000\u0000\u074a\u0748\u0001\u0000"+ - "\u0000\u0000\u074a\u074b\u0001\u0000\u0000\u0000\u074b\u012c\u0001\u0000"+ - "\u0000\u0000\u074c\u0750\u0005!\u0000\u0000\u074d\u074f\u0003\u0133\u0098"+ - "\u0000\u074e\u074d\u0001\u0000\u0000\u0000\u074f\u0752\u0001\u0000\u0000"+ - "\u0000\u0750\u074e\u0001\u0000\u0000\u0000\u0750\u0751\u0001\u0000\u0000"+ - "\u0000\u0751\u012e\u0001\u0000\u0000\u0000\u0752\u0750\u0001\u0000\u0000"+ - "\u0000\u0753\u0757\u0003\u0131\u0097\u0000\u0754\u0756\u0003\u0133\u0098"+ - "\u0000\u0755\u0754\u0001\u0000\u0000\u0000\u0756\u0759\u0001\u0000\u0000"+ - "\u0000\u0757\u0755\u0001\u0000\u0000\u0000\u0757\u0758\u0001\u0000\u0000"+ - "\u0000\u0758\u0130\u0001\u0000\u0000\u0000\u0759\u0757\u0001\u0000\u0000"+ - "\u0000\u075a\u075b\u0007\u0007\u0000\u0000\u075b\u0132\u0001\u0000\u0000"+ - "\u0000\u075c\u075d\u0007\b\u0000\u0000\u075d\u0134\u0001\u0000\u0000\u0000"+ - "\u075e\u075f\u0005@\u0000\u0000\u075f\u0760\u0003\u012f\u0096\u0000\u0760"+ - "\u0136\u0001\u0000\u0000\u0000\u0761\u0763\u0007\u0010\u0000\u0000\u0762"+ - "\u0761\u0001\u0000\u0000\u0000\u0763\u0764\u0001\u0000\u0000\u0000\u0764"+ - "\u0762\u0001\u0000\u0000\u0000\u0764\u0765\u0001\u0000\u0000\u0000\u0765"+ - "\u0766\u0001\u0000\u0000\u0000\u0766\u0767\u0006\u009a\u0005\u0000\u0767"+ - "\u0138\u0001\u0000\u0000\u0000\u0768\u0769\u0005/\u0000\u0000\u0769\u076a"+ - "\u0005/\u0000\u0000\u076a\u076e\u0001\u0000\u0000\u0000\u076b\u076d\b"+ - "\u0011\u0000\u0000\u076c\u076b\u0001\u0000\u0000\u0000\u076d\u0770\u0001"+ - "\u0000\u0000\u0000\u076e\u076c\u0001\u0000\u0000\u0000\u076e\u076f\u0001"+ - "\u0000\u0000\u0000\u076f\u0771\u0001\u0000\u0000\u0000\u0770\u076e\u0001"+ - "\u0000\u0000\u0000\u0771\u0772\u0006\u009b\u0006\u0000\u0772\u013a\u0001"+ - "\u0000\u0000\u0000\u0773\u0774\u0005/\u0000\u0000\u0774\u0775\u0005*\u0000"+ - "\u0000\u0775\u0779\u0001\u0000\u0000\u0000\u0776\u0778\t\u0000\u0000\u0000"+ - "\u0777\u0776\u0001\u0000\u0000\u0000\u0778\u077b\u0001\u0000\u0000\u0000"+ - "\u0779\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000"+ - "\u077a\u077c\u0001\u0000\u0000\u0000\u077b\u0779\u0001\u0000\u0000\u0000"+ - "\u077c\u077d\u0005*\u0000\u0000\u077d\u077e\u0005/\u0000\u0000\u077e\u077f"+ - "\u0001\u0000\u0000\u0000\u077f\u0780\u0006\u009c\u0006\u0000\u0780\u013c"+ - "\u0001\u0000\u0000\u0000\u0781\u0783\u0005<\u0000\u0000\u0782\u0784\u0007"+ - "\u0014\u0000\u0000\u0783\u0782\u0001\u0000\u0000\u0000\u0784\u0785\u0001"+ - "\u0000\u0000\u0000\u0785\u0783\u0001\u0000\u0000\u0000\u0785\u0786\u0001"+ - "\u0000\u0000\u0000\u0786\u0787\u0001\u0000\u0000\u0000\u0787\u0788\u0005"+ - ">\u0000\u0000\u0788\u0789\u0006\u009d\t\u0000\u0789\u013e\u0001\u0000"+ - "\u0000\u0000\u078a\u0790\u0005\"\u0000\u0000\u078b\u078c\u0005\\\u0000"+ - "\u0000\u078c\u078f\u0005\"\u0000\u0000\u078d\u078f\b\t\u0000\u0000\u078e"+ - "\u078b\u0001\u0000\u0000\u0000\u078e\u078d\u0001\u0000\u0000\u0000\u078f"+ - "\u0792\u0001\u0000\u0000\u0000\u0790\u078e\u0001\u0000\u0000\u0000\u0790"+ - "\u0791\u0001\u0000\u0000\u0000\u0791\u0793\u0001\u0000\u0000\u0000\u0792"+ - "\u0790\u0001\u0000\u0000\u0000\u0793\u0794\u0005\"\u0000\u0000\u0794\u0795"+ - "\u0006\u009e\n\u0000\u0795\u0140\u0001\u0000\u0000\u0000\u0796\u0798\u0007"+ - "\u0010\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798\u0799\u0001"+ - "\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799\u079a\u0001"+ - "\u0000\u0000\u0000\u079a\u079b\u0001\u0000\u0000\u0000\u079b\u079c\u0006"+ - "\u009f\u0005\u0000\u079c\u0142\u0001\u0000\u0000\u0000\u079d\u079e\u0005"+ - "/\u0000\u0000\u079e\u079f\u0005/\u0000\u0000\u079f\u07a3\u0001\u0000\u0000"+ - "\u0000\u07a0\u07a2\b\u0011\u0000\u0000\u07a1\u07a0\u0001\u0000\u0000\u0000"+ - "\u07a2\u07a5\u0001\u0000\u0000\u0000\u07a3\u07a1\u0001\u0000\u0000\u0000"+ - "\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a6\u0001\u0000\u0000\u0000"+ - "\u07a5\u07a3\u0001\u0000\u0000\u0000\u07a6\u07a7\u0006\u00a0\u0006\u0000"+ - "\u07a7\u0144\u0001\u0000\u0000\u0000\u07a8\u07a9\u0005/\u0000\u0000\u07a9"+ - "\u07aa\u0005*\u0000\u0000\u07aa\u07ae\u0001\u0000\u0000\u0000\u07ab\u07ad"+ - "\t\u0000\u0000\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ad\u07b0\u0001"+ - "\u0000\u0000\u0000\u07ae\u07af\u0001\u0000\u0000\u0000\u07ae\u07ac\u0001"+ - "\u0000\u0000\u0000\u07af\u07b1\u0001\u0000\u0000\u0000\u07b0\u07ae\u0001"+ - "\u0000\u0000\u0000\u07b1\u07b2\u0005*\u0000\u0000\u07b2\u07b3\u0005/\u0000"+ - "\u0000\u07b3\u07b4\u0001\u0000\u0000\u0000\u07b4\u07b5\u0006\u00a1\u0006"+ - "\u0000\u07b5\u0146\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b4\u0273"+ - "\u0324\u032f\u0337\u0367\u03a5\u03aa\u03b1\u03b6\u03bd\u03c2\u03c9\u03d0"+ - "\u03d5\u03dc\u03e1\u03e6\u03ed\u03f3\u03f5\u03fa\u0401\u0406\u0412\u041f"+ - "\u0421\u0426\u042a\u042c\u042f\u0435\u0438\u043d\u0440\u0447\u0451\u045c"+ - "\u06c9\u06f5\u06fa\u0700\u0707\u070c\u0713\u0719\u0720\u0725\u072b\u0730"+ - "\u0736\u0742\u074a\u0750\u0757\u0764\u076e\u0779\u0785\u078e\u0790\u0799"+ - "\u07a3\u07ae\u000b\u0001\u0000\u0000\u0001B\u0001\u0001P\u0002\u0001Q"+ - "\u0003\u0001k\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0085\u0005"+ - "\u0001\u0086\u0006\u0001\u009d\u0007\u0001\u009e\b"; + "\u0145\u0099\u0147\u009a\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSU"+ + "Ussuu\n\u0000BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb"+ + "\u0001\u000001\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004"+ + "\u000009AZ__az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000"+ + "aammsu\u0007\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'"+ + "\u0004\u0000\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\""+ + "\'\'ffnnrr\u0002\u0000++--\u0005\u0000-9AZ\\\\__az\u08c4\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ + "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ + "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ + "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ + "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ + "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ + "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ + "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ + "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ + "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ + "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ + "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ + "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ + "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ + "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ + "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ + "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ + "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ + "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ + "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ + "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00db\u0001"+ + "\u0000\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001"+ + "\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001"+ + "\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001"+ + "\u0000\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001"+ + "\u0000\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001"+ + "\u0000\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001"+ + "\u0000\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001"+ + "\u0000\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001"+ + "\u0000\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001"+ + "\u0000\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001"+ + "\u0000\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001"+ + "\u0000\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001"+ + "\u0000\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001"+ + "\u0000\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001"+ + "\u0000\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001"+ + "\u0000\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001"+ + "\u0000\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0123\u0001"+ + "\u0000\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001"+ + "\u0000\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0131\u0001"+ + "\u0000\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001"+ + "\u0000\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0001\u013d\u0001"+ + "\u0000\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001"+ + "\u0000\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001"+ + "\u0000\u0000\u0000\u0002\u0147\u0001\u0000\u0000\u0000\u0003\u0149\u0001"+ + "\u0000\u0000\u0000\u0005\u014c\u0001\u0000\u0000\u0000\u0007\u014e\u0001"+ + "\u0000\u0000\u0000\t\u0150\u0001\u0000\u0000\u0000\u000b\u0152\u0001\u0000"+ + "\u0000\u0000\r\u0154\u0001\u0000\u0000\u0000\u000f\u0156\u0001\u0000\u0000"+ + "\u0000\u0011\u0158\u0001\u0000\u0000\u0000\u0013\u015a\u0001\u0000\u0000"+ + "\u0000\u0015\u015c\u0001\u0000\u0000\u0000\u0017\u015f\u0001\u0000\u0000"+ + "\u0000\u0019\u0163\u0001\u0000\u0000\u0000\u001b\u0165\u0001\u0000\u0000"+ + "\u0000\u001d\u0167\u0001\u0000\u0000\u0000\u001f\u016a\u0001\u0000\u0000"+ + "\u0000!\u016c\u0001\u0000\u0000\u0000#\u016e\u0001\u0000\u0000\u0000%"+ + "\u0170\u0001\u0000\u0000\u0000\'\u0172\u0001\u0000\u0000\u0000)\u0174"+ + "\u0001\u0000\u0000\u0000+\u0177\u0001\u0000\u0000\u0000-\u017a\u0001\u0000"+ + "\u0000\u0000/\u017c\u0001\u0000\u0000\u00001\u017e\u0001\u0000\u0000\u0000"+ + "3\u0180\u0001\u0000\u0000\u00005\u0182\u0001\u0000\u0000\u00007\u0185"+ + "\u0001\u0000\u0000\u00009\u0188\u0001\u0000\u0000\u0000;\u018b\u0001\u0000"+ + "\u0000\u0000=\u018e\u0001\u0000\u0000\u0000?\u0190\u0001\u0000\u0000\u0000"+ + "A\u0193\u0001\u0000\u0000\u0000C\u0196\u0001\u0000\u0000\u0000E\u0198"+ + "\u0001\u0000\u0000\u0000G\u019b\u0001\u0000\u0000\u0000I\u019e\u0001\u0000"+ + "\u0000\u0000K\u01b6\u0001\u0000\u0000\u0000M\u01b8\u0001\u0000\u0000\u0000"+ + "O\u01c0\u0001\u0000\u0000\u0000Q\u01c6\u0001\u0000\u0000\u0000S\u01cd"+ + "\u0001\u0000\u0000\u0000U\u01d6\u0001\u0000\u0000\u0000W\u01de\u0001\u0000"+ + "\u0000\u0000Y\u01e5\u0001\u0000\u0000\u0000[\u01ee\u0001\u0000\u0000\u0000"+ + "]\u01f5\u0001\u0000\u0000\u0000_\u0201\u0001\u0000\u0000\u0000a\u020a"+ + "\u0001\u0000\u0000\u0000c\u0217\u0001\u0000\u0000\u0000e\u0221\u0001\u0000"+ + "\u0000\u0000g\u0226\u0001\u0000\u0000\u0000i\u022c\u0001\u0000\u0000\u0000"+ + "k\u0232\u0001\u0000\u0000\u0000m\u0239\u0001\u0000\u0000\u0000o\u023f"+ + "\u0001\u0000\u0000\u0000q\u0244\u0001\u0000\u0000\u0000s\u027c\u0001\u0000"+ + "\u0000\u0000u\u027e\u0001\u0000\u0000\u0000w\u0281\u0001\u0000\u0000\u0000"+ + "y\u0286\u0001\u0000\u0000\u0000{\u028c\u0001\u0000\u0000\u0000}\u028f"+ + "\u0001\u0000\u0000\u0000\u007f\u0293\u0001\u0000\u0000\u0000\u0081\u029a"+ + "\u0001\u0000\u0000\u0000\u0083\u02a1\u0001\u0000\u0000\u0000\u0085\u02a7"+ + "\u0001\u0000\u0000\u0000\u0087\u02b0\u0001\u0000\u0000\u0000\u0089\u02b5"+ + "\u0001\u0000\u0000\u0000\u008b\u02bb\u0001\u0000\u0000\u0000\u008d\u02c3"+ + "\u0001\u0000\u0000\u0000\u008f\u02c8\u0001\u0000\u0000\u0000\u0091\u02cf"+ + "\u0001\u0000\u0000\u0000\u0093\u02d5\u0001\u0000\u0000\u0000\u0095\u02da"+ + "\u0001\u0000\u0000\u0000\u0097\u02e1\u0001\u0000\u0000\u0000\u0099\u02e8"+ + "\u0001\u0000\u0000\u0000\u009b\u02f0\u0001\u0000\u0000\u0000\u009d\u02f8"+ + "\u0001\u0000\u0000\u0000\u009f\u032d\u0001\u0000\u0000\u0000\u00a1\u0338"+ + "\u0001\u0000\u0000\u0000\u00a3\u033a\u0001\u0000\u0000\u0000\u00a5\u0346"+ + "\u0001\u0000\u0000\u0000\u00a7\u0350\u0001\u0000\u0000\u0000\u00a9\u035b"+ + "\u0001\u0000\u0000\u0000\u00ab\u0363\u0001\u0000\u0000\u0000\u00ad\u0370"+ + "\u0001\u0000\u0000\u0000\u00af\u0372\u0001\u0000\u0000\u0000\u00b1\u0379"+ + "\u0001\u0000\u0000\u0000\u00b3\u0380\u0001\u0000\u0000\u0000\u00b5\u0388"+ + "\u0001\u0000\u0000\u0000\u00b7\u038c\u0001\u0000\u0000\u0000\u00b9\u0392"+ + "\u0001\u0000\u0000\u0000\u00bb\u0398\u0001\u0000\u0000\u0000\u00bd\u039f"+ + "\u0001\u0000\u0000\u0000\u00bf\u03a6\u0001\u0000\u0000\u0000\u00c1\u03a9"+ + "\u0001\u0000\u0000\u0000\u00c3\u03ae\u0001\u0000\u0000\u0000\u00c5\u03b3"+ + "\u0001\u0000\u0000\u0000\u00c7\u03ba\u0001\u0000\u0000\u0000\u00c9\u03cb"+ + "\u0001\u0000\u0000\u0000\u00cb\u03d9\u0001\u0000\u0000\u0000\u00cd\u03ea"+ + "\u0001\u0000\u0000\u0000\u00cf\u03fe\u0001\u0000\u0000\u0000\u00d1\u0401"+ + "\u0001\u0000\u0000\u0000\u00d3\u040a\u0001\u0000\u0000\u0000\u00d5\u0411"+ + "\u0001\u0000\u0000\u0000\u00d7\u0413\u0001\u0000\u0000\u0000\u00d9\u0415"+ + "\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000\u0000\u0000\u00dd\u0420"+ + "\u0001\u0000\u0000\u0000\u00df\u0422\u0001\u0000\u0000\u0000\u00e1\u0424"+ + "\u0001\u0000\u0000\u0000\u00e3\u043a\u0001\u0000\u0000\u0000\u00e5\u044e"+ + "\u0001\u0000\u0000\u0000\u00e7\u0454\u0001\u0000\u0000\u0000\u00e9\u045f"+ + "\u0001\u0000\u0000\u0000\u00eb\u046d\u0001\u0000\u0000\u0000\u00ed\u06d2"+ + "\u0001\u0000\u0000\u0000\u00ef\u06d4\u0001\u0000\u0000\u0000\u00f1\u06d6"+ + "\u0001\u0000\u0000\u0000\u00f3\u06d8\u0001\u0000\u0000\u0000\u00f5\u06da"+ + "\u0001\u0000\u0000\u0000\u00f7\u06dc\u0001\u0000\u0000\u0000\u00f9\u06de"+ + "\u0001\u0000\u0000\u0000\u00fb\u06e0\u0001\u0000\u0000\u0000\u00fd\u06e2"+ + "\u0001\u0000\u0000\u0000\u00ff\u06e4\u0001\u0000\u0000\u0000\u0101\u06e7"+ + "\u0001\u0000\u0000\u0000\u0103\u06ea\u0001\u0000\u0000\u0000\u0105\u06ec"+ + "\u0001\u0000\u0000\u0000\u0107\u06ee\u0001\u0000\u0000\u0000\u0109\u06f0"+ + "\u0001\u0000\u0000\u0000\u010b\u06f2\u0001\u0000\u0000\u0000\u010d\u06f4"+ + "\u0001\u0000\u0000\u0000\u010f\u06f6\u0001\u0000\u0000\u0000\u0111\u06f9"+ + "\u0001\u0000\u0000\u0000\u0113\u06fe\u0001\u0000\u0000\u0000\u0115\u0703"+ + "\u0001\u0000\u0000\u0000\u0117\u0705\u0001\u0000\u0000\u0000\u0119\u0715"+ + "\u0001\u0000\u0000\u0000\u011b\u071e\u0001\u0000\u0000\u0000\u011d\u072e"+ + "\u0001\u0000\u0000\u0000\u011f\u0730\u0001\u0000\u0000\u0000\u0121\u0737"+ + "\u0001\u0000\u0000\u0000\u0123\u073b\u0001\u0000\u0000\u0000\u0125\u0741"+ + "\u0001\u0000\u0000\u0000\u0127\u0743\u0001\u0000\u0000\u0000\u0129\u0745"+ + "\u0001\u0000\u0000\u0000\u012b\u0747\u0001\u0000\u0000\u0000\u012d\u074f"+ + "\u0001\u0000\u0000\u0000\u012f\u0755\u0001\u0000\u0000\u0000\u0131\u075c"+ + "\u0001\u0000\u0000\u0000\u0133\u0763\u0001\u0000\u0000\u0000\u0135\u0765"+ + "\u0001\u0000\u0000\u0000\u0137\u0767\u0001\u0000\u0000\u0000\u0139\u076b"+ + "\u0001\u0000\u0000\u0000\u013b\u0771\u0001\u0000\u0000\u0000\u013d\u077c"+ + "\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000\u0000\u0000\u0141\u0793"+ + "\u0001\u0000\u0000\u0000\u0143\u07a0\u0001\u0000\u0000\u0000\u0145\u07a6"+ + "\u0001\u0000\u0000\u0000\u0147\u07b1\u0001\u0000\u0000\u0000\u0149\u014a"+ + "\u0005{\u0000\u0000\u014a\u014b\u0006\u0000\u0000\u0000\u014b\u0004\u0001"+ + "\u0000\u0000\u0000\u014c\u014d\u0005}\u0000\u0000\u014d\u0006\u0001\u0000"+ + "\u0000\u0000\u014e\u014f\u0005[\u0000\u0000\u014f\b\u0001\u0000\u0000"+ + "\u0000\u0150\u0151\u0005]\u0000\u0000\u0151\n\u0001\u0000\u0000\u0000"+ + "\u0152\u0153\u0005(\u0000\u0000\u0153\f\u0001\u0000\u0000\u0000\u0154"+ + "\u0155\u0005)\u0000\u0000\u0155\u000e\u0001\u0000\u0000\u0000\u0156\u0157"+ + "\u0005;\u0000\u0000\u0157\u0010\u0001\u0000\u0000\u0000\u0158\u0159\u0005"+ + ":\u0000\u0000\u0159\u0012\u0001\u0000\u0000\u0000\u015a\u015b\u0005,\u0000"+ + "\u0000\u015b\u0014\u0001\u0000\u0000\u0000\u015c\u015d\u0005.\u0000\u0000"+ + "\u015d\u015e\u0005.\u0000\u0000\u015e\u0016\u0001\u0000\u0000\u0000\u015f"+ + "\u0160\u0005.\u0000\u0000\u0160\u0161\u0005.\u0000\u0000\u0161\u0162\u0005"+ + ".\u0000\u0000\u0162\u0018\u0001\u0000\u0000\u0000\u0163\u0164\u0005?\u0000"+ + "\u0000\u0164\u001a\u0001\u0000\u0000\u0000\u0165\u0166\u0005.\u0000\u0000"+ + "\u0166\u001c\u0001\u0000\u0000\u0000\u0167\u0168\u0005-\u0000\u0000\u0168"+ + "\u0169\u0005>\u0000\u0000\u0169\u001e\u0001\u0000\u0000\u0000\u016a\u016b"+ + "\u0005+\u0000\u0000\u016b \u0001\u0000\u0000\u0000\u016c\u016d\u0005-"+ + "\u0000\u0000\u016d\"\u0001\u0000\u0000\u0000\u016e\u016f\u0005*\u0000"+ + "\u0000\u016f$\u0001\u0000\u0000\u0000\u0170\u0171\u0005/\u0000\u0000\u0171"+ + "&\u0001\u0000\u0000\u0000\u0172\u0173\u0005%\u0000\u0000\u0173(\u0001"+ + "\u0000\u0000\u0000\u0174\u0175\u0005+\u0000\u0000\u0175\u0176\u0005+\u0000"+ + "\u0000\u0176*\u0001\u0000\u0000\u0000\u0177\u0178\u0005-\u0000\u0000\u0178"+ + "\u0179\u0005-\u0000\u0000\u0179,\u0001\u0000\u0000\u0000\u017a\u017b\u0005"+ + "&\u0000\u0000\u017b.\u0001\u0000\u0000\u0000\u017c\u017d\u0005~\u0000"+ + "\u0000\u017d0\u0001\u0000\u0000\u0000\u017e\u017f\u0005^\u0000\u0000\u017f"+ + "2\u0001\u0000\u0000\u0000\u0180\u0181\u0005|\u0000\u0000\u01814\u0001"+ + "\u0000\u0000\u0000\u0182\u0183\u0005<\u0000\u0000\u0183\u0184\u0005<\u0000"+ + "\u0000\u01846\u0001\u0000\u0000\u0000\u0185\u0186\u0005>\u0000\u0000\u0186"+ + "\u0187\u0005>\u0000\u0000\u01878\u0001\u0000\u0000\u0000\u0188\u0189\u0005"+ + "=\u0000\u0000\u0189\u018a\u0005=\u0000\u0000\u018a:\u0001\u0000\u0000"+ + "\u0000\u018b\u018c\u0005!\u0000\u0000\u018c\u018d\u0005=\u0000\u0000\u018d"+ + "<\u0001\u0000\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f>\u0001"+ + "\u0000\u0000\u0000\u0190\u0191\u0005<\u0000\u0000\u0191\u0192\u0005=\u0000"+ + "\u0000\u0192@\u0001\u0000\u0000\u0000\u0193\u0194\u0005>\u0000\u0000\u0194"+ + "\u0195\u0005=\u0000\u0000\u0195B\u0001\u0000\u0000\u0000\u0196\u0197\u0005"+ + ">\u0000\u0000\u0197D\u0001\u0000\u0000\u0000\u0198\u0199\u0005&\u0000"+ + "\u0000\u0199\u019a\u0005&\u0000\u0000\u019aF\u0001\u0000\u0000\u0000\u019b"+ + "\u019c\u0005|\u0000\u0000\u019c\u019d\u0005|\u0000\u0000\u019dH\u0001"+ + "\u0000\u0000\u0000\u019e\u019f\u0005=\u0000\u0000\u019fJ\u0001\u0000\u0000"+ + "\u0000\u01a0\u01a1\u0005+\u0000\u0000\u01a1\u01b7\u0005=\u0000\u0000\u01a2"+ + "\u01a3\u0005-\u0000\u0000\u01a3\u01b7\u0005=\u0000\u0000\u01a4\u01a5\u0005"+ + "*\u0000\u0000\u01a5\u01b7\u0005=\u0000\u0000\u01a6\u01a7\u0005/\u0000"+ + "\u0000\u01a7\u01b7\u0005=\u0000\u0000\u01a8\u01a9\u0005%\u0000\u0000\u01a9"+ + "\u01b7\u0005=\u0000\u0000\u01aa\u01ab\u0005<\u0000\u0000\u01ab\u01ac\u0005"+ + "<\u0000\u0000\u01ac\u01b7\u0005=\u0000\u0000\u01ad\u01ae\u0005>\u0000"+ + "\u0000\u01ae\u01af\u0005>\u0000\u0000\u01af\u01b7\u0005=\u0000\u0000\u01b0"+ + "\u01b1\u0005&\u0000\u0000\u01b1\u01b7\u0005=\u0000\u0000\u01b2\u01b3\u0005"+ + "|\u0000\u0000\u01b3\u01b7\u0005=\u0000\u0000\u01b4\u01b5\u0005^\u0000"+ + "\u0000\u01b5\u01b7\u0005=\u0000\u0000\u01b6\u01a0\u0001\u0000\u0000\u0000"+ + "\u01b6\u01a2\u0001\u0000\u0000\u0000\u01b6\u01a4\u0001\u0000\u0000\u0000"+ + "\u01b6\u01a6\u0001\u0000\u0000\u0000\u01b6\u01a8\u0001\u0000\u0000\u0000"+ + "\u01b6\u01aa\u0001\u0000\u0000\u0000\u01b6\u01ad\u0001\u0000\u0000\u0000"+ + "\u01b6\u01b0\u0001\u0000\u0000\u0000\u01b6\u01b2\u0001\u0000\u0000\u0000"+ + "\u01b6\u01b4\u0001\u0000\u0000\u0000\u01b7L\u0001\u0000\u0000\u0000\u01b8"+ + "\u01b9\u0005t\u0000\u0000\u01b9\u01ba\u0005y\u0000\u0000\u01ba\u01bb\u0005"+ + "p\u0000\u0000\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005d\u0000"+ + "\u0000\u01bd\u01be\u0005e\u0000\u0000\u01be\u01bf\u0005f\u0000\u0000\u01bf"+ + "N\u0001\u0000\u0000\u0000\u01c0\u01c1\u0005c\u0000\u0000\u01c1\u01c2\u0005"+ + "o\u0000\u0000\u01c2\u01c3\u0005n\u0000\u0000\u01c3\u01c4\u0005s\u0000"+ + "\u0000\u01c4\u01c5\u0005t\u0000\u0000\u01c5P\u0001\u0000\u0000\u0000\u01c6"+ + "\u01c7\u0005e\u0000\u0000\u01c7\u01c8\u0005x\u0000\u0000\u01c8\u01c9\u0005"+ + "t\u0000\u0000\u01c9\u01ca\u0005e\u0000\u0000\u01ca\u01cb\u0005r\u0000"+ + "\u0000\u01cb\u01cc\u0005n\u0000\u0000\u01ccR\u0001\u0000\u0000\u0000\u01cd"+ + "\u01ce\u0005_\u0000\u0000\u01ce\u01cf\u0005_\u0000\u0000\u01cf\u01d0\u0005"+ + "e\u0000\u0000\u01d0\u01d1\u0005x\u0000\u0000\u01d1\u01d2\u0005p\u0000"+ + "\u0000\u01d2\u01d3\u0005o\u0000\u0000\u01d3\u01d4\u0005r\u0000\u0000\u01d4"+ + "\u01d5\u0005t\u0000\u0000\u01d5T\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005"+ + "_\u0000\u0000\u01d7\u01d8\u0005_\u0000\u0000\u01d8\u01d9\u0005a\u0000"+ + "\u0000\u01d9\u01da\u0005l\u0000\u0000\u01da\u01db\u0005i\u0000\u0000\u01db"+ + "\u01dc\u0005g\u0000\u0000\u01dc\u01dd\u0005n\u0000\u0000\u01ddV\u0001"+ + "\u0000\u0000\u0000\u01de\u01df\u0005i\u0000\u0000\u01df\u01e0\u0005n\u0000"+ + "\u0000\u01e0\u01e1\u0005l\u0000\u0000\u01e1\u01e2\u0005i\u0000\u0000\u01e2"+ + "\u01e3\u0005n\u0000\u0000\u01e3\u01e4\u0005e\u0000\u0000\u01e4X\u0001"+ + "\u0000\u0000\u0000\u01e5\u01e6\u0005v\u0000\u0000\u01e6\u01e7\u0005o\u0000"+ + "\u0000\u01e7\u01e8\u0005l\u0000\u0000\u01e8\u01e9\u0005a\u0000\u0000\u01e9"+ + "\u01ea\u0005t\u0000\u0000\u01ea\u01eb\u0005i\u0000\u0000\u01eb\u01ec\u0005"+ + "l\u0000\u0000\u01ec\u01ed\u0005e\u0000\u0000\u01edZ\u0001\u0000\u0000"+ + "\u0000\u01ee\u01ef\u0005s\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0"+ + "\u01f1\u0005a\u0000\u0000\u01f1\u01f2\u0005t\u0000\u0000\u01f2\u01f3\u0005"+ + "i\u0000\u0000\u01f3\u01f4\u0005c\u0000\u0000\u01f4\\\u0001\u0000\u0000"+ + "\u0000\u01f5\u01f6\u0005_\u0000\u0000\u01f6\u01f7\u0005_\u0000\u0000\u01f7"+ + "\u01f8\u0005i\u0000\u0000\u01f8\u01f9\u0005n\u0000\u0000\u01f9\u01fa\u0005"+ + "t\u0000\u0000\u01fa\u01fb\u0005e\u0000\u0000\u01fb\u01fc\u0005r\u0000"+ + "\u0000\u01fc\u01fd\u0005r\u0000\u0000\u01fd\u01fe\u0005u\u0000\u0000\u01fe"+ + "\u01ff\u0005p\u0000\u0000\u01ff\u0200\u0005t\u0000\u0000\u0200^\u0001"+ + "\u0000\u0000\u0000\u0201\u0202\u0005r\u0000\u0000\u0202\u0203\u0005e\u0000"+ + "\u0000\u0203\u0204\u0005g\u0000\u0000\u0204\u0205\u0005i\u0000\u0000\u0205"+ + "\u0206\u0005s\u0000\u0000\u0206\u0207\u0005t\u0000\u0000\u0207\u0208\u0005"+ + "e\u0000\u0000\u0208\u0209\u0005r\u0000\u0000\u0209`\u0001\u0000\u0000"+ + "\u0000\u020a\u020b\u0005_\u0000\u0000\u020b\u020c\u0005_\u0000\u0000\u020c"+ + "\u020d\u0005z\u0000\u0000\u020d\u020e\u0005p\u0000\u0000\u020e\u020f\u0005"+ + "_\u0000\u0000\u020f\u0210\u0005r\u0000\u0000\u0210\u0211\u0005e\u0000"+ + "\u0000\u0211\u0212\u0005s\u0000\u0000\u0212\u0213\u0005e\u0000\u0000\u0213"+ + "\u0214\u0005r\u0000\u0000\u0214\u0215\u0005v\u0000\u0000\u0215\u0216\u0005"+ + "e\u0000\u0000\u0216b\u0001\u0000\u0000\u0000\u0217\u0218\u0005_\u0000"+ + "\u0000\u0218\u0219\u0005_\u0000\u0000\u0219\u021a\u0005a\u0000\u0000\u021a"+ + "\u021b\u0005d\u0000\u0000\u021b\u021c\u0005d\u0000\u0000\u021c\u021d\u0005"+ + "r\u0000\u0000\u021d\u021e\u0005e\u0000\u0000\u021e\u021f\u0005s\u0000"+ + "\u0000\u021f\u0220\u0005s\u0000\u0000\u0220d\u0001\u0000\u0000\u0000\u0221"+ + "\u0222\u0005_\u0000\u0000\u0222\u0223\u0005_\u0000\u0000\u0223\u0224\u0005"+ + "z\u0000\u0000\u0224\u0225\u0005p\u0000\u0000\u0225f\u0001\u0000\u0000"+ + "\u0000\u0226\u0227\u0005_\u0000\u0000\u0227\u0228\u0005_\u0000\u0000\u0228"+ + "\u0229\u0005m\u0000\u0000\u0229\u022a\u0005e\u0000\u0000\u022a\u022b\u0005"+ + "m\u0000\u0000\u022bh\u0001\u0000\u0000\u0000\u022c\u022d\u0005_\u0000"+ + "\u0000\u022d\u022e\u0005_\u0000\u0000\u022e\u022f\u0005f\u0000\u0000\u022f"+ + "\u0230\u0005a\u0000\u0000\u0230\u0231\u0005r\u0000\u0000\u0231j\u0001"+ + "\u0000\u0000\u0000\u0232\u0233\u0005_\u0000\u0000\u0233\u0234\u0005_\u0000"+ + "\u0000\u0234\u0235\u0005n\u0000\u0000\u0235\u0236\u0005e\u0000\u0000\u0236"+ + "\u0237\u0005a\u0000\u0000\u0237\u0238\u0005r\u0000\u0000\u0238l\u0001"+ + "\u0000\u0000\u0000\u0239\u023a\u0005_\u0000\u0000\u023a\u023b\u0005_\u0000"+ + "\u0000\u023b\u023c\u0005s\u0000\u0000\u023c\u023d\u0005s\u0000\u0000\u023d"+ + "\u023e\u0005a\u0000\u0000\u023en\u0001\u0000\u0000\u0000\u023f\u0240\u0005"+ + "_\u0000\u0000\u0240\u0241\u0005_\u0000\u0000\u0241\u0242\u0005m\u0000"+ + "\u0000\u0242\u0243\u0005a\u0000\u0000\u0243p\u0001\u0000\u0000\u0000\u0244"+ + "\u0245\u0005_\u0000\u0000\u0245\u0246\u0005_\u0000\u0000\u0246\u0247\u0005"+ + "i\u0000\u0000\u0247\u0248\u0005n\u0000\u0000\u0248\u0249\u0005t\u0000"+ + "\u0000\u0249\u024a\u0005r\u0000\u0000\u024a\u024b\u0005i\u0000\u0000\u024b"+ + "\u024c\u0005n\u0000\u0000\u024c\u024d\u0005s\u0000\u0000\u024d\u024e\u0005"+ + "i\u0000\u0000\u024e\u024f\u0005c\u0000\u0000\u024fr\u0001\u0000\u0000"+ + "\u0000\u0250\u0251\u0005_\u0000\u0000\u0251\u0252\u0005_\u0000\u0000\u0252"+ + "\u0253\u0005s\u0000\u0000\u0253\u0254\u0005t\u0000\u0000\u0254\u0255\u0005"+ + "a\u0000\u0000\u0255\u0256\u0005c\u0000\u0000\u0256\u0257\u0005k\u0000"+ + "\u0000\u0257\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259"+ + "\u025a\u0005l\u0000\u0000\u025a\u027d\u0005l\u0000\u0000\u025b\u025c\u0005"+ + "_\u0000\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005p\u0000"+ + "\u0000\u025e\u025f\u0005h\u0000\u0000\u025f\u0260\u0005i\u0000\u0000\u0260"+ + "\u0261\u0005c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005"+ + "l\u0000\u0000\u0263\u027d\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000"+ + "\u0000\u0265\u0266\u0005_\u0000\u0000\u0266\u0267\u0005v\u0000\u0000\u0267"+ + "\u0268\u0005a\u0000\u0000\u0268\u0269\u0005r\u0000\u0000\u0269\u026a\u0005"+ + "c\u0000\u0000\u026a\u026b\u0005a\u0000\u0000\u026b\u026c\u0005l\u0000"+ + "\u0000\u026c\u027d\u0005l\u0000\u0000\u026d\u026e\u0005_\u0000\u0000\u026e"+ + "\u026f\u0005_\u0000\u0000\u026f\u0270\u0005i\u0000\u0000\u0270\u0271\u0005"+ + "n\u0000\u0000\u0271\u0272\u0005t\u0000\u0000\u0272\u0273\u0005r\u0000"+ + "\u0000\u0273\u0274\u0005i\u0000\u0000\u0274\u0275\u0005n\u0000\u0000\u0275"+ + "\u0276\u0005s\u0000\u0000\u0276\u0277\u0005i\u0000\u0000\u0277\u0278\u0005"+ + "c\u0000\u0000\u0278\u0279\u0005c\u0000\u0000\u0279\u027a\u0005a\u0000"+ + "\u0000\u027a\u027b\u0005l\u0000\u0000\u027b\u027d\u0005l\u0000\u0000\u027c"+ + "\u0250\u0001\u0000\u0000\u0000\u027c\u025b\u0001\u0000\u0000\u0000\u027c"+ + "\u0264\u0001\u0000\u0000\u0000\u027c\u026d\u0001\u0000\u0000\u0000\u027d"+ + "t\u0001\u0000\u0000\u0000\u027e\u027f\u0005i\u0000\u0000\u027f\u0280\u0005"+ + "f\u0000\u0000\u0280v\u0001\u0000\u0000\u0000\u0281\u0282\u0005e\u0000"+ + "\u0000\u0282\u0283\u0005l\u0000\u0000\u0283\u0284\u0005s\u0000\u0000\u0284"+ + "\u0285\u0005e\u0000\u0000\u0285x\u0001\u0000\u0000\u0000\u0286\u0287\u0005"+ + "w\u0000\u0000\u0287\u0288\u0005h\u0000\u0000\u0288\u0289\u0005i\u0000"+ + "\u0000\u0289\u028a\u0005l\u0000\u0000\u028a\u028b\u0005e\u0000\u0000\u028b"+ + "z\u0001\u0000\u0000\u0000\u028c\u028d\u0005d\u0000\u0000\u028d\u028e\u0005"+ + "o\u0000\u0000\u028e|\u0001\u0000\u0000\u0000\u028f\u0290\u0005f\u0000"+ + "\u0000\u0290\u0291\u0005o\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292"+ + "~\u0001\u0000\u0000\u0000\u0293\u0294\u0005s\u0000\u0000\u0294\u0295\u0005"+ + "w\u0000\u0000\u0295\u0296\u0005i\u0000\u0000\u0296\u0297\u0005t\u0000"+ + "\u0000\u0297\u0298\u0005c\u0000\u0000\u0298\u0299\u0005h\u0000\u0000\u0299"+ + "\u0080\u0001\u0000\u0000\u0000\u029a\u029b\u0005r\u0000\u0000\u029b\u029c"+ + "\u0005e\u0000\u0000\u029c\u029d\u0005t\u0000\u0000\u029d\u029e\u0005u"+ + "\u0000\u0000\u029e\u029f\u0005r\u0000\u0000\u029f\u02a0\u0005n\u0000\u0000"+ + "\u02a0\u0082\u0001\u0000\u0000\u0000\u02a1\u02a2\u0005b\u0000\u0000\u02a2"+ + "\u02a3\u0005r\u0000\u0000\u02a3\u02a4\u0005e\u0000\u0000\u02a4\u02a5\u0005"+ + "a\u0000\u0000\u02a5\u02a6\u0005k\u0000\u0000\u02a6\u0084\u0001\u0000\u0000"+ + "\u0000\u02a7\u02a8\u0005c\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9"+ + "\u02aa\u0005n\u0000\u0000\u02aa\u02ab\u0005t\u0000\u0000\u02ab\u02ac\u0005"+ + "i\u0000\u0000\u02ac\u02ad\u0005n\u0000\u0000\u02ad\u02ae\u0005u\u0000"+ + "\u0000\u02ae\u02af\u0005e\u0000\u0000\u02af\u0086\u0001\u0000\u0000\u0000"+ + "\u02b0\u02b1\u0005g\u0000\u0000\u02b1\u02b2\u0005o\u0000\u0000\u02b2\u02b3"+ + "\u0005t\u0000\u0000\u02b3\u02b4\u0005o\u0000\u0000\u02b4\u0088\u0001\u0000"+ + "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005s\u0000\u0000"+ + "\u02b7\u02b8\u0005m\u0000\u0000\u02b8\u02b9\u0001\u0000\u0000\u0000\u02b9"+ + "\u02ba\u0006C\u0001\u0000\u02ba\u008a\u0001\u0000\u0000\u0000\u02bb\u02bc"+ + "\u0005d\u0000\u0000\u02bc\u02bd\u0005e\u0000\u0000\u02bd\u02be\u0005f"+ + "\u0000\u0000\u02be\u02bf\u0005a\u0000\u0000\u02bf\u02c0\u0005u\u0000\u0000"+ + "\u02c0\u02c1\u0005l\u0000\u0000\u02c1\u02c2\u0005t\u0000\u0000\u02c2\u008c"+ + "\u0001\u0000\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005"+ + "a\u0000\u0000\u02c5\u02c6\u0005s\u0000\u0000\u02c6\u02c7\u0005e\u0000"+ + "\u0000\u02c7\u008e\u0001\u0000\u0000\u0000\u02c8\u02c9\u0005s\u0000\u0000"+ + "\u02c9\u02ca\u0005t\u0000\u0000\u02ca\u02cb\u0005r\u0000\u0000\u02cb\u02cc"+ + "\u0005u\u0000\u0000\u02cc\u02cd\u0005c\u0000\u0000\u02cd\u02ce\u0005t"+ + "\u0000\u0000\u02ce\u0090\u0001\u0000\u0000\u0000\u02cf\u02d0\u0005u\u0000"+ + "\u0000\u02d0\u02d1\u0005n\u0000\u0000\u02d1\u02d2\u0005i\u0000\u0000\u02d2"+ + "\u02d3\u0005o\u0000\u0000\u02d3\u02d4\u0005n\u0000\u0000\u02d4\u0092\u0001"+ + "\u0000\u0000\u0000\u02d5\u02d6\u0005e\u0000\u0000\u02d6\u02d7\u0005n\u0000"+ + "\u0000\u02d7\u02d8\u0005u\u0000\u0000\u02d8\u02d9\u0005m\u0000\u0000\u02d9"+ + "\u0094\u0001\u0000\u0000\u0000\u02da\u02db\u0005s\u0000\u0000\u02db\u02dc"+ + "\u0005i\u0000\u0000\u02dc\u02dd\u0005z\u0000\u0000\u02dd\u02de\u0005e"+ + "\u0000\u0000\u02de\u02df\u0005o\u0000\u0000\u02df\u02e0\u0005f\u0000\u0000"+ + "\u02e0\u0096\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005t\u0000\u0000\u02e2"+ + "\u02e3\u0005y\u0000\u0000\u02e3\u02e4\u0005p\u0000\u0000\u02e4\u02e5\u0005"+ + "e\u0000\u0000\u02e5\u02e6\u0005i\u0000\u0000\u02e6\u02e7\u0005d\u0000"+ + "\u0000\u02e7\u0098\u0001\u0000\u0000\u0000\u02e8\u02e9\u0005d\u0000\u0000"+ + "\u02e9\u02ea\u0005e\u0000\u0000\u02ea\u02eb\u0005f\u0000\u0000\u02eb\u02ec"+ + "\u0005i\u0000\u0000\u02ec\u02ed\u0005n\u0000\u0000\u02ed\u02ee\u0005e"+ + "\u0000\u0000\u02ee\u02ef\u0005d\u0000\u0000\u02ef\u009a\u0001\u0000\u0000"+ + "\u0000\u02f0\u02f1\u0005k\u0000\u0000\u02f1\u02f2\u0005i\u0000\u0000\u02f2"+ + "\u02f3\u0005c\u0000\u0000\u02f3\u02f4\u0005k\u0000\u0000\u02f4\u02f5\u0005"+ + "a\u0000\u0000\u02f5\u02f6\u0005s\u0000\u0000\u02f6\u02f7\u0005m\u0000"+ + "\u0000\u02f7\u009c\u0001\u0000\u0000\u0000\u02f8\u02f9\u0005!\u0000\u0000"+ + "\u02f9\u009e\u0001\u0000\u0000\u0000\u02fa\u02fb\u0005s\u0000\u0000\u02fb"+ + "\u02fc\u0005i\u0000\u0000\u02fc\u02fd\u0005g\u0000\u0000\u02fd\u02fe\u0005"+ + "n\u0000\u0000\u02fe\u02ff\u0005e\u0000\u0000\u02ff\u032e\u0005d\u0000"+ + "\u0000\u0300\u0301\u0005u\u0000\u0000\u0301\u0302\u0005n\u0000\u0000\u0302"+ + "\u0303\u0005s\u0000\u0000\u0303\u0304\u0005i\u0000\u0000\u0304\u0305\u0005"+ + "g\u0000\u0000\u0305\u0306\u0005n\u0000\u0000\u0306\u0307\u0005e\u0000"+ + "\u0000\u0307\u032e\u0005d\u0000\u0000\u0308\u0309\u0005b\u0000\u0000\u0309"+ + "\u030a\u0005y\u0000\u0000\u030a\u030b\u0005t\u0000\u0000\u030b\u032e\u0005"+ + "e\u0000\u0000\u030c\u030d\u0005w\u0000\u0000\u030d\u030e\u0005o\u0000"+ + "\u0000\u030e\u030f\u0005r\u0000\u0000\u030f\u032e\u0005d\u0000\u0000\u0310"+ + "\u0311\u0005d\u0000\u0000\u0311\u0312\u0005w\u0000\u0000\u0312\u0313\u0005"+ + "o\u0000\u0000\u0313\u0314\u0005r\u0000\u0000\u0314\u032e\u0005d\u0000"+ + "\u0000\u0315\u0316\u0005b\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317"+ + "\u0318\u0005o\u0000\u0000\u0318\u032e\u0005l\u0000\u0000\u0319\u031a\u0005"+ + "c\u0000\u0000\u031a\u031b\u0005h\u0000\u0000\u031b\u031c\u0005a\u0000"+ + "\u0000\u031c\u032e\u0005r\u0000\u0000\u031d\u031e\u0005s\u0000\u0000\u031e"+ + "\u031f\u0005h\u0000\u0000\u031f\u0320\u0005o\u0000\u0000\u0320\u0321\u0005"+ + "r\u0000\u0000\u0321\u032e\u0005t\u0000\u0000\u0322\u0323\u0005i\u0000"+ + "\u0000\u0323\u0324\u0005n\u0000\u0000\u0324\u032e\u0005t\u0000\u0000\u0325"+ + "\u0326\u0005l\u0000\u0000\u0326\u0327\u0005o\u0000\u0000\u0327\u0328\u0005"+ + "n\u0000\u0000\u0328\u032e\u0005g\u0000\u0000\u0329\u032a\u0005v\u0000"+ + "\u0000\u032a\u032b\u0005o\u0000\u0000\u032b\u032c\u0005i\u0000\u0000\u032c"+ + "\u032e\u0005d\u0000\u0000\u032d\u02fa\u0001\u0000\u0000\u0000\u032d\u0300"+ + "\u0001\u0000\u0000\u0000\u032d\u0308\u0001\u0000\u0000\u0000\u032d\u030c"+ + "\u0001\u0000\u0000\u0000\u032d\u0310\u0001\u0000\u0000\u0000\u032d\u0315"+ + "\u0001\u0000\u0000\u0000\u032d\u0319\u0001\u0000\u0000\u0000\u032d\u031d"+ + "\u0001\u0000\u0000\u0000\u032d\u0322\u0001\u0000\u0000\u0000\u032d\u0325"+ + "\u0001\u0000\u0000\u0000\u032d\u0329\u0001\u0000\u0000\u0000\u032e\u00a0"+ + "\u0001\u0000\u0000\u0000\u032f\u0330\u0005t\u0000\u0000\u0330\u0331\u0005"+ + "r\u0000\u0000\u0331\u0332\u0005u\u0000\u0000\u0332\u0339\u0005e\u0000"+ + "\u0000\u0333\u0334\u0005f\u0000\u0000\u0334\u0335\u0005a\u0000\u0000\u0335"+ + "\u0336\u0005l\u0000\u0000\u0336\u0337\u0005s\u0000\u0000\u0337\u0339\u0005"+ + "e\u0000\u0000\u0338\u032f\u0001\u0000\u0000\u0000\u0338\u0333\u0001\u0000"+ + "\u0000\u0000\u0339\u00a2\u0001\u0000\u0000\u0000\u033a\u033b\u0005{\u0000"+ + "\u0000\u033b\u033c\u0005{\u0000\u0000\u033c\u0340\u0001\u0000\u0000\u0000"+ + "\u033d\u033f\t\u0000\u0000\u0000\u033e\u033d\u0001\u0000\u0000\u0000\u033f"+ + "\u0342\u0001\u0000\u0000\u0000\u0340\u0341\u0001\u0000\u0000\u0000\u0340"+ + "\u033e\u0001\u0000\u0000\u0000\u0341\u0343\u0001\u0000\u0000\u0000\u0342"+ + "\u0340\u0001\u0000\u0000\u0000\u0343\u0344\u0005}\u0000\u0000\u0344\u0345"+ + "\u0005}\u0000\u0000\u0345\u00a4\u0001\u0000\u0000\u0000\u0346\u0347\u0005"+ + "#\u0000\u0000\u0347\u0348\u0005i\u0000\u0000\u0348\u0349\u0005m\u0000"+ + "\u0000\u0349\u034a\u0005p\u0000\u0000\u034a\u034b\u0005o\u0000\u0000\u034b"+ + "\u034c\u0005r\u0000\u0000\u034c\u034d\u0005t\u0000\u0000\u034d\u034e\u0001"+ + "\u0000\u0000\u0000\u034e\u034f\u0006Q\u0002\u0000\u034f\u00a6\u0001\u0000"+ + "\u0000\u0000\u0350\u0351\u0005#\u0000\u0000\u0351\u0352\u0005i\u0000\u0000"+ + "\u0352\u0353\u0005n\u0000\u0000\u0353\u0354\u0005c\u0000\u0000\u0354\u0355"+ + "\u0005l\u0000\u0000\u0355\u0356\u0005u\u0000\u0000\u0356\u0357\u0005d"+ + "\u0000\u0000\u0357\u0358\u0005e\u0000\u0000\u0358\u0359\u0001\u0000\u0000"+ + "\u0000\u0359\u035a\u0006R\u0003\u0000\u035a\u00a8\u0001\u0000\u0000\u0000"+ + "\u035b\u035c\u0005#\u0000\u0000\u035c\u035d\u0005p\u0000\u0000\u035d\u035e"+ + "\u0005r\u0000\u0000\u035e\u035f\u0005a\u0000\u0000\u035f\u0360\u0005g"+ + "\u0000\u0000\u0360\u0361\u0005m\u0000\u0000\u0361\u0362\u0005a\u0000\u0000"+ + "\u0362\u00aa\u0001\u0000\u0000\u0000\u0363\u0364\u0005#\u0000\u0000\u0364"+ + "\u0365\u0005d\u0000\u0000\u0365\u0366\u0005e\u0000\u0000\u0366\u0367\u0005"+ + "f\u0000\u0000\u0367\u0368\u0005i\u0000\u0000\u0368\u0369\u0005n\u0000"+ + "\u0000\u0369\u036a\u0005e\u0000\u0000\u036a\u00ac\u0001\u0000\u0000\u0000"+ + "\u036b\u036c\u0005\\\u0000\u0000\u036c\u0371\u0005\n\u0000\u0000\u036d"+ + "\u036e\u0005\\\u0000\u0000\u036e\u036f\u0005\r\u0000\u0000\u036f\u0371"+ + "\u0005\n\u0000\u0000\u0370\u036b\u0001\u0000\u0000\u0000\u0370\u036d\u0001"+ + "\u0000\u0000\u0000\u0371\u00ae\u0001\u0000\u0000\u0000\u0372\u0373\u0005"+ + "#\u0000\u0000\u0373\u0374\u0005u\u0000\u0000\u0374\u0375\u0005n\u0000"+ + "\u0000\u0375\u0376\u0005d\u0000\u0000\u0376\u0377\u0005e\u0000\u0000\u0377"+ + "\u0378\u0005f\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000\u0379\u037a"+ + "\u0005#\u0000\u0000\u037a\u037b\u0005i\u0000\u0000\u037b\u037c\u0005f"+ + "\u0000\u0000\u037c\u037d\u0005d\u0000\u0000\u037d\u037e\u0005e\u0000\u0000"+ + "\u037e\u037f\u0005f\u0000\u0000\u037f\u00b2\u0001\u0000\u0000\u0000\u0380"+ + "\u0381\u0005#\u0000\u0000\u0381\u0382\u0005i\u0000\u0000\u0382\u0383\u0005"+ + "f\u0000\u0000\u0383\u0384\u0005n\u0000\u0000\u0384\u0385\u0005d\u0000"+ + "\u0000\u0385\u0386\u0005e\u0000\u0000\u0386\u0387\u0005f\u0000\u0000\u0387"+ + "\u00b4\u0001\u0000\u0000\u0000\u0388\u0389\u0005#\u0000\u0000\u0389\u038a"+ + "\u0005i\u0000\u0000\u038a\u038b\u0005f\u0000\u0000\u038b\u00b6\u0001\u0000"+ + "\u0000\u0000\u038c\u038d\u0005#\u0000\u0000\u038d\u038e\u0005e\u0000\u0000"+ + "\u038e\u038f\u0005l\u0000\u0000\u038f\u0390\u0005i\u0000\u0000\u0390\u0391"+ + "\u0005f\u0000\u0000\u0391\u00b8\u0001\u0000\u0000\u0000\u0392\u0393\u0005"+ + "#\u0000\u0000\u0393\u0394\u0005e\u0000\u0000\u0394\u0395\u0005l\u0000"+ + "\u0000\u0395\u0396\u0005s\u0000\u0000\u0396\u0397\u0005e\u0000\u0000\u0397"+ + "\u00ba\u0001\u0000\u0000\u0000\u0398\u0399\u0005#\u0000\u0000\u0399\u039a"+ + "\u0005e\u0000\u0000\u039a\u039b\u0005n\u0000\u0000\u039b\u039c\u0005d"+ + "\u0000\u0000\u039c\u039d\u0005i\u0000\u0000\u039d\u039e\u0005f\u0000\u0000"+ + "\u039e\u00bc\u0001\u0000\u0000\u0000\u039f\u03a0\u0005#\u0000\u0000\u03a0"+ + "\u03a1\u0005e\u0000\u0000\u03a1\u03a2\u0005r\u0000\u0000\u03a2\u03a3\u0005"+ + "r\u0000\u0000\u03a3\u03a4\u0005o\u0000\u0000\u03a4\u03a5\u0005r\u0000"+ + "\u0000\u03a5\u00be\u0001\u0000\u0000\u0000\u03a6\u03a7\u0005#\u0000\u0000"+ + "\u03a7\u03a8\u0003\u00dbl\u0000\u03a8\u00c0\u0001\u0000\u0000\u0000\u03a9"+ + "\u03aa\u0005#\u0000\u0000\u03aa\u03ab\u0003\u00dbl\u0000\u03ab\u00c2\u0001"+ + "\u0000\u0000\u0000\u03ac\u03af\u0003\u00c5a\u0000\u03ad\u03af\u0003\u00cd"+ + "e\u0000\u03ae\u03ac\u0001\u0000\u0000\u0000\u03ae\u03ad\u0001\u0000\u0000"+ + "\u0000\u03af\u00c4\u0001\u0000\u0000\u0000\u03b0\u03b4\u0003\u00c7b\u0000"+ + "\u03b1\u03b4\u0003\u00c9c\u0000\u03b2\u03b4\u0003\u00cbd\u0000\u03b3\u03b0"+ + "\u0001\u0000\u0000\u0000\u03b3\u03b1\u0001\u0000\u0000\u0000\u03b3\u03b2"+ + "\u0001\u0000\u0000\u0000\u03b4\u00c6\u0001\u0000\u0000\u0000\u03b5\u03bb"+ + "\u0005%\u0000\u0000\u03b6\u03b7\u00050\u0000\u0000\u03b7\u03bb\u0005b"+ + "\u0000\u0000\u03b8\u03b9\u00050\u0000\u0000\u03b9\u03bb\u0005B\u0000\u0000"+ + "\u03ba\u03b5\u0001\u0000\u0000\u0000\u03ba\u03b6\u0001\u0000\u0000\u0000"+ + "\u03ba\u03b8\u0001\u0000\u0000\u0000\u03bb\u03bf\u0001\u0000\u0000\u0000"+ + "\u03bc\u03be\u0003\u00d5i\u0000\u03bd\u03bc\u0001\u0000\u0000\u0000\u03be"+ + "\u03c1\u0001\u0000\u0000\u0000\u03bf\u03bd\u0001\u0000\u0000\u0000\u03bf"+ + "\u03c0\u0001\u0000\u0000\u0000\u03c0\u03c2\u0001\u0000\u0000\u0000\u03c1"+ + "\u03bf\u0001\u0000\u0000\u0000\u03c2\u03c4\u0005.\u0000\u0000\u03c3\u03c5"+ + "\u0003\u00d5i\u0000\u03c4\u03c3\u0001\u0000\u0000\u0000\u03c5\u03c6\u0001"+ + "\u0000\u0000\u0000\u03c6\u03c4\u0001\u0000\u0000\u0000\u03c6\u03c7\u0001"+ + "\u0000\u0000\u0000\u03c7\u00c8\u0001\u0000\u0000\u0000\u03c8\u03ca\u0003"+ + "\u00d7j\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03ca\u03cd\u0001\u0000"+ + "\u0000\u0000\u03cb\u03c9\u0001\u0000\u0000\u0000\u03cb\u03cc\u0001\u0000"+ + "\u0000\u0000\u03cc\u03ce\u0001\u0000\u0000\u0000\u03cd\u03cb\u0001\u0000"+ + "\u0000\u0000\u03ce\u03d0\u0005.\u0000\u0000\u03cf\u03d1\u0003\u00d7j\u0000"+ + "\u03d0\u03cf\u0001\u0000\u0000\u0000\u03d1\u03d2\u0001\u0000\u0000\u0000"+ + "\u03d2\u03d0\u0001\u0000\u0000\u0000\u03d2\u03d3\u0001\u0000\u0000\u0000"+ + "\u03d3\u00ca\u0001\u0000\u0000\u0000\u03d4\u03da\u0005$\u0000\u0000\u03d5"+ + "\u03d6\u00050\u0000\u0000\u03d6\u03da\u0005x\u0000\u0000\u03d7\u03d8\u0005"+ + "0\u0000\u0000\u03d8\u03da\u0005X\u0000\u0000\u03d9\u03d4\u0001\u0000\u0000"+ + "\u0000\u03d9\u03d5\u0001\u0000\u0000\u0000\u03d9\u03d7\u0001\u0000\u0000"+ + "\u0000\u03da\u03de\u0001\u0000\u0000\u0000\u03db\u03dd\u0003\u00d9k\u0000"+ + "\u03dc\u03db\u0001\u0000\u0000\u0000\u03dd\u03e0\u0001\u0000\u0000\u0000"+ + "\u03de\u03dc\u0001\u0000\u0000\u0000\u03de\u03df\u0001\u0000\u0000\u0000"+ + "\u03df\u03e1\u0001\u0000\u0000\u0000\u03e0\u03de\u0001\u0000\u0000\u0000"+ + "\u03e1\u03e3\u0005.\u0000\u0000\u03e2\u03e4\u0003\u00d9k\u0000\u03e3\u03e2"+ + "\u0001\u0000\u0000\u0000\u03e4\u03e5\u0001\u0000\u0000\u0000\u03e5\u03e3"+ + "\u0001\u0000\u0000\u0000\u03e5\u03e6\u0001\u0000\u0000\u0000\u03e6\u00cc"+ + "\u0001\u0000\u0000\u0000\u03e7\u03eb\u0003\u00d1g\u0000\u03e8\u03eb\u0003"+ + "\u00d3h\u0000\u03e9\u03eb\u0003\u00cff\u0000\u03ea\u03e7\u0001\u0000\u0000"+ + "\u0000\u03ea\u03e8\u0001\u0000\u0000\u0000\u03ea\u03e9\u0001\u0000\u0000"+ + "\u0000\u03eb\u03ef\u0001\u0000\u0000\u0000\u03ec\u03ed\u0007\u0000\u0000"+ + "\u0000\u03ed\u03f0\u0007\u0001\u0000\u0000\u03ee\u03f0\u0007\u0002\u0000"+ + "\u0000\u03ef\u03ec\u0001\u0000\u0000\u0000\u03ef\u03ee\u0001\u0000\u0000"+ + "\u0000\u03ef\u03f0\u0001\u0000\u0000\u0000\u03f0\u00ce\u0001\u0000\u0000"+ + "\u0000\u03f1\u03f2\u00050\u0000\u0000\u03f2\u03f4\u0007\u0003\u0000\u0000"+ + "\u03f3\u03f5\u0003\u00d5i\u0000\u03f4\u03f3\u0001\u0000\u0000\u0000\u03f5"+ + "\u03f6\u0001\u0000\u0000\u0000\u03f6\u03f4\u0001\u0000\u0000\u0000\u03f6"+ + "\u03f7\u0001\u0000\u0000\u0000\u03f7\u03ff\u0001\u0000\u0000\u0000\u03f8"+ + "\u03fa\u0005%\u0000\u0000\u03f9\u03fb\u0003\u00d5i\u0000\u03fa\u03f9\u0001"+ + "\u0000\u0000\u0000\u03fb\u03fc\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001"+ + "\u0000\u0000\u0000\u03fc\u03fd\u0001\u0000\u0000\u0000\u03fd\u03ff\u0001"+ + "\u0000\u0000\u0000\u03fe\u03f1\u0001\u0000\u0000\u0000\u03fe\u03f8\u0001"+ + "\u0000\u0000\u0000\u03ff\u00d0\u0001\u0000\u0000\u0000\u0400\u0402\u0003"+ + "\u00d7j\u0000\u0401\u0400\u0001\u0000\u0000\u0000\u0402\u0403\u0001\u0000"+ + "\u0000\u0000\u0403\u0401\u0001\u0000\u0000\u0000\u0403\u0404\u0001\u0000"+ + "\u0000\u0000\u0404\u00d2\u0001\u0000\u0000\u0000\u0405\u040b\u0005$\u0000"+ + "\u0000\u0406\u0407\u00050\u0000\u0000\u0407\u040b\u0005x\u0000\u0000\u0408"+ + "\u0409\u00050\u0000\u0000\u0409\u040b\u0005X\u0000\u0000\u040a\u0405\u0001"+ + "\u0000\u0000\u0000\u040a\u0406\u0001\u0000\u0000\u0000\u040a\u0408\u0001"+ + "\u0000\u0000\u0000\u040b\u040d\u0001\u0000\u0000\u0000\u040c\u040e\u0003"+ + "\u00d9k\u0000\u040d\u040c\u0001\u0000\u0000\u0000\u040e\u040f\u0001\u0000"+ + "\u0000\u0000\u040f\u040d\u0001\u0000\u0000\u0000\u040f\u0410\u0001\u0000"+ + "\u0000\u0000\u0410\u00d4\u0001\u0000\u0000\u0000\u0411\u0412\u0007\u0004"+ + "\u0000\u0000\u0412\u00d6\u0001\u0000\u0000\u0000\u0413\u0414\u0007\u0005"+ + "\u0000\u0000\u0414\u00d8\u0001\u0000\u0000\u0000\u0415\u0416\u0007\u0006"+ + "\u0000\u0000\u0416\u00da\u0001\u0000\u0000\u0000\u0417\u041b\u0003\u00dd"+ + "m\u0000\u0418\u041a\u0003\u00dfn\u0000\u0419\u0418\u0001\u0000\u0000\u0000"+ + "\u041a\u041d\u0001\u0000\u0000\u0000\u041b\u0419\u0001\u0000\u0000\u0000"+ + "\u041b\u041c\u0001\u0000\u0000\u0000\u041c\u041e\u0001\u0000\u0000\u0000"+ + "\u041d\u041b\u0001\u0000\u0000\u0000\u041e\u041f\u0006l\u0004\u0000\u041f"+ + "\u00dc\u0001\u0000\u0000\u0000\u0420\u0421\u0007\u0007\u0000\u0000\u0421"+ + "\u00de\u0001\u0000\u0000\u0000\u0422\u0423\u0007\b\u0000\u0000\u0423\u00e0"+ + "\u0001\u0000\u0000\u0000\u0424\u042a\u0005\"\u0000\u0000\u0425\u0426\u0005"+ + "\\\u0000\u0000\u0426\u0429\u0005\"\u0000\u0000\u0427\u0429\b\t\u0000\u0000"+ + "\u0428\u0425\u0001\u0000\u0000\u0000\u0428\u0427\u0001\u0000\u0000\u0000"+ + "\u0429\u042c\u0001\u0000\u0000\u0000\u042a\u0428\u0001\u0000\u0000\u0000"+ + "\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001\u0000\u0000\u0000"+ + "\u042c\u042a\u0001\u0000\u0000\u0000\u042d\u042f\u0005\"\u0000\u0000\u042e"+ + "\u0430\u0007\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430"+ + "\u0001\u0000\u0000\u0000\u0430\u0435\u0001\u0000\u0000\u0000\u0431\u0433"+ + "\u0007\u000b\u0000\u0000\u0432\u0434\u0007\f\u0000\u0000\u0433\u0432\u0001"+ + "\u0000\u0000\u0000\u0433\u0434\u0001\u0000\u0000\u0000\u0434\u0436\u0001"+ + "\u0000\u0000\u0000\u0435\u0431\u0001\u0000\u0000\u0000\u0435\u0436\u0001"+ + "\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000\u0437\u0439\u0007"+ + "\n\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000\u0438\u0439\u0001\u0000"+ + "\u0000\u0000\u0439\u00e2\u0001\u0000\u0000\u0000\u043a\u0449\u0005\'\u0000"+ + "\u0000\u043b\u0446\u0005\\\u0000\u0000\u043c\u043e\u0007\r\u0000\u0000"+ + "\u043d\u043f\u0007\u0005\u0000\u0000\u043e\u043d\u0001\u0000\u0000\u0000"+ + "\u043e\u043f\u0001\u0000\u0000\u0000\u043f\u0441\u0001\u0000\u0000\u0000"+ + "\u0440\u0442\u0007\u0005\u0000\u0000\u0441\u0440\u0001\u0000\u0000\u0000"+ + "\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0447\u0001\u0000\u0000\u0000"+ + "\u0443\u0444\u0005x\u0000\u0000\u0444\u0445\u0007\u000e\u0000\u0000\u0445"+ + "\u0447\u0007\u000e\u0000\u0000\u0446\u043c\u0001\u0000\u0000\u0000\u0446"+ + "\u0443\u0001\u0000\u0000\u0000\u0447\u044a\u0001\u0000\u0000\u0000\u0448"+ + "\u044a\b\u000f\u0000\u0000\u0449\u043b\u0001\u0000\u0000\u0000\u0449\u0448"+ + "\u0001\u0000\u0000\u0000\u044a\u044b\u0001\u0000\u0000\u0000\u044b\u044c"+ + "\u0005\'\u0000\u0000\u044c\u00e4\u0001\u0000\u0000\u0000\u044d\u044f\u0007"+ + "\u0010\u0000\u0000\u044e\u044d\u0001\u0000\u0000\u0000\u044f\u0450\u0001"+ + "\u0000\u0000\u0000\u0450\u044e\u0001\u0000\u0000\u0000\u0450\u0451\u0001"+ + "\u0000\u0000\u0000\u0451\u0452\u0001\u0000\u0000\u0000\u0452\u0453\u0006"+ + "q\u0005\u0000\u0453\u00e6\u0001\u0000\u0000\u0000\u0454\u0455\u0005/\u0000"+ + "\u0000\u0455\u0456\u0005/\u0000\u0000\u0456\u045a\u0001\u0000\u0000\u0000"+ + "\u0457\u0459\b\u0011\u0000\u0000\u0458\u0457\u0001\u0000\u0000\u0000\u0459"+ + "\u045c\u0001\u0000\u0000\u0000\u045a\u0458\u0001\u0000\u0000\u0000\u045a"+ + "\u045b\u0001\u0000\u0000\u0000\u045b\u045d\u0001\u0000\u0000\u0000\u045c"+ + "\u045a\u0001\u0000\u0000\u0000\u045d\u045e\u0006r\u0006\u0000\u045e\u00e8"+ + "\u0001\u0000\u0000\u0000\u045f\u0460\u0005/\u0000\u0000\u0460\u0461\u0005"+ + "*\u0000\u0000\u0461\u0465\u0001\u0000\u0000\u0000\u0462\u0464\t\u0000"+ + "\u0000\u0000\u0463\u0462\u0001\u0000\u0000\u0000\u0464\u0467\u0001\u0000"+ + "\u0000\u0000\u0465\u0466\u0001\u0000\u0000\u0000\u0465\u0463\u0001\u0000"+ + "\u0000\u0000\u0466\u0468\u0001\u0000\u0000\u0000\u0467\u0465\u0001\u0000"+ + "\u0000\u0000\u0468\u0469\u0005*\u0000\u0000\u0469\u046a\u0005/\u0000\u0000"+ + "\u046a\u046b\u0001\u0000\u0000\u0000\u046b\u046c\u0006s\u0006\u0000\u046c"+ + "\u00ea\u0001\u0000\u0000\u0000\u046d\u046e\u0005.\u0000\u0000\u046e\u046f"+ + "\u0005b\u0000\u0000\u046f\u0470\u0005y\u0000\u0000\u0470\u0471\u0005t"+ + "\u0000\u0000\u0471\u0472\u0005e\u0000\u0000\u0472\u00ec\u0001\u0000\u0000"+ + "\u0000\u0473\u0474\u0005b\u0000\u0000\u0474\u0475\u0005r\u0000\u0000\u0475"+ + "\u06d3\u0005k\u0000\u0000\u0476\u0477\u0005o\u0000\u0000\u0477\u0478\u0005"+ + "r\u0000\u0000\u0478\u06d3\u0005a\u0000\u0000\u0479\u047a\u0005k\u0000"+ + "\u0000\u047a\u047b\u0005i\u0000\u0000\u047b\u06d3\u0005l\u0000\u0000\u047c"+ + "\u047d\u0005s\u0000\u0000\u047d\u047e\u0005l\u0000\u0000\u047e\u06d3\u0005"+ + "o\u0000\u0000\u047f\u0480\u0005n\u0000\u0000\u0480\u0481\u0005o\u0000"+ + "\u0000\u0481\u06d3\u0005p\u0000\u0000\u0482\u0483\u0005a\u0000\u0000\u0483"+ + "\u0484\u0005s\u0000\u0000\u0484\u06d3\u0005l\u0000\u0000\u0485\u0486\u0005"+ + "p\u0000\u0000\u0486\u0487\u0005h\u0000\u0000\u0487\u06d3\u0005p\u0000"+ + "\u0000\u0488\u0489\u0005a\u0000\u0000\u0489\u048a\u0005n\u0000\u0000\u048a"+ + "\u06d3\u0005c\u0000\u0000\u048b\u048c\u0005b\u0000\u0000\u048c\u048d\u0005"+ + "p\u0000\u0000\u048d\u06d3\u0005l\u0000\u0000\u048e\u048f\u0005c\u0000"+ + "\u0000\u048f\u0490\u0005l\u0000\u0000\u0490\u06d3\u0005c\u0000\u0000\u0491"+ + "\u0492\u0005j\u0000\u0000\u0492\u0493\u0005s\u0000\u0000\u0493\u06d3\u0005"+ + "r\u0000\u0000\u0494\u0495\u0005a\u0000\u0000\u0495\u0496\u0005n\u0000"+ + "\u0000\u0496\u06d3\u0005d\u0000\u0000\u0497\u0498\u0005r\u0000\u0000\u0498"+ + "\u0499\u0005l\u0000\u0000\u0499\u06d3\u0005a\u0000\u0000\u049a\u049b\u0005"+ + "b\u0000\u0000\u049b\u049c\u0005i\u0000\u0000\u049c\u06d3\u0005t\u0000"+ + "\u0000\u049d\u049e\u0005r\u0000\u0000\u049e\u049f\u0005o\u0000\u0000\u049f"+ + "\u06d3\u0005l\u0000\u0000\u04a0\u04a1\u0005p\u0000\u0000\u04a1\u04a2\u0005"+ + "l\u0000\u0000\u04a2\u06d3\u0005a\u0000\u0000\u04a3\u04a4\u0005p\u0000"+ + "\u0000\u04a4\u04a5\u0005l\u0000\u0000\u04a5\u06d3\u0005p\u0000\u0000\u04a6"+ + "\u04a7\u0005b\u0000\u0000\u04a7\u04a8\u0005m\u0000\u0000\u04a8\u06d3\u0005"+ + "i\u0000\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005e\u0000"+ + "\u0000\u04ab\u06d3\u0005c\u0000\u0000\u04ac\u04ad\u0005r\u0000\u0000\u04ad"+ + "\u04ae\u0005t\u0000\u0000\u04ae\u06d3\u0005i\u0000\u0000\u04af\u04b0\u0005"+ + "e\u0000\u0000\u04b0\u04b1\u0005o\u0000\u0000\u04b1\u06d3\u0005r\u0000"+ + "\u0000\u04b2\u04b3\u0005s\u0000\u0000\u04b3\u04b4\u0005r\u0000\u0000\u04b4"+ + "\u06d3\u0005e\u0000\u0000\u04b5\u04b6\u0005l\u0000\u0000\u04b6\u04b7\u0005"+ + "s\u0000\u0000\u04b7\u06d3\u0005r\u0000\u0000\u04b8\u04b9\u0005p\u0000"+ + "\u0000\u04b9\u04ba\u0005h\u0000\u0000\u04ba\u06d3\u0005a\u0000\u0000\u04bb"+ + "\u04bc\u0005a\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06d3\u0005"+ + "r\u0000\u0000\u04be\u04bf\u0005j\u0000\u0000\u04bf\u04c0\u0005m\u0000"+ + "\u0000\u04c0\u06d3\u0005p\u0000\u0000\u04c1\u04c2\u0005b\u0000\u0000\u04c2"+ + "\u04c3\u0005v\u0000\u0000\u04c3\u06d3\u0005c\u0000\u0000\u04c4\u04c5\u0005"+ + "c\u0000\u0000\u04c5\u04c6\u0005l\u0000\u0000\u04c6\u06d3\u0005i\u0000"+ + "\u0000\u04c7\u04c8\u0005r\u0000\u0000\u04c8\u04c9\u0005t\u0000\u0000\u04c9"+ + "\u06d3\u0005s\u0000\u0000\u04ca\u04cb\u0005a\u0000\u0000\u04cb\u04cc\u0005"+ + "d\u0000\u0000\u04cc\u06d3\u0005c\u0000\u0000\u04cd\u04ce\u0005r\u0000"+ + "\u0000\u04ce\u04cf\u0005r\u0000\u0000\u04cf\u06d3\u0005a\u0000\u0000\u04d0"+ + "\u04d1\u0005b\u0000\u0000\u04d1\u04d2\u0005v\u0000\u0000\u04d2\u06d3\u0005"+ + "s\u0000\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005e\u0000"+ + "\u0000\u04d5\u06d3\u0005i\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7"+ + "\u04d8\u0005a\u0000\u0000\u04d8\u06d3\u0005x\u0000\u0000\u04d9\u04da\u0005"+ + "s\u0000\u0000\u04da\u04db\u0005t\u0000\u0000\u04db\u06d3\u0005y\u0000"+ + "\u0000\u04dc\u04dd\u0005s\u0000\u0000\u04dd\u04de\u0005t\u0000\u0000\u04de"+ + "\u06d3\u0005a\u0000\u0000\u04df\u04e0\u0005s\u0000\u0000\u04e0\u04e1\u0005"+ + "t\u0000\u0000\u04e1\u06d3\u0005x\u0000\u0000\u04e2\u04e3\u0005d\u0000"+ + "\u0000\u04e3\u04e4\u0005e\u0000\u0000\u04e4\u06d3\u0005y\u0000\u0000\u04e5"+ + "\u04e6\u0005t\u0000\u0000\u04e6\u04e7\u0005x\u0000\u0000\u04e7\u06d3\u0005"+ + "a\u0000\u0000\u04e8\u04e9\u0005x\u0000\u0000\u04e9\u04ea\u0005a\u0000"+ + "\u0000\u04ea\u06d3\u0005a\u0000\u0000\u04eb\u04ec\u0005b\u0000\u0000\u04ec"+ + "\u04ed\u0005c\u0000\u0000\u04ed\u06d3\u0005c\u0000\u0000\u04ee\u04ef\u0005"+ + "a\u0000\u0000\u04ef\u04f0\u0005h\u0000\u0000\u04f0\u06d3\u0005x\u0000"+ + "\u0000\u04f1\u04f2\u0005t\u0000\u0000\u04f2\u04f3\u0005y\u0000\u0000\u04f3"+ + "\u06d3\u0005a\u0000\u0000\u04f4\u04f5\u0005t\u0000\u0000\u04f5\u04f6\u0005"+ + "x\u0000\u0000\u04f6\u06d3\u0005s\u0000\u0000\u04f7\u04f8\u0005t\u0000"+ + "\u0000\u04f8\u04f9\u0005a\u0000\u0000\u04f9\u06d3\u0005s\u0000\u0000\u04fa"+ + "\u04fb\u0005s\u0000\u0000\u04fb\u04fc\u0005h\u0000\u0000\u04fc\u06d3\u0005"+ + "y\u0000\u0000\u04fd\u04fe\u0005s\u0000\u0000\u04fe\u04ff\u0005h\u0000"+ + "\u0000\u04ff\u06d3\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501"+ + "\u0502\u0005d\u0000\u0000\u0502\u06d3\u0005y\u0000\u0000\u0503\u0504\u0005"+ + "l\u0000\u0000\u0504\u0505\u0005d\u0000\u0000\u0505\u06d3\u0005a\u0000"+ + "\u0000\u0506\u0507\u0005l\u0000\u0000\u0507\u0508\u0005d\u0000\u0000\u0508"+ + "\u06d3\u0005x\u0000\u0000\u0509\u050a\u0005l\u0000\u0000\u050a\u050b\u0005"+ + "a\u0000\u0000\u050b\u06d3\u0005x\u0000\u0000\u050c\u050d\u0005t\u0000"+ + "\u0000\u050d\u050e\u0005a\u0000\u0000\u050e\u06d3\u0005y\u0000\u0000\u050f"+ + "\u0510\u0005t\u0000\u0000\u0510\u0511\u0005a\u0000\u0000\u0511\u06d3\u0005"+ + "x\u0000\u0000\u0512\u0513\u0005b\u0000\u0000\u0513\u0514\u0005c\u0000"+ + "\u0000\u0514\u06d3\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516"+ + "\u0517\u0005l\u0000\u0000\u0517\u06d3\u0005v\u0000\u0000\u0518\u0519\u0005"+ + "t\u0000\u0000\u0519\u051a\u0005s\u0000\u0000\u051a\u06d3\u0005x\u0000"+ + "\u0000\u051b\u051c\u0005l\u0000\u0000\u051c\u051d\u0005a\u0000\u0000\u051d"+ + "\u06d3\u0005s\u0000\u0000\u051e\u051f\u0005c\u0000\u0000\u051f\u0520\u0005"+ + "p\u0000\u0000\u0520\u06d3\u0005y\u0000\u0000\u0521\u0522\u0005c\u0000"+ + "\u0000\u0522\u0523\u0005m\u0000\u0000\u0523\u06d3\u0005p\u0000\u0000\u0524"+ + "\u0525\u0005c\u0000\u0000\u0525\u0526\u0005p\u0000\u0000\u0526\u06d3\u0005"+ + "x\u0000\u0000\u0527\u0528\u0005d\u0000\u0000\u0528\u0529\u0005c\u0000"+ + "\u0000\u0529\u06d3\u0005p\u0000\u0000\u052a\u052b\u0005d\u0000\u0000\u052b"+ + "\u052c\u0005e\u0000\u0000\u052c\u06d3\u0005c\u0000\u0000\u052d\u052e\u0005"+ + "i\u0000\u0000\u052e\u052f\u0005n\u0000\u0000\u052f\u06d3\u0005c\u0000"+ + "\u0000\u0530\u0531\u0005a\u0000\u0000\u0531\u0532\u0005x\u0000\u0000\u0532"+ + "\u06d3\u0005s\u0000\u0000\u0533\u0534\u0005b\u0000\u0000\u0534\u0535\u0005"+ + "n\u0000\u0000\u0535\u06d3\u0005e\u0000\u0000\u0536\u0537\u0005c\u0000"+ + "\u0000\u0537\u0538\u0005l\u0000\u0000\u0538\u06d3\u0005d\u0000\u0000\u0539"+ + "\u053a\u0005s\u0000\u0000\u053a\u053b\u0005b\u0000\u0000\u053b\u06d3\u0005"+ + "c\u0000\u0000\u053c\u053d\u0005i\u0000\u0000\u053d\u053e\u0005s\u0000"+ + "\u0000\u053e\u06d3\u0005c\u0000\u0000\u053f\u0540\u0005i\u0000\u0000\u0540"+ + "\u0541\u0005n\u0000\u0000\u0541\u06d3\u0005x\u0000\u0000\u0542\u0543\u0005"+ + "b\u0000\u0000\u0543\u0544\u0005e\u0000\u0000\u0544\u06d3\u0005q\u0000"+ + "\u0000\u0545\u0546\u0005s\u0000\u0000\u0546\u0547\u0005e\u0000\u0000\u0547"+ + "\u06d3\u0005d\u0000\u0000\u0548\u0549\u0005d\u0000\u0000\u0549\u054a\u0005"+ + "e\u0000\u0000\u054a\u06d3\u0005x\u0000\u0000\u054b\u054c\u0005i\u0000"+ + "\u0000\u054c\u054d\u0005n\u0000\u0000\u054d\u06d3\u0005y\u0000\u0000\u054e"+ + "\u054f\u0005r\u0000\u0000\u054f\u0550\u0005o\u0000\u0000\u0550\u06d3\u0005"+ + "r\u0000\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005b\u0000"+ + "\u0000\u0553\u0554\u0005r\u0000\u0000\u0554\u06d3\u00050\u0000\u0000\u0555"+ + "\u0556\u0005b\u0000\u0000\u0556\u0557\u0005b\u0000\u0000\u0557\u0558\u0005"+ + "r\u0000\u0000\u0558\u06d3\u00051\u0000\u0000\u0559\u055a\u0005b\u0000"+ + "\u0000\u055a\u055b\u0005b\u0000\u0000\u055b\u055c\u0005r\u0000\u0000\u055c"+ + "\u06d3\u00052\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005"+ + "b\u0000\u0000\u055f\u0560\u0005r\u0000\u0000\u0560\u06d3\u00053\u0000"+ + "\u0000\u0561\u0562\u0005b\u0000\u0000\u0562\u0563\u0005b\u0000\u0000\u0563"+ + "\u0564\u0005r\u0000\u0000\u0564\u06d3\u00054\u0000\u0000\u0565\u0566\u0005"+ + "b\u0000\u0000\u0566\u0567\u0005b\u0000\u0000\u0567\u0568\u0005r\u0000"+ + "\u0000\u0568\u06d3\u00055\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a"+ + "\u056b\u0005b\u0000\u0000\u056b\u056c\u0005r\u0000\u0000\u056c\u06d3\u0005"+ + "6\u0000\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005b\u0000"+ + "\u0000\u056f\u0570\u0005r\u0000\u0000\u0570\u06d3\u00057\u0000\u0000\u0571"+ + "\u0572\u0005b\u0000\u0000\u0572\u0573\u0005b\u0000\u0000\u0573\u0574\u0005"+ + "s\u0000\u0000\u0574\u06d3\u00050\u0000\u0000\u0575\u0576\u0005b\u0000"+ + "\u0000\u0576\u0577\u0005b\u0000\u0000\u0577\u0578\u0005s\u0000\u0000\u0578"+ + "\u06d3\u00051\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005"+ + "b\u0000\u0000\u057b\u057c\u0005s\u0000\u0000\u057c\u06d3\u00052\u0000"+ + "\u0000\u057d\u057e\u0005b\u0000\u0000\u057e\u057f\u0005b\u0000\u0000\u057f"+ + "\u0580\u0005s\u0000\u0000\u0580\u06d3\u00053\u0000\u0000\u0581\u0582\u0005"+ + "b\u0000\u0000\u0582\u0583\u0005b\u0000\u0000\u0583\u0584\u0005s\u0000"+ + "\u0000\u0584\u06d3\u00054\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586"+ + "\u0587\u0005b\u0000\u0000\u0587\u0588\u0005s\u0000\u0000\u0588\u06d3\u0005"+ + "5\u0000\u0000\u0589\u058a\u0005b\u0000\u0000\u058a\u058b\u0005b\u0000"+ + "\u0000\u058b\u058c\u0005s\u0000\u0000\u058c\u06d3\u00056\u0000\u0000\u058d"+ + "\u058e\u0005b\u0000\u0000\u058e\u058f\u0005b\u0000\u0000\u058f\u0590\u0005"+ + "s\u0000\u0000\u0590\u06d3\u00057\u0000\u0000\u0591\u0592\u0005b\u0000"+ + "\u0000\u0592\u0593\u0005r\u0000\u0000\u0593\u06d3\u0005a\u0000\u0000\u0594"+ + "\u0595\u0005p\u0000\u0000\u0595\u0596\u0005h\u0000\u0000\u0596\u06d3\u0005"+ + "x\u0000\u0000\u0597\u0598\u0005p\u0000\u0000\u0598\u0599\u0005h\u0000"+ + "\u0000\u0599\u06d3\u0005y\u0000\u0000\u059a\u059b\u0005p\u0000\u0000\u059b"+ + "\u059c\u0005l\u0000\u0000\u059c\u06d3\u0005x\u0000\u0000\u059d\u059e\u0005"+ + "p\u0000\u0000\u059e\u059f\u0005l\u0000\u0000\u059f\u06d3\u0005y\u0000"+ + "\u0000\u05a0\u05a1\u0005r\u0000\u0000\u05a1\u05a2\u0005m\u0000\u0000\u05a2"+ + "\u05a3\u0005b\u0000\u0000\u05a3\u06d3\u00050\u0000\u0000\u05a4\u05a5\u0005"+ + "r\u0000\u0000\u05a5\u05a6\u0005m\u0000\u0000\u05a6\u05a7\u0005b\u0000"+ + "\u0000\u05a7\u06d3\u00051\u0000\u0000\u05a8\u05a9\u0005r\u0000\u0000\u05a9"+ + "\u05aa\u0005m\u0000\u0000\u05aa\u05ab\u0005b\u0000\u0000\u05ab\u06d3\u0005"+ + "2\u0000\u0000\u05ac\u05ad\u0005r\u0000\u0000\u05ad\u05ae\u0005m\u0000"+ + "\u0000\u05ae\u05af\u0005b\u0000\u0000\u05af\u06d3\u00053\u0000\u0000\u05b0"+ + "\u05b1\u0005r\u0000\u0000\u05b1\u05b2\u0005m\u0000\u0000\u05b2\u05b3\u0005"+ + "b\u0000\u0000\u05b3\u06d3\u00054\u0000\u0000\u05b4\u05b5\u0005r\u0000"+ + "\u0000\u05b5\u05b6\u0005m\u0000\u0000\u05b6\u05b7\u0005b\u0000\u0000\u05b7"+ + "\u06d3\u00055\u0000\u0000\u05b8\u05b9\u0005r\u0000\u0000\u05b9\u05ba\u0005"+ + "m\u0000\u0000\u05ba\u05bb\u0005b\u0000\u0000\u05bb\u06d3\u00056\u0000"+ + "\u0000\u05bc\u05bd\u0005r\u0000\u0000\u05bd\u05be\u0005m\u0000\u0000\u05be"+ + "\u05bf\u0005b\u0000\u0000\u05bf\u06d3\u00057\u0000\u0000\u05c0\u05c1\u0005"+ + "s\u0000\u0000\u05c1\u05c2\u0005m\u0000\u0000\u05c2\u05c3\u0005b\u0000"+ + "\u0000\u05c3\u06d3\u00050\u0000\u0000\u05c4\u05c5\u0005s\u0000\u0000\u05c5"+ + "\u05c6\u0005m\u0000\u0000\u05c6\u05c7\u0005b\u0000\u0000\u05c7\u06d3\u0005"+ + "1\u0000\u0000\u05c8\u05c9\u0005s\u0000\u0000\u05c9\u05ca\u0005m\u0000"+ + "\u0000\u05ca\u05cb\u0005b\u0000\u0000\u05cb\u06d3\u00052\u0000\u0000\u05cc"+ + "\u05cd\u0005s\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf\u0005"+ + "b\u0000\u0000\u05cf\u06d3\u00053\u0000\u0000\u05d0\u05d1\u0005s\u0000"+ + "\u0000\u05d1\u05d2\u0005m\u0000\u0000\u05d2\u05d3\u0005b\u0000\u0000\u05d3"+ + "\u06d3\u00054\u0000\u0000\u05d4\u05d5\u0005s\u0000\u0000\u05d5\u05d6\u0005"+ + "m\u0000\u0000\u05d6\u05d7\u0005b\u0000\u0000\u05d7\u06d3\u00055\u0000"+ + "\u0000\u05d8\u05d9\u0005s\u0000\u0000\u05d9\u05da\u0005m\u0000\u0000\u05da"+ + "\u05db\u0005b\u0000\u0000\u05db\u06d3\u00056\u0000\u0000\u05dc\u05dd\u0005"+ + "s\u0000\u0000\u05dd\u05de\u0005m\u0000\u0000\u05de\u05df\u0005b\u0000"+ + "\u0000\u05df\u06d3\u00057\u0000\u0000\u05e0\u05e1\u0005s\u0000\u0000\u05e1"+ + "\u05e2\u0005t\u0000\u0000\u05e2\u06d3\u0005p\u0000\u0000\u05e3\u05e4\u0005"+ + "s\u0000\u0000\u05e4\u05e5\u0005t\u0000\u0000\u05e5\u06d3\u0005z\u0000"+ + "\u0000\u05e6\u05e7\u0005t\u0000\u0000\u05e7\u05e8\u0005r\u0000\u0000\u05e8"+ + "\u06d3\u0005b\u0000\u0000\u05e9\u05ea\u0005t\u0000\u0000\u05ea\u05eb\u0005"+ + "s\u0000\u0000\u05eb\u06d3\u0005b\u0000\u0000\u05ec\u05ed\u0005w\u0000"+ + "\u0000\u05ed\u05ee\u0005a\u0000\u0000\u05ee\u06d3\u0005i\u0000\u0000\u05ef"+ + "\u05f0\u0005c\u0000\u0000\u05f0\u05f1\u0005l\u0000\u0000\u05f1\u06d3\u0005"+ + "e\u0000\u0000\u05f2\u05f3\u0005s\u0000\u0000\u05f3\u05f4\u0005e\u0000"+ + "\u0000\u05f4\u06d3\u0005e\u0000\u0000\u05f5\u05f6\u0005t\u0000\u0000\u05f6"+ + "\u05f7\u0005s\u0000\u0000\u05f7\u06d3\u0005y\u0000\u0000\u05f8\u05f9\u0005"+ + "l\u0000\u0000\u05f9\u05fa\u0005b\u0000\u0000\u05fa\u05fb\u0005p\u0000"+ + "\u0000\u05fb\u06d3\u0005l\u0000\u0000\u05fc\u05fd\u0005i\u0000\u0000\u05fd"+ + "\u05fe\u0005n\u0000\u0000\u05fe\u06d3\u0005z\u0000\u0000\u05ff\u0600\u0005"+ + "t\u0000\u0000\u0600\u0601\u0005y\u0000\u0000\u0601\u06d3\u0005s\u0000"+ + "\u0000\u0602\u0603\u0005l\u0000\u0000\u0603\u0604\u0005b\u0000\u0000\u0604"+ + "\u0605\u0005m\u0000\u0000\u0605\u06d3\u0005i\u0000\u0000\u0606\u0607\u0005"+ + "d\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u06d3\u0005z\u0000"+ + "\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005e\u0000\u0000\u060b"+ + "\u06d3\u0005g\u0000\u0000\u060c\u060d\u0005a\u0000\u0000\u060d\u060e\u0005"+ + "s\u0000\u0000\u060e\u06d3\u0005r\u0000\u0000\u060f\u0610\u0005t\u0000"+ + "\u0000\u0610\u0611\u0005a\u0000\u0000\u0611\u06d3\u0005z\u0000\u0000\u0612"+ + "\u0613\u0005l\u0000\u0000\u0613\u0614\u0005b\u0000\u0000\u0614\u0615\u0005"+ + "v\u0000\u0000\u0615\u06d3\u0005c\u0000\u0000\u0616\u0617\u0005t\u0000"+ + "\u0000\u0617\u0618\u0005a\u0000\u0000\u0618\u06d3\u0005b\u0000\u0000\u0619"+ + "\u061a\u0005m\u0000\u0000\u061a\u061b\u0005a\u0000\u0000\u061b\u06d3\u0005"+ + "p\u0000\u0000\u061c\u061d\u0005r\u0000\u0000\u061d\u061e\u0005t\u0000"+ + "\u0000\u061e\u06d3\u0005n\u0000\u0000\u061f\u0620\u0005l\u0000\u0000\u0620"+ + "\u0621\u0005b\u0000\u0000\u0621\u0622\u0005s\u0000\u0000\u0622\u06d3\u0005"+ + "r\u0000\u0000\u0623\u0624\u0005t\u0000\u0000\u0624\u0625\u0005z\u0000"+ + "\u0000\u0625\u06d3\u0005a\u0000\u0000\u0626\u0627\u0005l\u0000\u0000\u0627"+ + "\u0628\u0005b\u0000\u0000\u0628\u0629\u0005v\u0000\u0000\u0629\u06d3\u0005"+ + "s\u0000\u0000\u062a\u062b\u0005t\u0000\u0000\u062b\u062c\u0005b\u0000"+ + "\u0000\u062c\u06d3\u0005a\u0000\u0000\u062d\u062e\u0005l\u0000\u0000\u062e"+ + "\u062f\u0005b\u0000\u0000\u062f\u0630\u0005r\u0000\u0000\u0630\u06d3\u0005"+ + "a\u0000\u0000\u0631\u0632\u0005l\u0000\u0000\u0632\u0633\u0005b\u0000"+ + "\u0000\u0633\u0634\u0005c\u0000\u0000\u0634\u06d3\u0005c\u0000\u0000\u0635"+ + "\u0636\u0005l\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u06d3\u0005"+ + "z\u0000\u0000\u0638\u0639\u0005l\u0000\u0000\u0639\u063a\u0005b\u0000"+ + "\u0000\u063a\u063b\u0005c\u0000\u0000\u063b\u06d3\u0005s\u0000\u0000\u063c"+ + "\u063d\u0005c\u0000\u0000\u063d\u063e\u0005p\u0000\u0000\u063e\u06d3\u0005"+ + "z\u0000\u0000\u063f\u0640\u0005d\u0000\u0000\u0640\u0641\u0005e\u0000"+ + "\u0000\u0641\u06d3\u0005w\u0000\u0000\u0642\u0643\u0005a\u0000\u0000\u0643"+ + "\u0644\u0005s\u0000\u0000\u0644\u06d3\u0005w\u0000\u0000\u0645\u0646\u0005"+ + "l\u0000\u0000\u0646\u0647\u0005b\u0000\u0000\u0647\u0648\u0005n\u0000"+ + "\u0000\u0648\u06d3\u0005e\u0000\u0000\u0649\u064a\u0005p\u0000\u0000\u064a"+ + "\u064b\u0005h\u0000\u0000\u064b\u06d3\u0005z\u0000\u0000\u064c\u064d\u0005"+ + "i\u0000\u0000\u064d\u064e\u0005n\u0000\u0000\u064e\u06d3\u0005w\u0000"+ + "\u0000\u064f\u0650\u0005r\u0000\u0000\u0650\u0651\u0005o\u0000\u0000\u0651"+ + "\u06d3\u0005w\u0000\u0000\u0652\u0653\u0005l\u0000\u0000\u0653\u0654\u0005"+ + "b\u0000\u0000\u0654\u0655\u0005e\u0000\u0000\u0655\u06d3\u0005q\u0000"+ + "\u0000\u0656\u0657\u0005p\u0000\u0000\u0657\u0658\u0005h\u0000\u0000\u0658"+ + "\u06d3\u0005w\u0000\u0000\u0659\u065a\u0005p\u0000\u0000\u065a\u065b\u0005"+ + "l\u0000\u0000\u065b\u06d3\u0005z\u0000\u0000\u065c\u065d\u0005e\u0000"+ + "\u0000\u065d\u065e\u0005o\u0000\u0000\u065e\u06d3\u0005m\u0000\u0000\u065f"+ + "\u0660\u0005a\u0000\u0000\u0660\u0661\u0005d\u0000\u0000\u0661\u0662\u0005"+ + "c\u0000\u0000\u0662\u06d3\u0005q\u0000\u0000\u0663\u0664\u0005a\u0000"+ + "\u0000\u0664\u0665\u0005n\u0000\u0000\u0665\u0666\u0005d\u0000\u0000\u0666"+ + "\u06d3\u0005q\u0000\u0000\u0667\u0668\u0005a\u0000\u0000\u0668\u0669\u0005"+ + "s\u0000\u0000\u0669\u066a\u0005l\u0000\u0000\u066a\u06d3\u0005q\u0000"+ + "\u0000\u066b\u066c\u0005a\u0000\u0000\u066c\u066d\u0005s\u0000\u0000\u066d"+ + "\u066e\u0005r\u0000\u0000\u066e\u06d3\u0005q\u0000\u0000\u066f\u0670\u0005"+ + "b\u0000\u0000\u0670\u0671\u0005i\u0000\u0000\u0671\u0672\u0005t\u0000"+ + "\u0000\u0672\u06d3\u0005q\u0000\u0000\u0673\u0674\u0005c\u0000\u0000\u0674"+ + "\u0675\u0005p\u0000\u0000\u0675\u06d3\u0005q\u0000\u0000\u0676\u0677\u0005"+ + "d\u0000\u0000\u0677\u0678\u0005e\u0000\u0000\u0678\u06d3\u0005q\u0000"+ + "\u0000\u0679\u067a\u0005e\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b"+ + "\u067c\u0005r\u0000\u0000\u067c\u06d3\u0005q\u0000\u0000\u067d\u067e\u0005"+ + "i\u0000\u0000\u067e\u067f\u0005n\u0000\u0000\u067f\u06d3\u0005q\u0000"+ + "\u0000\u0680\u0681\u0005l\u0000\u0000\u0681\u0682\u0005d\u0000\u0000\u0682"+ + "\u06d3\u0005q\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u0685\u0005"+ + "s\u0000\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u06d3\u0005q\u0000"+ + "\u0000\u0687\u0688\u0005o\u0000\u0000\u0688\u0689\u0005r\u0000\u0000\u0689"+ + "\u06d3\u0005q\u0000\u0000\u068a\u068b\u0005r\u0000\u0000\u068b\u068c\u0005"+ + "o\u0000\u0000\u068c\u068d\u0005l\u0000\u0000\u068d\u06d3\u0005q\u0000"+ + "\u0000\u068e\u068f\u0005r\u0000\u0000\u068f\u0690\u0005o\u0000\u0000\u0690"+ + "\u0691\u0005r\u0000\u0000\u0691\u06d3\u0005q\u0000\u0000\u0692\u0693\u0005"+ + "s\u0000\u0000\u0693\u0694\u0005b\u0000\u0000\u0694\u0695\u0005c\u0000"+ + "\u0000\u0695\u06d3\u0005q\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697"+ + "\u0698\u0005t\u0000\u0000\u0698\u06d3\u0005q\u0000\u0000\u0699\u069a\u0005"+ + "s\u0000\u0000\u069a\u069b\u0005x\u0000\u0000\u069b\u06d3\u0005y\u0000"+ + "\u0000\u069c\u069d\u0005s\u0000\u0000\u069d\u069e\u0005t\u0000\u0000\u069e"+ + "\u06d3\u00050\u0000\u0000\u069f\u06a0\u0005s\u0000\u0000\u06a0\u06a1\u0005"+ + "t\u0000\u0000\u06a1\u06d3\u00051\u0000\u0000\u06a2\u06a3\u0005s\u0000"+ + "\u0000\u06a3\u06a4\u0005t\u0000\u0000\u06a4\u06d3\u00052\u0000\u0000\u06a5"+ + "\u06a6\u0005s\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06d3\u0005"+ + "y\u0000\u0000\u06a8\u06a9\u0005t\u0000\u0000\u06a9\u06aa\u0005m\u0000"+ + "\u0000\u06aa\u06d3\u0005a\u0000\u0000\u06ab\u06ac\u0005b\u0000\u0000\u06ac"+ + "\u06ad\u0005s\u0000\u0000\u06ad\u06d3\u0005r\u0000\u0000\u06ae\u06af\u0005"+ + "t\u0000\u0000\u06af\u06b0\u0005a\u0000\u0000\u06b0\u06d3\u0005m\u0000"+ + "\u0000\u06b1\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005s\u0000\u0000\u06b3"+ + "\u06d3\u0005l\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005"+ + "l\u0000\u0000\u06b6\u06d3\u0005a\u0000\u0000\u06b7\u06b8\u0005c\u0000"+ + "\u0000\u06b8\u06b9\u0005l\u0000\u0000\u06b9\u06d3\u0005x\u0000\u0000\u06ba"+ + "\u06bb\u0005c\u0000\u0000\u06bb\u06bc\u0005l\u0000\u0000\u06bc\u06d3\u0005"+ + "y\u0000\u0000\u06bd\u06be\u0005c\u0000\u0000\u06be\u06bf\u0005s\u0000"+ + "\u0000\u06bf\u06d3\u0005h\u0000\u0000\u06c0\u06c1\u0005s\u0000\u0000\u06c1"+ + "\u06c2\u0005e\u0000\u0000\u06c2\u06d3\u0005t\u0000\u0000\u06c3\u06c4\u0005"+ + "t\u0000\u0000\u06c4\u06c5\u0005s\u0000\u0000\u06c5\u06d3\u0005t\u0000"+ + "\u0000\u06c6\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8"+ + "\u06d3\u0005a\u0000\u0000\u06c9\u06ca\u0005t\u0000\u0000\u06ca\u06cb\u0005"+ + "d\u0000\u0000\u06cb\u06d3\u0005d\u0000\u0000\u06cc\u06cd\u0005t\u0000"+ + "\u0000\u06cd\u06ce\u0005i\u0000\u0000\u06ce\u06d3\u0005n\u0000\u0000\u06cf"+ + "\u06d0\u0005t\u0000\u0000\u06d0\u06d1\u0005i\u0000\u0000\u06d1\u06d3\u0005"+ + "i\u0000\u0000\u06d2\u0473\u0001\u0000\u0000\u0000\u06d2\u0476\u0001\u0000"+ + "\u0000\u0000\u06d2\u0479\u0001\u0000\u0000\u0000\u06d2\u047c\u0001\u0000"+ + "\u0000\u0000\u06d2\u047f\u0001\u0000\u0000\u0000\u06d2\u0482\u0001\u0000"+ + "\u0000\u0000\u06d2\u0485\u0001\u0000\u0000\u0000\u06d2\u0488\u0001\u0000"+ + "\u0000\u0000\u06d2\u048b\u0001\u0000\u0000\u0000\u06d2\u048e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0491\u0001\u0000\u0000\u0000\u06d2\u0494\u0001\u0000"+ + "\u0000\u0000\u06d2\u0497\u0001\u0000\u0000\u0000\u06d2\u049a\u0001\u0000"+ + "\u0000\u0000\u06d2\u049d\u0001\u0000\u0000\u0000\u06d2\u04a0\u0001\u0000"+ + "\u0000\u0000\u06d2\u04a3\u0001\u0000\u0000\u0000\u06d2\u04a6\u0001\u0000"+ + "\u0000\u0000\u06d2\u04a9\u0001\u0000\u0000\u0000\u06d2\u04ac\u0001\u0000"+ + "\u0000\u0000\u06d2\u04af\u0001\u0000\u0000\u0000\u06d2\u04b2\u0001\u0000"+ + "\u0000\u0000\u06d2\u04b5\u0001\u0000\u0000\u0000\u06d2\u04b8\u0001\u0000"+ + "\u0000\u0000\u06d2\u04bb\u0001\u0000\u0000\u0000\u06d2\u04be\u0001\u0000"+ + "\u0000\u0000\u06d2\u04c1\u0001\u0000\u0000\u0000\u06d2\u04c4\u0001\u0000"+ + "\u0000\u0000\u06d2\u04c7\u0001\u0000\u0000\u0000\u06d2\u04ca\u0001\u0000"+ + "\u0000\u0000\u06d2\u04cd\u0001\u0000\u0000\u0000\u06d2\u04d0\u0001\u0000"+ + "\u0000\u0000\u06d2\u04d3\u0001\u0000\u0000\u0000\u06d2\u04d6\u0001\u0000"+ + "\u0000\u0000\u06d2\u04d9\u0001\u0000\u0000\u0000\u06d2\u04dc\u0001\u0000"+ + "\u0000\u0000\u06d2\u04df\u0001\u0000\u0000\u0000\u06d2\u04e2\u0001\u0000"+ + "\u0000\u0000\u06d2\u04e5\u0001\u0000\u0000\u0000\u06d2\u04e8\u0001\u0000"+ + "\u0000\u0000\u06d2\u04eb\u0001\u0000\u0000\u0000\u06d2\u04ee\u0001\u0000"+ + "\u0000\u0000\u06d2\u04f1\u0001\u0000\u0000\u0000\u06d2\u04f4\u0001\u0000"+ + "\u0000\u0000\u06d2\u04f7\u0001\u0000\u0000\u0000\u06d2\u04fa\u0001\u0000"+ + "\u0000\u0000\u06d2\u04fd\u0001\u0000\u0000\u0000\u06d2\u0500\u0001\u0000"+ + "\u0000\u0000\u06d2\u0503\u0001\u0000\u0000\u0000\u06d2\u0506\u0001\u0000"+ + "\u0000\u0000\u06d2\u0509\u0001\u0000\u0000\u0000\u06d2\u050c\u0001\u0000"+ + "\u0000\u0000\u06d2\u050f\u0001\u0000\u0000\u0000\u06d2\u0512\u0001\u0000"+ + "\u0000\u0000\u06d2\u0515\u0001\u0000\u0000\u0000\u06d2\u0518\u0001\u0000"+ + "\u0000\u0000\u06d2\u051b\u0001\u0000\u0000\u0000\u06d2\u051e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0521\u0001\u0000\u0000\u0000\u06d2\u0524\u0001\u0000"+ + "\u0000\u0000\u06d2\u0527\u0001\u0000\u0000\u0000\u06d2\u052a\u0001\u0000"+ + "\u0000\u0000\u06d2\u052d\u0001\u0000\u0000\u0000\u06d2\u0530\u0001\u0000"+ + "\u0000\u0000\u06d2\u0533\u0001\u0000\u0000\u0000\u06d2\u0536\u0001\u0000"+ + "\u0000\u0000\u06d2\u0539\u0001\u0000\u0000\u0000\u06d2\u053c\u0001\u0000"+ + "\u0000\u0000\u06d2\u053f\u0001\u0000\u0000\u0000\u06d2\u0542\u0001\u0000"+ + "\u0000\u0000\u06d2\u0545\u0001\u0000\u0000\u0000\u06d2\u0548\u0001\u0000"+ + "\u0000\u0000\u06d2\u054b\u0001\u0000\u0000\u0000\u06d2\u054e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0551\u0001\u0000\u0000\u0000\u06d2\u0555\u0001\u0000"+ + "\u0000\u0000\u06d2\u0559\u0001\u0000\u0000\u0000\u06d2\u055d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0561\u0001\u0000\u0000\u0000\u06d2\u0565\u0001\u0000"+ + "\u0000\u0000\u06d2\u0569\u0001\u0000\u0000\u0000\u06d2\u056d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0571\u0001\u0000\u0000\u0000\u06d2\u0575\u0001\u0000"+ + "\u0000\u0000\u06d2\u0579\u0001\u0000\u0000\u0000\u06d2\u057d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0581\u0001\u0000\u0000\u0000\u06d2\u0585\u0001\u0000"+ + "\u0000\u0000\u06d2\u0589\u0001\u0000\u0000\u0000\u06d2\u058d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0591\u0001\u0000\u0000\u0000\u06d2\u0594\u0001\u0000"+ + "\u0000\u0000\u06d2\u0597\u0001\u0000\u0000\u0000\u06d2\u059a\u0001\u0000"+ + "\u0000\u0000\u06d2\u059d\u0001\u0000\u0000\u0000\u06d2\u05a0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05a4\u0001\u0000\u0000\u0000\u06d2\u05a8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05ac\u0001\u0000\u0000\u0000\u06d2\u05b0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05b4\u0001\u0000\u0000\u0000\u06d2\u05b8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05bc\u0001\u0000\u0000\u0000\u06d2\u05c0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05c4\u0001\u0000\u0000\u0000\u06d2\u05c8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05cc\u0001\u0000\u0000\u0000\u06d2\u05d0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05d4\u0001\u0000\u0000\u0000\u06d2\u05d8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05dc\u0001\u0000\u0000\u0000\u06d2\u05e0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05e3\u0001\u0000\u0000\u0000\u06d2\u05e6\u0001\u0000"+ + "\u0000\u0000\u06d2\u05e9\u0001\u0000\u0000\u0000\u06d2\u05ec\u0001\u0000"+ + "\u0000\u0000\u06d2\u05ef\u0001\u0000\u0000\u0000\u06d2\u05f2\u0001\u0000"+ + "\u0000\u0000\u06d2\u05f5\u0001\u0000\u0000\u0000\u06d2\u05f8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05fc\u0001\u0000\u0000\u0000\u06d2\u05ff\u0001\u0000"+ + "\u0000\u0000\u06d2\u0602\u0001\u0000\u0000\u0000\u06d2\u0606\u0001\u0000"+ + "\u0000\u0000\u06d2\u0609\u0001\u0000\u0000\u0000\u06d2\u060c\u0001\u0000"+ + "\u0000\u0000\u06d2\u060f\u0001\u0000\u0000\u0000\u06d2\u0612\u0001\u0000"+ + "\u0000\u0000\u06d2\u0616\u0001\u0000\u0000\u0000\u06d2\u0619\u0001\u0000"+ + "\u0000\u0000\u06d2\u061c\u0001\u0000\u0000\u0000\u06d2\u061f\u0001\u0000"+ + "\u0000\u0000\u06d2\u0623\u0001\u0000\u0000\u0000\u06d2\u0626\u0001\u0000"+ + "\u0000\u0000\u06d2\u062a\u0001\u0000\u0000\u0000\u06d2\u062d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0631\u0001\u0000\u0000\u0000\u06d2\u0635\u0001\u0000"+ + "\u0000\u0000\u06d2\u0638\u0001\u0000\u0000\u0000\u06d2\u063c\u0001\u0000"+ + "\u0000\u0000\u06d2\u063f\u0001\u0000\u0000\u0000\u06d2\u0642\u0001\u0000"+ + "\u0000\u0000\u06d2\u0645\u0001\u0000\u0000\u0000\u06d2\u0649\u0001\u0000"+ + "\u0000\u0000\u06d2\u064c\u0001\u0000\u0000\u0000\u06d2\u064f\u0001\u0000"+ + "\u0000\u0000\u06d2\u0652\u0001\u0000\u0000\u0000\u06d2\u0656\u0001\u0000"+ + "\u0000\u0000\u06d2\u0659\u0001\u0000\u0000\u0000\u06d2\u065c\u0001\u0000"+ + "\u0000\u0000\u06d2\u065f\u0001\u0000\u0000\u0000\u06d2\u0663\u0001\u0000"+ + "\u0000\u0000\u06d2\u0667\u0001\u0000\u0000\u0000\u06d2\u066b\u0001\u0000"+ + "\u0000\u0000\u06d2\u066f\u0001\u0000\u0000\u0000\u06d2\u0673\u0001\u0000"+ + "\u0000\u0000\u06d2\u0676\u0001\u0000\u0000\u0000\u06d2\u0679\u0001\u0000"+ + "\u0000\u0000\u06d2\u067d\u0001\u0000\u0000\u0000\u06d2\u0680\u0001\u0000"+ + "\u0000\u0000\u06d2\u0683\u0001\u0000\u0000\u0000\u06d2\u0687\u0001\u0000"+ + "\u0000\u0000\u06d2\u068a\u0001\u0000\u0000\u0000\u06d2\u068e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0692\u0001\u0000\u0000\u0000\u06d2\u0696\u0001\u0000"+ + "\u0000\u0000\u06d2\u0699\u0001\u0000\u0000\u0000\u06d2\u069c\u0001\u0000"+ + "\u0000\u0000\u06d2\u069f\u0001\u0000\u0000\u0000\u06d2\u06a2\u0001\u0000"+ + "\u0000\u0000\u06d2\u06a5\u0001\u0000\u0000\u0000\u06d2\u06a8\u0001\u0000"+ + "\u0000\u0000\u06d2\u06ab\u0001\u0000\u0000\u0000\u06d2\u06ae\u0001\u0000"+ + "\u0000\u0000\u06d2\u06b1\u0001\u0000\u0000\u0000\u06d2\u06b4\u0001\u0000"+ + "\u0000\u0000\u06d2\u06b7\u0001\u0000\u0000\u0000\u06d2\u06ba\u0001\u0000"+ + "\u0000\u0000\u06d2\u06bd\u0001\u0000\u0000\u0000\u06d2\u06c0\u0001\u0000"+ + "\u0000\u0000\u06d2\u06c3\u0001\u0000\u0000\u0000\u06d2\u06c6\u0001\u0000"+ + "\u0000\u0000\u06d2\u06c9\u0001\u0000\u0000\u0000\u06d2\u06cc\u0001\u0000"+ + "\u0000\u0000\u06d2\u06cf\u0001\u0000\u0000\u0000\u06d3\u00ee\u0001\u0000"+ + "\u0000\u0000\u06d4\u06d5\u0005#\u0000\u0000\u06d5\u00f0\u0001\u0000\u0000"+ + "\u0000\u06d6\u06d7\u0005:\u0000\u0000\u06d7\u00f2\u0001\u0000\u0000\u0000"+ + "\u06d8\u06d9\u0005,\u0000\u0000\u06d9\u00f4\u0001\u0000\u0000\u0000\u06da"+ + "\u06db\u0005(\u0000\u0000\u06db\u00f6\u0001\u0000\u0000\u0000\u06dc\u06dd"+ + "\u0005)\u0000\u0000\u06dd\u00f8\u0001\u0000\u0000\u0000\u06de\u06df\u0005"+ + "[\u0000\u0000\u06df\u00fa\u0001\u0000\u0000\u0000\u06e0\u06e1\u0005]\u0000"+ + "\u0000\u06e1\u00fc\u0001\u0000\u0000\u0000\u06e2\u06e3\u0005.\u0000\u0000"+ + "\u06e3\u00fe\u0001\u0000\u0000\u0000\u06e4\u06e5\u0005<\u0000\u0000\u06e5"+ + "\u06e6\u0005<\u0000\u0000\u06e6\u0100\u0001\u0000\u0000\u0000\u06e7\u06e8"+ + "\u0005>\u0000\u0000\u06e8\u06e9\u0005>\u0000\u0000\u06e9\u0102\u0001\u0000"+ + "\u0000\u0000\u06ea\u06eb\u0005+\u0000\u0000\u06eb\u0104\u0001\u0000\u0000"+ + "\u0000\u06ec\u06ed\u0005-\u0000\u0000\u06ed\u0106\u0001\u0000\u0000\u0000"+ + "\u06ee\u06ef\u0005<\u0000\u0000\u06ef\u0108\u0001\u0000\u0000\u0000\u06f0"+ + "\u06f1\u0005>\u0000\u0000\u06f1\u010a\u0001\u0000\u0000\u0000\u06f2\u06f3"+ + "\u0005*\u0000\u0000\u06f3\u010c\u0001\u0000\u0000\u0000\u06f4\u06f5\u0005"+ + "/\u0000\u0000\u06f5\u010e\u0001\u0000\u0000\u0000\u06f6\u06f7\u0005{\u0000"+ + "\u0000\u06f7\u06f8\u0006\u0086\u0007\u0000\u06f8\u0110\u0001\u0000\u0000"+ + "\u0000\u06f9\u06fa\u0005}\u0000\u0000\u06fa\u06fb\u0006\u0087\b\u0000"+ + "\u06fb\u0112\u0001\u0000\u0000\u0000\u06fc\u06ff\u0003\u0115\u0089\u0000"+ + "\u06fd\u06ff\u0003\u011d\u008d\u0000\u06fe\u06fc\u0001\u0000\u0000\u0000"+ + "\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff\u0114\u0001\u0000\u0000\u0000"+ + "\u0700\u0704\u0003\u0117\u008a\u0000\u0701\u0704\u0003\u0119\u008b\u0000"+ + "\u0702\u0704\u0003\u011b\u008c\u0000\u0703\u0700\u0001\u0000\u0000\u0000"+ + "\u0703\u0701\u0001\u0000\u0000\u0000\u0703\u0702\u0001\u0000\u0000\u0000"+ + "\u0704\u0116\u0001\u0000\u0000\u0000\u0705\u0709\u0005%\u0000\u0000\u0706"+ + "\u0708\u0003\u0125\u0091\u0000\u0707\u0706\u0001\u0000\u0000\u0000\u0708"+ + "\u070b\u0001\u0000\u0000\u0000\u0709\u0707\u0001\u0000\u0000\u0000\u0709"+ + "\u070a\u0001\u0000\u0000\u0000\u070a\u070c\u0001\u0000\u0000\u0000\u070b"+ + "\u0709\u0001\u0000\u0000\u0000\u070c\u070e\u0005.\u0000\u0000\u070d\u070f"+ + "\u0003\u0125\u0091\u0000\u070e\u070d\u0001\u0000\u0000\u0000\u070f\u0710"+ + "\u0001\u0000\u0000\u0000\u0710\u070e\u0001\u0000\u0000\u0000\u0710\u0711"+ + "\u0001\u0000\u0000\u0000\u0711\u0118\u0001\u0000\u0000\u0000\u0712\u0714"+ + "\u0003\u0127\u0092\u0000\u0713\u0712\u0001\u0000\u0000\u0000\u0714\u0717"+ + "\u0001\u0000\u0000\u0000\u0715\u0713\u0001\u0000\u0000\u0000\u0715\u0716"+ + "\u0001\u0000\u0000\u0000\u0716\u0718\u0001\u0000\u0000\u0000\u0717\u0715"+ + "\u0001\u0000\u0000\u0000\u0718\u071a\u0005.\u0000\u0000\u0719\u071b\u0003"+ + "\u0127\u0092\u0000\u071a\u0719\u0001\u0000\u0000\u0000\u071b\u071c\u0001"+ + "\u0000\u0000\u0000\u071c\u071a\u0001\u0000\u0000\u0000\u071c\u071d\u0001"+ + "\u0000\u0000\u0000\u071d\u011a\u0001\u0000\u0000\u0000\u071e\u0722\u0005"+ + "$\u0000\u0000\u071f\u0721\u0003\u0129\u0093\u0000\u0720\u071f\u0001\u0000"+ + "\u0000\u0000\u0721\u0724\u0001\u0000\u0000\u0000\u0722\u0720\u0001\u0000"+ + "\u0000\u0000\u0722\u0723\u0001\u0000\u0000\u0000\u0723\u0725\u0001\u0000"+ + "\u0000\u0000\u0724\u0722\u0001\u0000\u0000\u0000\u0725\u0727\u0005.\u0000"+ + "\u0000\u0726\u0728\u0003\u0129\u0093\u0000\u0727\u0726\u0001\u0000\u0000"+ + "\u0000\u0728\u0729\u0001\u0000\u0000\u0000\u0729\u0727\u0001\u0000\u0000"+ + "\u0000\u0729\u072a\u0001\u0000\u0000\u0000\u072a\u011c\u0001\u0000\u0000"+ + "\u0000\u072b\u072f\u0003\u0121\u008f\u0000\u072c\u072f\u0003\u0123\u0090"+ + "\u0000\u072d\u072f\u0003\u011f\u008e\u0000\u072e\u072b\u0001\u0000\u0000"+ + "\u0000\u072e\u072c\u0001\u0000\u0000\u0000\u072e\u072d\u0001\u0000\u0000"+ + "\u0000\u072f\u011e\u0001\u0000\u0000\u0000\u0730\u0732\u0005%\u0000\u0000"+ + "\u0731\u0733\u0003\u0125\u0091\u0000\u0732\u0731\u0001\u0000\u0000\u0000"+ + "\u0733\u0734\u0001\u0000\u0000\u0000\u0734\u0732\u0001\u0000\u0000\u0000"+ + "\u0734\u0735\u0001\u0000\u0000\u0000\u0735\u0120\u0001\u0000\u0000\u0000"+ + "\u0736\u0738\u0003\u0127\u0092\u0000\u0737\u0736\u0001\u0000\u0000\u0000"+ + "\u0738\u0739\u0001\u0000\u0000\u0000\u0739\u0737\u0001\u0000\u0000\u0000"+ + "\u0739\u073a\u0001\u0000\u0000\u0000\u073a\u0122\u0001\u0000\u0000\u0000"+ + "\u073b\u073d\u0005$\u0000\u0000\u073c\u073e\u0003\u0129\u0093\u0000\u073d"+ + "\u073c\u0001\u0000\u0000\u0000\u073e\u073f\u0001\u0000\u0000\u0000\u073f"+ + "\u073d\u0001\u0000\u0000\u0000\u073f\u0740\u0001\u0000\u0000\u0000\u0740"+ + "\u0124\u0001\u0000\u0000\u0000\u0741\u0742\u0007\u0004\u0000\u0000\u0742"+ + "\u0126\u0001\u0000\u0000\u0000\u0743\u0744\u0007\u0005\u0000\u0000\u0744"+ + "\u0128\u0001\u0000\u0000\u0000\u0745\u0746\u0007\u0006\u0000\u0000\u0746"+ + "\u012a\u0001\u0000\u0000\u0000\u0747\u074b\u0005\'\u0000\u0000\u0748\u0749"+ + "\u0005\\\u0000\u0000\u0749\u074c\u0007\u0012\u0000\u0000\u074a\u074c\b"+ + "\u000f\u0000\u0000\u074b\u0748\u0001\u0000\u0000\u0000\u074b\u074a\u0001"+ + "\u0000\u0000\u0000\u074c\u074d\u0001\u0000\u0000\u0000\u074d\u074e\u0005"+ + "\'\u0000\u0000\u074e\u012c\u0001\u0000\u0000\u0000\u074f\u0751\u0003\u012f"+ + "\u0096\u0000\u0750\u0752\u0007\u0013\u0000\u0000\u0751\u0750\u0001\u0000"+ + "\u0000\u0000\u0752\u0753\u0001\u0000\u0000\u0000\u0753\u0751\u0001\u0000"+ + "\u0000\u0000\u0753\u0754\u0001\u0000\u0000\u0000\u0754\u012e\u0001\u0000"+ + "\u0000\u0000\u0755\u0759\u0005!\u0000\u0000\u0756\u0758\u0003\u0135\u0099"+ + "\u0000\u0757\u0756\u0001\u0000\u0000\u0000\u0758\u075b\u0001\u0000\u0000"+ + "\u0000\u0759\u0757\u0001\u0000\u0000\u0000\u0759\u075a\u0001\u0000\u0000"+ + "\u0000\u075a\u0130\u0001\u0000\u0000\u0000\u075b\u0759\u0001\u0000\u0000"+ + "\u0000\u075c\u0760\u0003\u0133\u0098\u0000\u075d\u075f\u0003\u0135\u0099"+ + "\u0000\u075e\u075d\u0001\u0000\u0000\u0000\u075f\u0762\u0001\u0000\u0000"+ + "\u0000\u0760\u075e\u0001\u0000\u0000\u0000\u0760\u0761\u0001\u0000\u0000"+ + "\u0000\u0761\u0132\u0001\u0000\u0000\u0000\u0762\u0760\u0001\u0000\u0000"+ + "\u0000\u0763\u0764\u0007\u0007\u0000\u0000\u0764\u0134\u0001\u0000\u0000"+ + "\u0000\u0765\u0766\u0007\b\u0000\u0000\u0766\u0136\u0001\u0000\u0000\u0000"+ + "\u0767\u0768\u0005@\u0000\u0000\u0768\u0769\u0003\u0131\u0097\u0000\u0769"+ + "\u0138\u0001\u0000\u0000\u0000\u076a\u076c\u0007\u0010\u0000\u0000\u076b"+ + "\u076a\u0001\u0000\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076d"+ + "\u076b\u0001\u0000\u0000\u0000\u076d\u076e\u0001\u0000\u0000\u0000\u076e"+ + "\u076f\u0001\u0000\u0000\u0000\u076f\u0770\u0006\u009b\u0005\u0000\u0770"+ + "\u013a\u0001\u0000\u0000\u0000\u0771\u0772\u0005/\u0000\u0000\u0772\u0773"+ + "\u0005/\u0000\u0000\u0773\u0777\u0001\u0000\u0000\u0000\u0774\u0776\b"+ + "\u0011\u0000\u0000\u0775\u0774\u0001\u0000\u0000\u0000\u0776\u0779\u0001"+ + "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ + "\u0000\u0000\u0000\u0778\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001"+ + "\u0000\u0000\u0000\u077a\u077b\u0006\u009c\u0006\u0000\u077b\u013c\u0001"+ + "\u0000\u0000\u0000\u077c\u077d\u0005/\u0000\u0000\u077d\u077e\u0005*\u0000"+ + "\u0000\u077e\u0782\u0001\u0000\u0000\u0000\u077f\u0781\t\u0000\u0000\u0000"+ + "\u0780\u077f\u0001\u0000\u0000\u0000\u0781\u0784\u0001\u0000\u0000\u0000"+ + "\u0782\u0783\u0001\u0000\u0000\u0000\u0782\u0780\u0001\u0000\u0000\u0000"+ + "\u0783\u0785\u0001\u0000\u0000\u0000\u0784\u0782\u0001\u0000\u0000\u0000"+ + "\u0785\u0786\u0005*\u0000\u0000\u0786\u0787\u0005/\u0000\u0000\u0787\u0788"+ + "\u0001\u0000\u0000\u0000\u0788\u0789\u0006\u009d\u0006\u0000\u0789\u013e"+ + "\u0001\u0000\u0000\u0000\u078a\u078c\u0005<\u0000\u0000\u078b\u078d\u0007"+ + "\u0014\u0000\u0000\u078c\u078b\u0001\u0000\u0000\u0000\u078d\u078e\u0001"+ + "\u0000\u0000\u0000\u078e\u078c\u0001\u0000\u0000\u0000\u078e\u078f\u0001"+ + "\u0000\u0000\u0000\u078f\u0790\u0001\u0000\u0000\u0000\u0790\u0791\u0005"+ + ">\u0000\u0000\u0791\u0792\u0006\u009e\t\u0000\u0792\u0140\u0001\u0000"+ + "\u0000\u0000\u0793\u0799\u0005\"\u0000\u0000\u0794\u0795\u0005\\\u0000"+ + "\u0000\u0795\u0798\u0005\"\u0000\u0000\u0796\u0798\b\t\u0000\u0000\u0797"+ + "\u0794\u0001\u0000\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798"+ + "\u079b\u0001\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799"+ + "\u079a\u0001\u0000\u0000\u0000\u079a\u079c\u0001\u0000\u0000\u0000\u079b"+ + "\u0799\u0001\u0000\u0000\u0000\u079c\u079d\u0005\"\u0000\u0000\u079d\u079e"+ + "\u0006\u009f\n\u0000\u079e\u0142\u0001\u0000\u0000\u0000\u079f\u07a1\u0007"+ + "\u0010\u0000\u0000\u07a0\u079f\u0001\u0000\u0000\u0000\u07a1\u07a2\u0001"+ + "\u0000\u0000\u0000\u07a2\u07a0\u0001\u0000\u0000\u0000\u07a2\u07a3\u0001"+ + "\u0000\u0000\u0000\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a5\u0006"+ + "\u00a0\u0005\u0000\u07a5\u0144\u0001\u0000\u0000\u0000\u07a6\u07a7\u0005"+ + "/\u0000\u0000\u07a7\u07a8\u0005/\u0000\u0000\u07a8\u07ac\u0001\u0000\u0000"+ + "\u0000\u07a9\u07ab\b\u0011\u0000\u0000\u07aa\u07a9\u0001\u0000\u0000\u0000"+ + "\u07ab\u07ae\u0001\u0000\u0000\u0000\u07ac\u07aa\u0001\u0000\u0000\u0000"+ + "\u07ac\u07ad\u0001\u0000\u0000\u0000\u07ad\u07af\u0001\u0000\u0000\u0000"+ + "\u07ae\u07ac\u0001\u0000\u0000\u0000\u07af\u07b0\u0006\u00a1\u0006\u0000"+ + "\u07b0\u0146\u0001\u0000\u0000\u0000\u07b1\u07b2\u0005/\u0000\u0000\u07b2"+ + "\u07b3\u0005*\u0000\u0000\u07b3\u07b7\u0001\u0000\u0000\u0000\u07b4\u07b6"+ + "\t\u0000\u0000\u0000\u07b5\u07b4\u0001\u0000\u0000\u0000\u07b6\u07b9\u0001"+ + "\u0000\u0000\u0000\u07b7\u07b8\u0001\u0000\u0000\u0000\u07b7\u07b5\u0001"+ + "\u0000\u0000\u0000\u07b8\u07ba\u0001\u0000\u0000\u0000\u07b9\u07b7\u0001"+ + "\u0000\u0000\u0000\u07ba\u07bb\u0005*\u0000\u0000\u07bb\u07bc\u0005/\u0000"+ + "\u0000\u07bc\u07bd\u0001\u0000\u0000\u0000\u07bd\u07be\u0006\u00a2\u0006"+ + "\u0000\u07be\u0148\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b6\u027c"+ + "\u032d\u0338\u0340\u0370\u03ae\u03b3\u03ba\u03bf\u03c6\u03cb\u03d2\u03d9"+ + "\u03de\u03e5\u03ea\u03ef\u03f6\u03fc\u03fe\u0403\u040a\u040f\u041b\u0428"+ + "\u042a\u042f\u0433\u0435\u0438\u043e\u0441\u0446\u0449\u0450\u045a\u0465"+ + "\u06d2\u06fe\u0703\u0709\u0710\u0715\u071c\u0722\u0729\u072e\u0734\u0739"+ + "\u073f\u074b\u0753\u0759\u0760\u076d\u0777\u0782\u078e\u0797\u0799\u07a2"+ + "\u07ac\u07b7\u000b\u0001\u0000\u0000\u0001C\u0001\u0001Q\u0002\u0001R"+ + "\u0003\u0001l\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0086\u0005"+ + "\u0001\u0087\u0006\u0001\u009e\u0007\u0001\u009f\b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/gen/KickCLexer.tokens b/gen/KickCLexer.tokens index 4d0aace39..2f4afb435 100644 --- a/gen/KickCLexer.tokens +++ b/gen/KickCLexer.tokens @@ -51,106 +51,107 @@ ADDRESS=50 ADDRESS_ZEROPAGE=51 ADDRESS_MAINMEM=52 FAR=53 -FORM_SSA=54 -FORM_MA=55 -INTRINSIC=56 -CALLINGCONVENTION=57 -IF=58 -ELSE=59 -WHILE=60 -DO=61 -FOR=62 -SWITCH=63 -RETURN=64 -BREAK=65 -CONTINUE=66 -GOTO=67 -ASM=68 -DEFAULT=69 -CASE=70 -STRUCT=71 -UNION=72 -ENUM=73 -SIZEOF=74 -TYPEID=75 -DEFINED=76 -KICKASM=77 -LOGIC_NOT=78 -SIMPLETYPE=79 -BOOLEAN=80 -KICKASM_BODY=81 -IMPORT=82 -INCLUDE=83 -PRAGMA=84 -DEFINE=85 -DEFINE_CONTINUE=86 -UNDEF=87 -IFDEF=88 -IFNDEF=89 -IFIF=90 -ELIF=91 -IFELSE=92 -ENDIF=93 -ERROR=94 -TOKEN_STRINGIZE=95 -TOKEN_MERGE=96 -NUMBER=97 -NUMFLOAT=98 -BINFLOAT=99 -DECFLOAT=100 -HEXFLOAT=101 -NUMINT=102 -BININTEGER=103 -DECINTEGER=104 -HEXINTEGER=105 -NAME=106 -STRING=107 -CHAR=108 -WS=109 -COMMENT_LINE=110 -COMMENT_BLOCK=111 -ASM_BYTE=112 -ASM_MNEMONIC=113 -ASM_IMM=114 -ASM_COLON=115 -ASM_COMMA=116 -ASM_PAR_BEGIN=117 -ASM_PAR_END=118 -ASM_BRACKET_BEGIN=119 -ASM_BRACKET_END=120 -ASM_DOT=121 -ASM_SHIFT_LEFT=122 -ASM_SHIFT_RIGHT=123 -ASM_PLUS=124 -ASM_MINUS=125 -ASM_LESS_THAN=126 -ASM_GREATER_THAN=127 -ASM_MULTIPLY=128 -ASM_DIVIDE=129 -ASM_CURLY_BEGIN=130 -ASM_CURLY_END=131 -ASM_NUMBER=132 -ASM_NUMFLOAT=133 -ASM_BINFLOAT=134 -ASM_DECFLOAT=135 -ASM_HEXFLOAT=136 -ASM_NUMINT=137 -ASM_BININTEGER=138 -ASM_DECINTEGER=139 -ASM_HEXINTEGER=140 -ASM_CHAR=141 -ASM_MULTI_REL=142 -ASM_MULTI_NAME=143 -ASM_NAME=144 -ASM_TAG=145 -ASM_WS=146 -ASM_COMMENT_LINE=147 -ASM_COMMENT_BLOCK=148 -IMPORT_SYSTEMFILE=149 -IMPORT_LOCALFILE=150 -IMPORT_WS=151 -IMPORT_COMMENT_LINE=152 -IMPORT_COMMENT_BLOCK=153 +NEAR=54 +FORM_SSA=55 +FORM_MA=56 +INTRINSIC=57 +CALLINGCONVENTION=58 +IF=59 +ELSE=60 +WHILE=61 +DO=62 +FOR=63 +SWITCH=64 +RETURN=65 +BREAK=66 +CONTINUE=67 +GOTO=68 +ASM=69 +DEFAULT=70 +CASE=71 +STRUCT=72 +UNION=73 +ENUM=74 +SIZEOF=75 +TYPEID=76 +DEFINED=77 +KICKASM=78 +LOGIC_NOT=79 +SIMPLETYPE=80 +BOOLEAN=81 +KICKASM_BODY=82 +IMPORT=83 +INCLUDE=84 +PRAGMA=85 +DEFINE=86 +DEFINE_CONTINUE=87 +UNDEF=88 +IFDEF=89 +IFNDEF=90 +IFIF=91 +ELIF=92 +IFELSE=93 +ENDIF=94 +ERROR=95 +TOKEN_STRINGIZE=96 +TOKEN_MERGE=97 +NUMBER=98 +NUMFLOAT=99 +BINFLOAT=100 +DECFLOAT=101 +HEXFLOAT=102 +NUMINT=103 +BININTEGER=104 +DECINTEGER=105 +HEXINTEGER=106 +NAME=107 +STRING=108 +CHAR=109 +WS=110 +COMMENT_LINE=111 +COMMENT_BLOCK=112 +ASM_BYTE=113 +ASM_MNEMONIC=114 +ASM_IMM=115 +ASM_COLON=116 +ASM_COMMA=117 +ASM_PAR_BEGIN=118 +ASM_PAR_END=119 +ASM_BRACKET_BEGIN=120 +ASM_BRACKET_END=121 +ASM_DOT=122 +ASM_SHIFT_LEFT=123 +ASM_SHIFT_RIGHT=124 +ASM_PLUS=125 +ASM_MINUS=126 +ASM_LESS_THAN=127 +ASM_GREATER_THAN=128 +ASM_MULTIPLY=129 +ASM_DIVIDE=130 +ASM_CURLY_BEGIN=131 +ASM_CURLY_END=132 +ASM_NUMBER=133 +ASM_NUMFLOAT=134 +ASM_BINFLOAT=135 +ASM_DECFLOAT=136 +ASM_HEXFLOAT=137 +ASM_NUMINT=138 +ASM_BININTEGER=139 +ASM_DECINTEGER=140 +ASM_HEXINTEGER=141 +ASM_CHAR=142 +ASM_MULTI_REL=143 +ASM_MULTI_NAME=144 +ASM_NAME=145 +ASM_TAG=146 +ASM_WS=147 +ASM_COMMENT_LINE=148 +ASM_COMMENT_BLOCK=149 +IMPORT_SYSTEMFILE=150 +IMPORT_LOCALFILE=151 +IMPORT_WS=152 +IMPORT_COMMENT_LINE=153 +IMPORT_COMMENT_BLOCK=154 ';'=8 '..'=11 '...'=12 @@ -185,41 +186,42 @@ IMPORT_COMMENT_BLOCK=153 '__zp'=51 '__mem'=52 '__far'=53 -'__ssa'=54 -'__ma'=55 -'__intrinsic'=56 -'if'=58 -'else'=59 -'while'=60 -'do'=61 -'for'=62 -'switch'=63 -'return'=64 -'break'=65 -'continue'=66 -'goto'=67 -'asm'=68 -'default'=69 -'case'=70 -'struct'=71 -'union'=72 -'enum'=73 -'sizeof'=74 -'typeid'=75 -'defined'=76 -'kickasm'=77 -'!'=78 -'#import'=82 -'#include'=83 -'#pragma'=84 -'#define'=85 -'#undef'=87 -'#ifdef'=88 -'#ifndef'=89 -'#if'=90 -'#elif'=91 -'#else'=92 -'#endif'=93 -'#error'=94 -'.byte'=112 -'#'=114 +'__near'=54 +'__ssa'=55 +'__ma'=56 +'__intrinsic'=57 +'if'=59 +'else'=60 +'while'=61 +'do'=62 +'for'=63 +'switch'=64 +'return'=65 +'break'=66 +'continue'=67 +'goto'=68 +'asm'=69 +'default'=70 +'case'=71 +'struct'=72 +'union'=73 +'enum'=74 +'sizeof'=75 +'typeid'=76 +'defined'=77 +'kickasm'=78 +'!'=79 +'#import'=83 +'#include'=84 +'#pragma'=85 +'#define'=86 +'#undef'=88 +'#ifdef'=89 +'#ifndef'=90 +'#if'=91 +'#elif'=92 +'#else'=93 +'#endif'=94 +'#error'=95 +'.byte'=113 +'#'=115 diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 4b61311bf..3b20e6c22 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,7 +136,8 @@ parameterDecl ; pragma - : PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END + : PRAGMA NAME + | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 9ac613614..67f93854c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -325,6 +325,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor pragmaBody = readBody(cTokenSource); - final Token pragmaBodyStart = pragmaBody.get(0); - // Convert space-based pragma to parenthesis-based for easier parsing - // #pragma NAME XXX YYY \n => #pragma NAME ( XXX , YYY ) \n - if(pragmaBodyStart.getType() != KickCLexer.PAR_BEGIN) { - ArrayList parenthesizedBody = new ArrayList<>(); - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); - // Parenthesize the parameter list - boolean first = true; - for(Token token : pragmaBody) { - if(token.getChannel() != CParser.CHANNEL_WHITESPACE && !first) { - parenthesizedBody.add(new CommonToken(KickCLexer.COMMA, ",")); + if(pragmaBody.size()>0) { + final Token pragmaBodyStart = pragmaBody.get(0); + // Convert space-based pragma to parenthesis-based for easier parsing + // #pragma NAME XXX YYY \n => #pragma NAME ( XXX , YYY ) \n + if (pragmaBodyStart.getType() != KickCLexer.PAR_BEGIN) { + ArrayList parenthesizedBody = new ArrayList<>(); + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); + // Parenthesize the parameter list + boolean first = true; + for (Token token : pragmaBody) { + if (token.getChannel() != CParser.CHANNEL_WHITESPACE && !first) { + parenthesizedBody.add(new CommonToken(KickCLexer.COMMA, ",")); + } + parenthesizedBody.add(token); + first = false; } - parenthesizedBody.add(token); - first = false; + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); + pragmaBody = parenthesizedBody; } - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); - pragmaBody = parenthesizedBody; + pragmaTokens.addAll(pragmaBody); + // Pass on the #pragma to the parser - and mark it as already handled + cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); } - pragmaTokens.addAll(pragmaBody); - // Pass on the #pragma to the parser - and mark it as already handled - cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); parserPragmas.add(inputToken); return true; } diff --git a/src/test/kc/procedure-callingconvention-phi-far-4.c b/src/test/kc/procedure-callingconvention-phi-far-4.c new file mode 100644 index 000000000..4004a4606 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-far-4.c @@ -0,0 +1,32 @@ +// Test a far call procedure with a calling convention sp + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(stage) +#pragma far_seg(stage, 20) + +char plus(char a, char b) { + return a+b; +} + +#pragma near_seg + +void stage_entry() { + asm { + lda 0 + pha + lda #1 + sta 0 + } +} + +void stage_exit() { + asm { + pla + sta 0 + } +} From d19c005d79aecd649b821bce1590e0f2baf9157a Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sat, 19 Nov 2022 08:19:18 +0100 Subject: [PATCH 09/50] Fine tune of the phi-far-4 example to clearly illustrate #pragma near_seg utilization. --- .../procedure-callingconvention-phi-far-4.c | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/test/kc/procedure-callingconvention-phi-far-4.c b/src/test/kc/procedure-callingconvention-phi-far-4.c index 4004a4606..7ce43eb46 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-4.c +++ b/src/test/kc/procedure-callingconvention-phi-far-4.c @@ -1,11 +1,7 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention phi char* const SCREEN = (char*)0x0400; -void main(void) { - SCREEN[0] = plus('0', 7); -} - #pragma code_seg(stage) #pragma far_seg(stage, 20) @@ -15,18 +11,7 @@ char plus(char a, char b) { #pragma near_seg -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } +void main(void) { + SCREEN[0] = plus('0', 7); } -void stage_exit() { - asm { - pla - sta 0 - } -} From 1a63d437a0d0bf9a8041e595470359e83be6f621 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 20 Nov 2022 09:56:10 +0100 Subject: [PATCH 10/50] - Refactored far call logic during parsing. The pragmaFarSegs hash table has been removed from the Pass0GenerateStatementSequence. Instead, a currentFarSegment is controlling the #pragma logic. - Refactored pragmaCodeSegs HashMap, which has been removed from Pass0GenerateStatementSequence and moved to Program. It controls which code segment have been defined, and a validation is implemented in the far_seg pragmas. - Refactored __far() to use the code segments, in analogy to far_seg pragmas. - Refactored Procedure, which implements functions to use the FarSegment to decide on far declaration and far bank retrieval. - refactored CallingConvention. Removed earlier quick implementation of bankFar variable as a local property, and declaredFar in the Procedure class. Now everyting is controlled through the farSegment. - Refactored Procedure, the removal of FAR_CALL calling convention. It is wrong to implement FAR_CALL calling convention, because far and near calls can be stack calls, phi calls and even a varcall can be near of far. - Removed the Pass1ProcedureFar because far and near implementation is not defined in statement level, it is defined on procedure level. But I've kept Pass1ProcedureFar to suppor the logic for inline prepare, execute, finalize routines during further implementation. - Refactored directive FAR to match the directive far_seg() structure. - Refactored complete logic during Pass4CodeGeneration to process statement call fragment generation to decide on near or far calls within the logic, taking into account the calling convention used. - Added new fragments call_far[platform]_prepare.asm, call_far[platform]_execute.asm, call_far[platform]_finalize.asm and deleted call_far[platform]_entry.asm, call_far[platform]_exit.asm - Renamed pragmas far_seg and near_seg to simply far and near respectively. Updated test cases with this change. - Added test cases. TODO: The actual inline implementation of prepare, execute, finalize functions when platform .asm fragments are not used. TODO: Implementation of the near directive. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 2 +- ...16_entry.asm => call_far_cx16_execute.asm} | 0 ...16_exit.asm => call_far_cx16_finalize.asm} | 0 .../mos6502-common/call_far_cx16_prepare.asm | 0 .../java/dk/camelot64/kickc/Compiler.java | 1 - .../AsmFragmentInstanceSpecBuilder.java | 31 +++- .../signature/AsmFragmentSignature.java | 15 +- .../dk/camelot64/kickc/model/Directive.java | 36 ++++- .../dk/camelot64/kickc/model/FarSegment.java | 49 +++--- .../dk/camelot64/kickc/model/Program.java | 13 +- .../kickc/model/symbols/Procedure.java | 37 +++-- .../dk/camelot64/kickc/parser/CParser.java | 8 +- .../Pass0GenerateStatementSequence.java | 85 +++++----- .../kickc/passes/Pass1ProcedureFar.java | 2 +- .../kickc/passes/Pass4CodeGeneration.java | 44 +++-- .../kickc/test/TestProgramsFast.java | 38 +++-- .../procedure-callingconvention-phi-far-0.c | 3 +- .../procedure-callingconvention-phi-far-1.c | 2 +- .../procedure-callingconvention-phi-far-2.c | 2 +- .../procedure-callingconvention-phi-far-3.c | 2 +- .../procedure-callingconvention-phi-far-4.c | 4 +- .../procedure-callingconvention-phi-far-5.c | 100 ++++++++++++ .../procedure-callingconvention-stack-far-0.c | 3 +- .../procedure-callingconvention-stack-far-1.c | 3 +- .../procedure-callingconvention-stack-far-2.c | 3 +- .../procedure-callingconvention-stack-far-3.c | 51 +++++- .../procedure-callingconvention-stack-far-4.c | 40 ++--- .../procedure-callingconvention-stack-far-5.c | 37 ++--- .../procedure-callingconvention-stack-far-6.c | 18 --- ...rocedure-callingconvention-stack-far-3.asm | 145 +++++++++++++++++ ...rocedure-callingconvention-stack-far-3.dbg | 153 ++++++++++++++++++ ...ocedure-callingconvention-stack-far-3.klog | 22 +++ ...rocedure-callingconvention-stack-far-3.prg | Bin 0 -> 91 bytes ...rocedure-callingconvention-stack-far-3.sym | 20 +++ ...procedure-callingconvention-stack-far-3.vs | 14 ++ 35 files changed, 775 insertions(+), 208 deletions(-) rename src/main/fragment/mos6502-common/{call_far_cx16_entry.asm => call_far_cx16_execute.asm} (100%) rename src/main/fragment/mos6502-common/{call_far_cx16_exit.asm => call_far_cx16_finalize.asm} (100%) create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_prepare.asm create mode 100644 src/test/kc/procedure-callingconvention-phi-far-5.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-far-6.c create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.asm create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.dbg create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.klog create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.prg create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.sym create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.vs diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 3b20e6c22..070ecaee8 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -162,7 +162,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline - | FAR PAR_BEGIN ( NUMBER ) PAR_END #directiveFar + | FAR PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveFar | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/fragment/mos6502-common/call_far_cx16_entry.asm b/src/main/fragment/mos6502-common/call_far_cx16_execute.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_entry.asm rename to src/main/fragment/mos6502-common/call_far_cx16_execute.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_exit.asm b/src/main/fragment/mos6502-common/call_far_cx16_finalize.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_exit.asm rename to src/main/fragment/mos6502-common/call_far_cx16_finalize.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_prepare.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 812cffe2a..cc8b197cd 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -278,7 +278,6 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } new Pass1ProcedureInline(program).execute(); - new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. See https://gitlab.com/Flight_Control/kickc/-/commits/far-call-isolated new PassNStatementIndices(program).step(); program.clearCallGraph(); new Pass1AssertNoRecursion(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 41e3a76e8..c39c919d9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -18,7 +18,6 @@ import dk.camelot64.kickc.model.symbols.Symbol; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; import dk.camelot64.kickc.model.values.*; -import kickass.pass.values.StringValue; /** * Creates an ASM Fragment specification for a statement in the control flow graph. @@ -43,16 +42,16 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a far call entry + * Create a fragment instance spec factory for a far call prepare * * @param bankFar The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallEntry(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec farCallPrepare(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Prepare); ScopeRef codeScope = program.getScope().getRef(); // ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); bindings.bind("c1", new ConstantInteger(bankFar)); @@ -61,16 +60,34 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a far call exit + * Create a fragment instance spec factory for a far call execute + * + * @param bankFar The bank where the procedure is to be called. + * @param procedureName The full name of the procedure. + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpec farCallExecute(Long bankFar, String procedureName, Program program) { + AsmFragmentBindings bindings = new AsmFragmentBindings(program); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Execute); + ScopeRef codeScope = program.getScope().getRef(); +// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); + bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("la1", new LabelRef(procedureName)); + return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + } + + /** + * Create a fragment instance spec factory for a far call finalize * * @param bankFar The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallExit(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec farCallFinalize(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Finalize); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(bankFar)); bindings.bind("la1", new LabelRef(procedureName)); diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 28797a17d..45a2689e7 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -78,23 +78,24 @@ public interface AsmFragmentSignature { final private Long bankFar; final private String targetPlatform; - public enum EntryExit { - Exit, - Entry + public enum PrepareExecuteFinalize { + Prepare, + Execute, + Finalize } - final private CallFar.EntryExit entryExit; + final private PrepareExecuteFinalize far; - public CallFar(Long bankFar, String targetPlatform, CallFar.EntryExit entryExit) { + public CallFar(Long bankFar, String targetPlatform, PrepareExecuteFinalize far) { this.bankFar = bankFar; this.targetPlatform = targetPlatform; - this.entryExit = entryExit; + this.far = far; } @Override public String getName() { - return "call_far" + "_" + targetPlatform + "_" + entryExit.name().toLowerCase(); + return "call_far" + "_" + targetPlatform + "_" + far.name().toLowerCase(); } } diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index f8f842a63..e155d5587 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -46,13 +46,41 @@ public class Directive { /** Function declared far. */ static public class Far extends Directive { - public Long bankFar; + private String farSegmentName; + private Long farSegmentBank; + private String farProcedurePrepare; + private String farProcedureExecute; + private String farProcedureFinalize; - public Far(Long bankFar) { - super("__far"); - this.bankFar = bankFar; + + public Far(String farSegmentName, Long farSegmentBank, String farProcedurePrepare, String farProcedureExecute, String farProcedureFinalize) { + super("far" ); + this.farSegmentName = farSegmentName; + this.farSegmentBank = farSegmentBank; + this.farProcedurePrepare = farProcedurePrepare; + this.farProcedureExecute = farProcedureExecute; + this.farProcedureFinalize = farProcedureFinalize; } + public String getFarSegmentName() { + return farSegmentName; + } + + public Long getFarSegmentBank() { + return farSegmentBank; + } + + public String getFarProcedurePrepare() { + return farProcedurePrepare; + } + + public String getFarProcedureExecute() { + return farProcedureExecute; + } + + public String getFarProcedureFinalize() { + return farProcedureFinalize; + } } /** Function declared intrinsic. */ diff --git a/src/main/java/dk/camelot64/kickc/model/FarSegment.java b/src/main/java/dk/camelot64/kickc/model/FarSegment.java index d297adbad..18f8dd976 100644 --- a/src/main/java/dk/camelot64/kickc/model/FarSegment.java +++ b/src/main/java/dk/camelot64/kickc/model/FarSegment.java @@ -1,32 +1,43 @@ package dk.camelot64.kickc.model; -import dk.camelot64.kickc.model.symbols.Procedure; - -import java.util.List; - /** A far segment. */ public class FarSegment { - private String name; - private Integer bank; - private String call_prepare; - private String call_execute; - private String call_finalize; + private final String farSegment; + private Long farBank; + private final String procedurePrepare; + private final String procedureExecute; + private final String procedureFinalize; - public FarSegment(String name, Integer bank, String call_prepare, String call_execute, String call_finalize) { - this.name = name; - this.bank = bank; - this.call_prepare = call_prepare; - this.call_execute = call_execute; - this.call_finalize = call_finalize; + public FarSegment(String name, Long bank, String procedurePrepare, String procedureExecute, String procedureFinalize) { + this.farSegment = name; + this.farBank = bank; + this.procedurePrepare = procedurePrepare; + this.procedureExecute = procedureExecute; + this.procedureFinalize = procedureFinalize; } - public String getName() { - return name; + public String getFarSegment() { + return farSegment; } + public Long getFarBank() { + return farBank; + } - public Integer getBank() { - return bank; + public void setFarBank(Long farBank) { + this.farBank = farBank; + } + + public String getProcedurePrepare() { + return procedurePrepare; + } + + public String getProcedureExecute() { + return procedureExecute; + } + + public String getProcedureFinalize() { + return procedureFinalize; } } diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index bcd720852..898c50028 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -8,13 +8,11 @@ import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.values.LabelRef; import dk.camelot64.kickc.model.values.ProcedureRef; +import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.passes.calcs.*; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** A KickC Intermediate Compiler Language (ICL) Program */ public class Program { @@ -107,6 +105,8 @@ public class Program { private NaturalLoopSet loopSet; /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; + /** All #pragma code segments. Collected during parsing. These are used by the far() pragmas to validate if the code segment exists during compilation.*/ + private final Map pragmaCodeSegs; public Program() { this.outputFileManager = new OutputFileManager(); @@ -119,6 +119,8 @@ public class Program { this.asmResourceFiles = new ArrayList<>(); this.reservedZps = new ArrayList<>(); this.procedureCompilations = new LinkedHashMap<>(); + this.pragmaCodeSegs = new HashMap<>(); // Used to collect all pragma code segments. + } /** @@ -539,4 +541,7 @@ public class Program { return sizeInfo.toString(); } + public Map getPragmaCodeSegs() { + return pragmaCodeSegs; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 7c375e71c..c1b761e7f 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -1,6 +1,7 @@ package dk.camelot64.kickc.model.symbols; import dk.camelot64.kickc.model.Comment; +import dk.camelot64.kickc.model.FarSegment; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.types.SymbolType; @@ -27,8 +28,6 @@ public class Procedure extends Scope { private boolean declaredInline; /** true if the procedure is declared far. */ private boolean declaredFar; - /** contains the far bank. */ - private Long bankFar; /** True if the procedure is declared intrinsic. */ private boolean declaredIntrinsic; /** The type of interrupt that the procedure serves. Null for all procedures not serving an interrupt. */ @@ -45,6 +44,9 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; + /** The far segment information. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ + private FarSegment farSegment; + /** The names of all legal intrinsic procedures. */ final public static List INTRINSIC_PROCEDURES = Arrays.asList( @@ -54,10 +56,17 @@ public class Procedure extends Scope { Pass1ByteXIntrinsicRewrite.INTRINSIC_MAKELONG4 ); + public FarSegment getFarSegment() { + return farSegment; + } + + public void setFarSegment(FarSegment farSegment) { + this.farSegment = farSegment; + } + + /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { - /** Far call in a cx16 bank using the https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar routine*/ - FAR_CALL("__far"), /** Parameters and return value handled through PHI-transitions. */ PHI_CALL("__phicall"), /** Parameters and return value over the stack. */ @@ -91,12 +100,11 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention) { + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, FarSegment farSegment) { super(name, parentScope, dataSegment); this.procedureType = procedureType; this.declaredInline = false; - this.declaredFar = false; - this.bankFar = 0L; + this.farSegment = farSegment; this.interruptType = null; this.comments = new ArrayList<>(); this.codeSegment = codeSegment; @@ -207,17 +215,14 @@ public class Procedure extends Scope { } public boolean isDeclaredFar() { - return declaredFar; + return farSegment != null; } - public void setDeclaredFar(boolean declaredFar) { - this.declaredFar = declaredFar; - } - - public Long getBankFar() { return this.bankFar; } - - public void setBankFar(Long bankFar) { - this.bankFar = bankFar; + public Long getFarBank() { + if(farSegment!=null) + return farSegment.getFarBank(); + else + return 0L; } public String getInterruptType() { diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index a01d0194a..806287556 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,13 +107,13 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma far_seg(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. + * #pragma far(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. */ - public static final String PRAGMA_FAR_SEG = "far_seg"; + public static final String PRAGMA_FAR = "far"; /** - * #pragma near_seg specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + * #pragma near specifies the scope of the sequent functions to be near. Segments are defined in the linker file. */ - public static final String PRAGMA_NEAR_SEG = "near_seg"; + public static final String PRAGMA_NEAR = "near"; /** * The Program. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 67f93854c..00cde33d7 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -43,10 +43,6 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ private final List pragmaConstructorFors; - /** All #pragma code segments. Collected during parsing. These are used by the far_seg pragmas to validate if the code segment exists during compilation.*/ - private final Map pragmaCodeSegs; - /** All #pragma far segments. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ - private final Map pragmaFarSegs; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -57,8 +53,6 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(); // Used to collect all pragma code segments. - this.pragmaFarSegs = new HashMap<>(); // Used to collect all pragma far segments. this.currentInterruptType = defaultInterruptType; scopeStack.push(program.getScope()); } @@ -137,7 +131,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL); + initProc = new Procedure(SymbolRef.INIT_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); initProc.setDeclaredInline(true); initProc.setParameters(new ArrayList<>()); program.getScope().add(initProc); @@ -194,7 +188,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL); + final Procedure startProcedure = new Procedure(SymbolRef.START_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); startProcedure.setParameters(new ArrayList<>()); program.getScope().add(startProcedure); final ProcedureCompilation startProcedureCompilation = program.createProcedureCompilation(startProcedure.getRef()); @@ -296,27 +290,24 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 7) { - final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); - final String call_execute = pragmaParamName(ctx.pragmaParam(3)); - final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); - this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), call_prepare, call_execute, call_finalize)); - } else { - this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), "", "", "")); - } + if (size > 7) { + final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); + final String call_execute = pragmaParamName(ctx.pragmaParam(3)); + final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); + this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), call_prepare, call_execute, call_finalize); + } else { + this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), "", "", ""); } } else { throw new CompileError("Expected at least 2 pragma parameters. Found '" + ctx.getText() + "'.", new StatementSource(ctx)); @@ -325,8 +316,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 1) { - bankFar = Long.valueOf(ctx.getChild(2).getText()); - } else { - bankFar = 0L; + String farSegmentName = ""; + Long farSegmentBank = 0L; + String farProcedurePrepare = null; + String farProcedureExecute = null; + String farProcedureFinalize = null; + if(this.currentFarSegment != null) { + farSegmentName = this.currentFarSegment.getFarSegment(); + farSegmentBank = this.currentFarSegment.getFarBank(); + farProcedurePrepare = this.currentFarSegment.getProcedurePrepare(); + farProcedureExecute = this.currentFarSegment.getProcedureExecute(); + farProcedureFinalize = this.currentFarSegment.getProcedureFinalize(); } - return new Directive.Far(bankFar); + + if(ctx.getChildCount() >= 5) { + farSegmentName = ctx.getChild(2).getText(); + farSegmentBank = Long.valueOf(ctx.getChild(4).getText()); + } + + if(ctx.getChildCount() == 11) { + farProcedurePrepare = ctx.getChild(6).getText(); + farProcedureExecute = ctx.getChild(8).getText(); + farProcedureFinalize = ctx.getChild(10).getText(); + } + + return new Directive.Far(farSegmentName, farSegmentBank, farProcedurePrepare, farProcedureExecute, farProcedureFinalize); } @Override @@ -2539,7 +2548,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // printother +printother: { + .label i = 2 + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + // printother::@1 + __b1: + // (SCREEN+40)[i]++; + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 + ldx.z i + inc SCREEN+$28,x + // for(char i:0..5) + // [8] printother::i#1 = ++ printother::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1 + // printother::@return + // } + // [10] return + rts +} + // incval +incval: { + // val++; + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + // incval::@return + // } + // [12] return + rts +} + // printval +printval: { + // SCREEN[0] = val + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + // printval::@return + // } + // [14] return + rts +} + // ival +ival: { + // incval() + // [16] callexecute incval -- call_far_cx16_exit + jsr $ff6e + .byte incval + .byte $15 + // ival::@return + // } + // [17] return + rts +} + // pval +pval: { + // printval() + // [19] callexecute printval -- call_far_cx16_exit + jsr $ff6e + .byte printval + .byte $14 + // pval::@return + // } + // [20] return + rts +} + // main +main: { + .label i = 4 + // [22] phi from main to main::@1 [phi:main->main::@1] + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // pval() + // [23] callexecute pval -- call_far_cx16_exit + jsr $ff6e + .byte pval + .byte $14 + // printother() + // [24] callexecute printother -- call_vprc1 + jsr printother + // ival() + // [25] callexecute ival -- call_far_cx16_exit + jsr $ff6e + .byte ival + .byte $15 + // for(char i:0..5) + // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1 + // main::@return + // } + // [28] return + rts +} + // File Data diff --git a/src/test/target/procedure-callingconvention-stack-far-3.dbg b/src/test/target/procedure-callingconvention-stack-far-3.dbg new file mode 100644 index 000000000..51e9414f5 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.dbg @@ -0,0 +1,153 @@ + + + 0,KickAss.jar:/include/autoinclude.asm + 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\procedure-callingconvention-stack-far-3.asm + + + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + $080d,$080e,1,23,5,23,7 + $080f,$0810,1,24,5,24,7 + $0811,$0813,1,28,5,28,7 + $0814,$0814,1,31,5,31,7 + $0815,$0816,1,38,5,38,7 + $0817,$0818,1,39,5,39,7 + $0819,$081a,1,46,5,46,7 + $081b,$081d,1,47,5,47,7 + $081e,$081f,1,50,5,50,7 + $0820,$0821,1,52,5,52,7 + $0822,$0823,1,53,5,53,7 + $0824,$0825,1,54,5,54,7 + $0826,$0826,1,58,5,58,7 + $0827,$0828,1,64,5,64,7 + $0829,$0829,1,68,5,68,7 + $082a,$082b,1,74,5,74,7 + $082c,$082e,1,75,5,75,7 + $082f,$082f,1,79,5,79,7 + $0830,$0832,1,85,5,85,7 + $0833,$0833,1,86,5,86,9 + $0834,$0834,1,87,5,87,9 + $0835,$0835,1,88,5,88,9 + $0836,$0836,1,92,5,92,7 + $0837,$0839,1,98,5,98,7 + $083a,$083a,1,99,5,99,9 + $083b,$083b,1,100,5,100,9 + $083c,$083c,1,101,5,101,9 + $083d,$083d,1,105,5,105,7 + $083e,$083f,1,112,5,112,7 + $0840,$0841,1,113,5,113,7 + $0842,$0844,1,120,5,120,7 + $0845,$0845,1,121,5,121,9 + $0846,$0846,1,122,5,122,9 + $0847,$0847,1,123,5,123,9 + $0848,$084a,1,126,5,126,7 + $084b,$084d,1,129,5,129,7 + $084e,$084e,1,130,5,130,9 + $084f,$084f,1,131,5,131,9 + $0850,$0850,1,132,5,132,9 + $0851,$0852,1,135,5,135,7 + $0853,$0854,1,137,5,137,7 + $0855,$0856,1,138,5,138,7 + $0857,$0858,1,139,5,139,7 + $0859,$0859,1,143,5,143,7 + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + + + + $080d,$080e,1,23,5,23,7 + $080f,$0810,1,24,5,24,7 + $0811,$0813,1,28,5,28,7 + $0814,$0814,1,31,5,31,7 + $0815,$0816,1,38,5,38,7 + $0817,$0818,1,39,5,39,7 + $0819,$081a,1,46,5,46,7 + $081b,$081d,1,47,5,47,7 + $081e,$081f,1,50,5,50,7 + $0820,$0821,1,52,5,52,7 + $0822,$0823,1,53,5,53,7 + $0824,$0825,1,54,5,54,7 + $0826,$0826,1,58,5,58,7 + $0827,$0828,1,64,5,64,7 + $0829,$0829,1,68,5,68,7 + $082a,$082b,1,74,5,74,7 + $082c,$082e,1,75,5,75,7 + $082f,$082f,1,79,5,79,7 + $0830,$0832,1,85,5,85,7 + $0833,$0833,1,86,5,86,9 + $0834,$0834,1,87,5,87,9 + $0835,$0835,1,88,5,88,9 + $0836,$0836,1,92,5,92,7 + $0837,$0839,1,98,5,98,7 + $083a,$083a,1,99,5,99,9 + $083b,$083b,1,100,5,100,9 + $083c,$083c,1,101,5,101,9 + $083d,$083d,1,105,5,105,7 + $083e,$083f,1,112,5,112,7 + $0840,$0841,1,113,5,113,7 + $0842,$0844,1,120,5,120,7 + $0845,$0845,1,121,5,121,9 + $0846,$0846,1,122,5,122,9 + $0847,$0847,1,123,5,123,9 + $0848,$084a,1,126,5,126,7 + $084b,$084d,1,129,5,129,7 + $084e,$084e,1,130,5,130,9 + $084f,$084f,1,131,5,131,9 + $0850,$0850,1,132,5,132,9 + $0851,$0852,1,135,5,135,7 + $0853,$0854,1,137,5,137,7 + $0855,$0856,1,138,5,138,7 + $0857,$0858,1,139,5,139,7 + $0859,$0859,1,143,5,143,7 + + + + + + + + Basic,$0400,SCREEN,1,15,10,15,15 + Basic,$0003,val,1,16,10,16,12 + Code,$080d,__start,1,19,1,19,8 + Code,$0815,printother,1,34,1,34,11 + Code,$0002,i,1,35,12,35,12 + Code,$0819,__b1,1,43,3,43,7 + Code,$0827,incval,1,61,1,61,7 + Code,$082a,printval,1,71,1,71,9 + Code,$0830,ival,1,82,1,82,5 + Code,$0837,pval,1,95,1,95,5 + Code,$083e,main,1,108,1,108,5 + Code,$0004,i,1,109,12,109,12 + Code,$0842,__b1,1,117,3,117,7 + Basic,$080b,upstartEnd,0,43,1,43,11 + + + + + + + + + diff --git a/src/test/target/procedure-callingconvention-stack-far-3.klog b/src/test/target/procedure-callingconvention-stack-far-3.klog new file mode 100644 index 000000000..351cd59e1 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.klog @@ -0,0 +1,22 @@ +Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target +parsing +flex pass 1 +flex pass 2 +flex pass 3 +Output pass +Writing prg file: procedure-callingconvention-stack-far-3.prg + +Memory Map +---------- +Program-segment: + +Basic-segment: + $0801-$080c Basic + +Code-segment: + $080d-$0859 Code + +Data-segment: + +Writing Vice symbol file: procedure-callingconvention-stack-far-3.vs +Writing Symbol file: procedure-callingconvention-stack-far-3.sym diff --git a/src/test/target/procedure-callingconvention-stack-far-3.prg b/src/test/target/procedure-callingconvention-stack-far-3.prg new file mode 100644 index 0000000000000000000000000000000000000000..fe3b357eefd982f66c8bec64d2852942552d46a9 GIT binary patch literal 91 zcmZSN;O5|Bm}g{QX2`(6u#%ybS;3AY0Z20~WBRAT@{DOE+fk+qpA()jCoE;|Wnf8A m$osF(Aqt|jI7C1SS%6G)4iN=W4j{vTL-ZL7Pz%e2mk9uPR2%XD literal 0 HcmV?d00001 diff --git a/src/test/target/procedure-callingconvention-stack-far-3.sym b/src/test/target/procedure-callingconvention-stack-far-3.sym new file mode 100644 index 000000000..f1267c367 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.sym @@ -0,0 +1,20 @@ +.label val=$3 +.label SCREEN=$400 +.label __start=$80d { +} +.label pval=$837 { +} +.label ival=$830 { +} +.label incval=$827 { +} +.label main=$83e { + .label __b1=$842 + .label i=$4 +} +.label printother=$815 { + .label __b1=$819 + .label i=$2 +} +.label printval=$82a { +} diff --git a/src/test/target/procedure-callingconvention-stack-far-3.vs b/src/test/target/procedure-callingconvention-stack-far-3.vs new file mode 100644 index 000000000..2787fc577 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.vs @@ -0,0 +1,14 @@ +al C:3 .val +al C:819 .__b1__0 +al C:842 .__b1__1 +al C:400 .SCREEN +al C:80d .__start +al C:837 .pval +al C:2 .i__0 +al C:4 .i__1 +al C:830 .ival +al C:80b .upstartEnd +al C:827 .incval +al C:83e .main +al C:815 .printother +al C:82a .printval From db49ca6aabe96f0ca9ec355f33a4fadf33324f93 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Mon, 21 Nov 2022 18:17:35 +0100 Subject: [PATCH 11/50] Major changes: - Renamed #pragma far() to #pragma bank() upon design recommendations of @jesper. - renamed #pragma near to #pragma nobank, to avoid using bank(-1). - renamed __far directive to __bank directive. - introduced bank area upon design recommendation of jesper, and replaced this with the already present code segment linkage to banking. So the structured stayed the same, only the naming changed! This unlink from segment indeed makes things easier when no segments are in scope of the program. - added bank area as part of the fragment signature, so now call_far_[platform]_[bankarea]_prepare.asm, call_far_[platform]_[bankarea]_execute.asm, call_far_[platform]_[bankarea]_finalize.asm are expected to be present in the compiler. - removed the c code prepare, execute, finalize idea. The fragments seem to be enough for the moment. - added ram and rom fragments for far calls for the cx16. - Cleaned banking logic from Statement level. --- .../dk/camelot64/kickc/parser/KickCLexer.g4 | 3 +- .../dk/camelot64/kickc/parser/KickCParser.g4 | 2 +- .../mos6502-common/call_far_cx16_execute.asm | 4 - .../call_far_cx16_ram_execute.asm | 4 + ...ize.asm => call_far_cx16_ram_finalize.asm} | 0 ...pare.asm => call_far_cx16_ram_prepare.asm} | 0 .../call_far_cx16_rom_execute.asm | 4 + .../call_far_cx16_rom_finalize.asm | 0 .../call_far_cx16_rom_prepare.asm | 0 .../AsmFragmentInstanceSpecBuilder.java | 35 ++++---- .../signature/AsmFragmentSignature.java | 18 +++-- .../java/dk/camelot64/kickc/model/Bank.java | 25 ++++++ .../dk/camelot64/kickc/model/Directive.java | 43 +++------- .../dk/camelot64/kickc/model/FarSegment.java | 43 ---------- .../dk/camelot64/kickc/model/Program.java | 2 +- .../kickc/model/statements/StatementCall.java | 8 -- .../statements/StatementCallExecute.java | 4 - .../kickc/model/symbols/Procedure.java | 43 +++++----- .../camelot64/kickc/model/symbols/Scope.java | 4 +- .../dk/camelot64/kickc/parser/CParser.java | 8 +- .../Pass0GenerateStatementSequence.java | 80 +++++++------------ .../kickc/passes/Pass1ProcedureFar.java | 71 ---------------- .../kickc/passes/Pass4CodeGeneration.java | 46 +++++------ ... procedure-callingconvention-phi-bank-0.c} | 2 +- ... procedure-callingconvention-phi-bank-1.c} | 18 +---- ... procedure-callingconvention-phi-bank-2.c} | 17 +--- .../procedure-callingconvention-phi-bank-3.c | 14 ++++ ... procedure-callingconvention-phi-bank-4.c} | 4 +- ... procedure-callingconvention-phi-bank-5.c} | 12 +-- .../procedure-callingconvention-phi-far-2.c | 30 ------- ...rocedure-callingconvention-stack-bank-0.c} | 2 +- ...rocedure-callingconvention-stack-bank-1.c} | 2 +- ...rocedure-callingconvention-stack-bank-2.c} | 2 +- ...rocedure-callingconvention-stack-bank-3.c} | 10 +-- ...rocedure-callingconvention-stack-bank-4.c} | 4 +- ...rocedure-callingconvention-stack-bank-5.c} | 2 +- 36 files changed, 191 insertions(+), 375 deletions(-) delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_execute.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm rename src/main/fragment/mos6502-common/{call_far_cx16_finalize.asm => call_far_cx16_ram_finalize.asm} (100%) rename src/main/fragment/mos6502-common/{call_far_cx16_prepare.asm => call_far_cx16_ram_prepare.asm} (100%) create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm create mode 100644 src/main/java/dk/camelot64/kickc/model/Bank.java delete mode 100644 src/main/java/dk/camelot64/kickc/model/FarSegment.java delete mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java rename src/test/kc/{procedure-callingconvention-phi-far-0.c => procedure-callingconvention-phi-bank-0.c} (80%) rename src/test/kc/{procedure-callingconvention-phi-far-1.c => procedure-callingconvention-phi-bank-1.c} (54%) rename src/test/kc/{procedure-callingconvention-phi-far-3.c => procedure-callingconvention-phi-bank-2.c} (55%) create mode 100644 src/test/kc/procedure-callingconvention-phi-bank-3.c rename src/test/kc/{procedure-callingconvention-phi-far-4.c => procedure-callingconvention-phi-bank-4.c} (85%) rename src/test/kc/{procedure-callingconvention-phi-far-5.c => procedure-callingconvention-phi-bank-5.c} (92%) delete mode 100644 src/test/kc/procedure-callingconvention-phi-far-2.c rename src/test/kc/{procedure-callingconvention-stack-far-0.c => procedure-callingconvention-stack-bank-0.c} (76%) rename src/test/kc/{procedure-callingconvention-stack-far-1.c => procedure-callingconvention-stack-bank-1.c} (82%) rename src/test/kc/{procedure-callingconvention-stack-far-2.c => procedure-callingconvention-stack-bank-2.c} (86%) rename src/test/kc/{procedure-callingconvention-stack-far-3.c => procedure-callingconvention-stack-bank-3.c} (80%) rename src/test/kc/{procedure-callingconvention-stack-far-4.c => procedure-callingconvention-stack-bank-4.c} (84%) rename src/test/kc/{procedure-callingconvention-stack-far-5.c => procedure-callingconvention-stack-bank-5.c} (84%) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index f784b250e..98ef7914a 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -75,8 +75,7 @@ LOCAL_RESERVE: '__zp_reserve' ; ADDRESS: '__address' ; ADDRESS_ZEROPAGE: '__zp' ; ADDRESS_MAINMEM: '__mem' ; -FAR: '__far' ; -NEAR: '__near' ; +BANK: '__bank' ; FORM_SSA: '__ssa' ; FORM_MA: '__ma' ; INTRINSIC: '__intrinsic' ; diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 070ecaee8..50b509cdf 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -162,7 +162,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline - | FAR PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveFar + | BANK PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveBank | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/fragment/mos6502-common/call_far_cx16_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_execute.asm deleted file mode 100644 index 661d162d6..000000000 --- a/src/main/fragment/mos6502-common/call_far_cx16_execute.asm +++ /dev/null @@ -1,4 +0,0 @@ -jsr $FF6E // https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar -.byte <{la1} -.byte >{la1} -.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm new file mode 100644 index 000000000..d316eb072 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm @@ -0,0 +1,4 @@ +jsr $FFE6 +.byte <{la1} +.byte >{la1} +.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_finalize.asm rename to src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_prepare.asm rename to src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm new file mode 100644 index 000000000..d316eb072 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm @@ -0,0 +1,4 @@ +jsr $FFE6 +.byte <{la1} +.byte >{la1} +.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index c39c919d9..859f55804 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -42,54 +42,55 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a far call prepare + * Create a fragment instance spec factory for a bank call prepare * - * @param bankFar The bank where the procedure is to be called. + * @param bankArea The bank area where the procedure is to be called. + * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallPrepare(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec bankCallPrepare(String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Prepare); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Prepare); ScopeRef codeScope = program.getScope().getRef(); -// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } /** - * Create a fragment instance spec factory for a far call execute + * Create a fragment instance spec factory for a bank call execute * - * @param bankFar The bank where the procedure is to be called. + * @param bankArea The bank area where the procedure is to be called. + * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallExecute(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec bankCallExecute(String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Execute); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Execute); ScopeRef codeScope = program.getScope().getRef(); -// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } /** - * Create a fragment instance spec factory for a far call finalize + * Create a fragment instance spec factory for a bank call finalize * - * @param bankFar The bank where the procedure is to be called. + * @param bankArea The bank area where the procedure is to be called. + * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallFinalize(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec bankCallFinalize(String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Finalize); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Finalize); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 45a2689e7..456864880 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -71,11 +71,12 @@ public interface AsmFragmentSignature { } /** - * ASM fragment signature for a far jsr if(A) goto B. + * ASM fragment signature for a banked jsr if(A) goto B. */ - class CallFar implements AsmFragmentSignature { + class CallBanked implements AsmFragmentSignature { - final private Long bankFar; + final private String bankArea; + final private Long bank; final private String targetPlatform; public enum PrepareExecuteFinalize { @@ -84,18 +85,19 @@ public interface AsmFragmentSignature { Finalize } - final private PrepareExecuteFinalize far; + final private PrepareExecuteFinalize fragment; - public CallFar(Long bankFar, String targetPlatform, PrepareExecuteFinalize far) { - this.bankFar = bankFar; + public CallBanked(String bankArea, Long bank, String targetPlatform, PrepareExecuteFinalize fragment) { + this.bankArea = bankArea; + this.bank = bank; this.targetPlatform = targetPlatform; - this.far = far; + this.fragment = fragment; } @Override public String getName() { - return "call_far" + "_" + targetPlatform + "_" + far.name().toLowerCase(); + return "call_far" + "_" + targetPlatform.toLowerCase() + "_" + bankArea.toLowerCase() + "_" + fragment.name().toLowerCase(); } } diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java new file mode 100644 index 000000000..99220e7f4 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -0,0 +1,25 @@ +package dk.camelot64.kickc.model; + +/** A Bank segment. */ +public class Bank { + + private final String bankArea; + private Long bank; + + public Bank(String bankArea, Long bank) { + this.bankArea = bankArea; + this.bank = bank; + } + + public String getBankArea() { + return bankArea; + } + + public Long getBank() { + return bank; + } + + public void setBank(Long bank) { + this.bank = bank; + } +} diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index e155d5587..fe4728cb7 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -43,43 +43,24 @@ public class Directive { public Inline() { super("inline"); } } - /** Function declared far. */ - static public class Far extends Directive { + /** Function declared banked. */ + static public class Bank extends Directive { - private String farSegmentName; - private Long farSegmentBank; - private String farProcedurePrepare; - private String farProcedureExecute; - private String farProcedureFinalize; + private String bankArea; + private Long bank; - - public Far(String farSegmentName, Long farSegmentBank, String farProcedurePrepare, String farProcedureExecute, String farProcedureFinalize) { - super("far" ); - this.farSegmentName = farSegmentName; - this.farSegmentBank = farSegmentBank; - this.farProcedurePrepare = farProcedurePrepare; - this.farProcedureExecute = farProcedureExecute; - this.farProcedureFinalize = farProcedureFinalize; + public Bank(String bankArea, Long bank) { + super("bank" ); + this.bankArea = bankArea; + this.bank = bank; } - public String getFarSegmentName() { - return farSegmentName; + public String getBankArea() { + return bankArea; } - public Long getFarSegmentBank() { - return farSegmentBank; - } - - public String getFarProcedurePrepare() { - return farProcedurePrepare; - } - - public String getFarProcedureExecute() { - return farProcedureExecute; - } - - public String getFarProcedureFinalize() { - return farProcedureFinalize; + public Long getBank() { + return bank; } } diff --git a/src/main/java/dk/camelot64/kickc/model/FarSegment.java b/src/main/java/dk/camelot64/kickc/model/FarSegment.java deleted file mode 100644 index 18f8dd976..000000000 --- a/src/main/java/dk/camelot64/kickc/model/FarSegment.java +++ /dev/null @@ -1,43 +0,0 @@ -package dk.camelot64.kickc.model; - -/** A far segment. */ -public class FarSegment { - - private final String farSegment; - private Long farBank; - private final String procedurePrepare; - private final String procedureExecute; - private final String procedureFinalize; - - public FarSegment(String name, Long bank, String procedurePrepare, String procedureExecute, String procedureFinalize) { - this.farSegment = name; - this.farBank = bank; - this.procedurePrepare = procedurePrepare; - this.procedureExecute = procedureExecute; - this.procedureFinalize = procedureFinalize; - } - - public String getFarSegment() { - return farSegment; - } - - public Long getFarBank() { - return farBank; - } - - public void setFarBank(Long farBank) { - this.farBank = farBank; - } - - public String getProcedurePrepare() { - return procedurePrepare; - } - - public String getProcedureExecute() { - return procedureExecute; - } - - public String getProcedureFinalize() { - return procedureFinalize; - } -} diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index 898c50028..000cad6bd 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -105,7 +105,7 @@ public class Program { private NaturalLoopSet loopSet; /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; - /** All #pragma code segments. Collected during parsing. These are used by the far() pragmas to validate if the code segment exists during compilation.*/ + /** All #pragma code segments. Collected during parsing. These are used by the bank() pragmas to validate if the code segment exists during compilation.*/ private final Map pragmaCodeSegs; public Program() { diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java index 5c941f835..db5563d05 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java @@ -28,8 +28,6 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta private List parameters; /** This is the initial assignment of the lValue. */ private boolean initialAssignment; - /** This contains the far call parameters */ - private Long bankFar; public StatementCall(LValue lValue, String procedureName, List parameters, StatementSource source, List comments) { super(source, comments); @@ -66,12 +64,6 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta this.parameters = parameters; } - public void setBankFar(Long bankFar) { - this.bankFar = bankFar; - } - - public Long getBankFar() { return this.bankFar; } - public int getNumParameters() { return parameters.size(); } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java index 620491ecb..f1f54fe05 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java @@ -28,15 +28,11 @@ public class StatementCallExecute extends StatementBase implements StatementCall /** The calling convention to use. */ private Procedure.CallingConvention callingConvention; - /** This contains the far call parameters */ - private Long bankFar; - public StatementCallExecute(SymbolTypeProcedure procedureType, RValue procedure, Procedure.CallingConvention callingConvention, StatementSource source, List comments) { super(source, comments); this.procedureType = procedureType; this.procedure = procedure; this.callingConvention = callingConvention; - this.bankFar = bankFar; } public SymbolTypeProcedure getProcedureType() { diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index c1b761e7f..49f9854fa 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -1,7 +1,7 @@ package dk.camelot64.kickc.model.symbols; import dk.camelot64.kickc.model.Comment; -import dk.camelot64.kickc.model.FarSegment; +import dk.camelot64.kickc.model.Bank; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.types.SymbolType; @@ -26,8 +26,6 @@ public class Procedure extends Scope { private boolean variableLengthParameterList; /** true if the procedure is declared inline. */ private boolean declaredInline; - /** true if the procedure is declared far. */ - private boolean declaredFar; /** True if the procedure is declared intrinsic. */ private boolean declaredIntrinsic; /** The type of interrupt that the procedure serves. Null for all procedures not serving an interrupt. */ @@ -44,8 +42,8 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; - /** The far segment information. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ - private FarSegment farSegment; + /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines.*/ + private Bank bankLocation; /** The names of all legal intrinsic procedures. */ @@ -56,12 +54,12 @@ public class Procedure extends Scope { Pass1ByteXIntrinsicRewrite.INTRINSIC_MAKELONG4 ); - public FarSegment getFarSegment() { - return farSegment; + public Bank getBankLocation() { + return bankLocation; } - public void setFarSegment(FarSegment farSegment) { - this.farSegment = farSegment; + public void setBankLocation(Bank bankLocation) { + this.bankLocation = bankLocation; } @@ -100,11 +98,11 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, FarSegment farSegment) { + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, Bank bankLocation) { super(name, parentScope, dataSegment); this.procedureType = procedureType; this.declaredInline = false; - this.farSegment = farSegment; + this.bankLocation = bankLocation; this.interruptType = null; this.comments = new ArrayList<>(); this.codeSegment = codeSegment; @@ -214,17 +212,24 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public boolean isDeclaredFar() { - return farSegment != null; + public boolean isDeclaredBanked() { + return bankLocation != null; } - public Long getFarBank() { - if(farSegment!=null) - return farSegment.getFarBank(); + public Long getBank() { + if(bankLocation != null) + return bankLocation.getBank(); else return 0L; } + public String getBankArea() { + if(bankLocation != null) + return bankLocation.getBankArea(); + else + return ""; + } + public String getInterruptType() { return interruptType; } @@ -285,8 +290,8 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } - if(declaredFar) { - res.append("__far(").append("bank").append(") "); + if(isDeclaredBanked()) { + res.append("__bank(").append("bank").append(") "); } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); @@ -326,7 +331,7 @@ public class Procedure extends Scope { Procedure procedure = (Procedure) o; return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && - declaredFar == procedure.declaredFar && + isDeclaredBanked() == procedure.isDeclaredBanked() && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 89541598a..77ecbb068 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -16,8 +16,8 @@ public abstract class Scope implements Symbol { public static final String SEGMENT_CODE_DEFAULT = "Code"; /** The default data segment. */ public static final String SEGMENT_DATA_DEFAULT = "Data"; - /** The default far segment. */ - public static final String SEGMENT_FAR_DEFAULT = ""; + /** The default bank segment. */ + public static final Long SEGMENT_BANK_DEFAULT = -1L; private String name; private HashMap symbols; diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 806287556..029c6d5f6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,13 +107,13 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma far(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. + * #pragma bank(...) specifies the scope of the sequent functions to be located in a bank using a specific banking area. */ - public static final String PRAGMA_FAR = "far"; + public static final String PRAGMA_BANK = "bank"; /** - * #pragma near specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + * #pragma nobank specifies the scope of the sequent functions to be near. Segments are defined in the linker file. */ - public static final String PRAGMA_NEAR = "near"; + public static final String PRAGMA_NOBANK = "nobank"; /** * The Program. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 00cde33d7..b6cf3dae6 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -295,20 +295,13 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 7) { - final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); - final String call_execute = pragmaParamName(ctx.pragmaParam(3)); - final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); - this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), call_prepare, call_execute, call_finalize); - } else { - this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), "", "", ""); - } + final String pragmaBankArea = pragmaParamBankArea(ctx.pragmaParam(0)); + final Number pragmaBank = pragmaParamNumber(ctx.pragmaParam(1)); + this.currentBank = new Bank(pragmaBankArea, pragmaBank.longValue()); } else { throw new CompileError("Expected at least 2 pragma parameters. Found '" + ctx.getText() + "'.", new StatementSource(ctx)); } @@ -316,8 +309,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor= 5) { - farSegmentName = ctx.getChild(2).getText(); - farSegmentBank = Long.valueOf(ctx.getChild(4).getText()); + bankArea = ctx.getChild(2).getText(); + bank = Long.valueOf(ctx.getChild(4).getText()); } - if(ctx.getChildCount() == 11) { - farProcedurePrepare = ctx.getChild(6).getText(); - farProcedureExecute = ctx.getChild(8).getText(); - farProcedureFinalize = ctx.getChild(10).getText(); - } - - return new Directive.Far(farSegmentName, farSegmentBank, farProcedurePrepare, farProcedureExecute, farProcedureFinalize); + return new Directive.Bank(bankArea, bank); } @Override diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java deleted file mode 100644 index 60d3e3fae..000000000 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java +++ /dev/null @@ -1,71 +0,0 @@ -package dk.camelot64.kickc.passes; - -import dk.camelot64.kickc.model.InternalError; -import dk.camelot64.kickc.model.*; -import dk.camelot64.kickc.model.iterator.ProgramValue; -import dk.camelot64.kickc.model.iterator.ProgramValueHandler; -import dk.camelot64.kickc.model.iterator.ProgramValueIterator; -import dk.camelot64.kickc.model.statements.*; -import dk.camelot64.kickc.model.symbols.*; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.values.*; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.ListIterator; - -/** Pass that modifies a control flow graph to far call any procedures declared as far */ -public class Pass1ProcedureFar extends Pass1Base { - - public Pass1ProcedureFar(Program program) { - super(program); - } - - @Override - public boolean step() { - List allBlocks = getGraph().getAllBlocks(); - ListIterator blocksIt = allBlocks.listIterator(); - while(blocksIt.hasNext()) { - ControlFlowBlock block = blocksIt.next(); - List blockStatements = block.getStatements(); - ListIterator statementsIt = blockStatements.listIterator(); - while(statementsIt.hasNext()) { - Statement statement = statementsIt.next(); - if(statement instanceof StatementCall) { - StatementCall call = (StatementCall) statement; - ProcedureRef procedureRef = call.getProcedure(); - Procedure procedure = getScope().getProcedure(procedureRef); - if(procedure.isDeclaredFar()) { - if(procedure.getInterruptType()!=null) { - throw new CompileError("Error! Interrupts cannot be far called. "+procedure.getRef().toString()); - } - farProcedureCall(call, procedure, statementsIt, block, blocksIt); - // Continue -// return true; - } - } - } - } - return false; - } - - /** - * Inline a specific call to a procedure. - * - * @param call The call to the far procedure - * @param procedure The procedure being called - * @param statementsIt The statement iterator pointing to the call statement - * @param block The block containing the call - * @param blocksIt The block iterator pointing to the block containing the call - */ - private void farProcedureCall(StatementCall call, Procedure procedure, ListIterator statementsIt, ControlFlowBlock block, ListIterator blocksIt) { - Scope callScope = getScope().getScope(block.getScope()); - // Here we add to the call the properties to build a far call depending on the platform. - // The all properties have been entered in the __far() directive in the source code. - // These properties are then used in pass4 of the compiler, to build the platform dependent fragment to execute the far call. - -// call.setBankFar(procedure.getBankFar()); - getLog().append("Far call " + call.toString(getProgram(), false)); - } -} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 6fc625f7d..0d3568c70 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -867,36 +867,26 @@ public class Pass4CodeGeneration { } } // Note: I've chosen to keep this code duplication between phi and stack calling convention, for later maintenance flexibility, if any. - // We check if the procedure is declared as far, and if the calling procedure is not in the same bank as the procedure called. - if(procedure.isDeclaredFar() && procedureFrom.getFarBank() != procedure.getFarBank()) { + // We check if the procedure is declared as banked, and if the calling procedure is not in the same bank as the procedure called. + if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { // In this case, Generate ASM for a far call. // The call is constructed in a prepare, execute and finalize compiler .asm fragments respectively. - // The bank and other preparations are set in the far_call_[platform]_prepare.asm fragment. - // The actual jsr statement is embedded in the far_call_[platform]_execute.asm fragment. - // After the jsr, finalization of the call is defined in the far_call_[platform]_finalize.asm fragment. - // TODO: rework to prepare, execute, finalize - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallPrepare(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExecute(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallFinalize(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); -// asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + // The bank and other preparations are set in the call_far_[platform]_[bankarea]_prepare.asm fragment. + // The actual jsr statement is embedded in the far_call_[platform]_[bankarea]_execute.asm fragment. + // After the jsr, finalization of the call is defined in the far_call_[platform]_[bankarea]_finalize.asm fragment. + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); } else { // Otherwise, Generate AM for a normal near call. - // In case of a far call, we assume the bank does not need to be changed. asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { - // Note: I've chosen to keep this code duplication between phi and stack calling convention, for later maintenance flexibility, if any. - // We check if the procedure is declared as far, and if the calling procedure is not in the same bank as the procedure called. - if(procedure.isDeclaredFar() && procedure.getFarBank() != procedureFrom.getFarBank()) { - // In this case, Generate ASM for a far call. - // The call is constructed in a prepare, execute and finalize compiler .asm fragments respectively. - // The bank and other preparations are set in the far_call_[platform]_prepare.asm fragment. - // The actual jsr statement is embedded in the far_call_[platform]_execute.asm fragment. - // After the jsr, finalization of the call is defined in the far_call_[platform]_finalize.asm fragment. - // TODO: rework to prepare, execute, finalize - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallPrepare(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExecute(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallFinalize(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); + // Same as PHI + if(procedure.isDeclaredBanked() && procedure.getBank() != procedureFrom.getBank()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } @@ -907,11 +897,11 @@ public class Pass4CodeGeneration { Procedure procedure = getScope().getProcedure(call.getProcedure()); Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. RValue procedureRVal = call.getProcedureRVal(); - // Generate ASM for a call - if(procedure.isDeclaredFar() && procedureFrom.getFarBank() != procedure.getFarBank()) { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallPrepare(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExecute(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallFinalize(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); + // Same as PHI + if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); } else { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } diff --git a/src/test/kc/procedure-callingconvention-phi-far-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c similarity index 80% rename from src/test/kc/procedure-callingconvention-phi-far-0.c rename to src/test/kc/procedure-callingconvention-phi-bank-0.c index ca53104b6..54243fc55 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-0.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-0.c @@ -7,6 +7,6 @@ void main(void) { } #pragma code_seg(stage) -char __far(stage,2) plus(char a, char b) { +char __bank(ram,2) plus(char a, char b) { return a+b; } diff --git a/src/test/kc/procedure-callingconvention-phi-far-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c similarity index 54% rename from src/test/kc/procedure-callingconvention-phi-far-1.c rename to src/test/kc/procedure-callingconvention-phi-bank-1.c index 5a3bd5633..585ab0f82 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-1.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-1.c @@ -7,24 +7,8 @@ void main(void) { } #pragma code_seg(stage) -#pragma far(stage, 1) +#pragma bank(ram, 1) char plus(char a, char b) { return a+b; } - -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } -} - -void stage_exit() { - asm { - pla - sta 0 - } -} diff --git a/src/test/kc/procedure-callingconvention-phi-far-3.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c similarity index 55% rename from src/test/kc/procedure-callingconvention-phi-far-3.c rename to src/test/kc/procedure-callingconvention-phi-bank-2.c index 18a600d0f..e56b218aa 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-3.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-2.c @@ -7,24 +7,9 @@ void main(void) { } #pragma code_seg(stage) -#pragma far(stage) +#pragma bank(rubbish, 1) char plus(char a, char b) { return a+b; } -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } -} - -void stage_exit() { - asm { - pla - sta 0 - } -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c new file mode 100644 index 000000000..655f28876 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-bank-3.c @@ -0,0 +1,14 @@ +// Test a far call procedure with a calling convention sp + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(stage) +#pragma bank(stage, 2) + +char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/procedure-callingconvention-phi-far-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c similarity index 85% rename from src/test/kc/procedure-callingconvention-phi-far-4.c rename to src/test/kc/procedure-callingconvention-phi-bank-4.c index b186b8bb1..0459fcaa0 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -3,13 +3,13 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(stage) -#pragma far(stage, 20) +#pragma bank(stage, 20) char plus(char a, char b) { return a+b; } -#pragma near +#pragma nobank void main(void) { SCREEN[0] = plus('0', 7); diff --git a/src/test/kc/procedure-callingconvention-phi-far-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c similarity index 92% rename from src/test/kc/procedure-callingconvention-phi-far-5.c rename to src/test/kc/procedure-callingconvention-phi-bank-5.c index 7949bb569..9e8021010 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-5.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.c @@ -3,7 +3,7 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(bank_1) -#pragma far(bank_1, 1) +#pragma bank(ram, 1) char func_bank1_a(char a, char b) { return a+b; @@ -20,7 +20,7 @@ char func_bank1_d(char a, char b) { } #pragma code_seg(bank_2) -#pragma far(bank_2, 2) +#pragma bank(ram, 2) char func_bank2_a(char a, char b) { return a+b; @@ -47,17 +47,17 @@ char func_bank2_f(char a, char b) { return func_bank1_b(a,b); } -#pragma near +#pragma nobank -char __far(bank_1, 1) func_bank1_b(char a, char b) { +char __bank(ram, 1) func_bank1_b(char a, char b) { return a+b; } -char __far(bank_2, 2) func_bank2_b(char a, char b) { +char __bank(ram, 2) func_bank2_b(char a, char b) { return a+b; } -#pragma near +#pragma nobank char func_bank1_e(char a, char b) { // this should be a far call, because the call is to bank 1. diff --git a/src/test/kc/procedure-callingconvention-phi-far-2.c b/src/test/kc/procedure-callingconvention-phi-far-2.c deleted file mode 100644 index 4fedebf68..000000000 --- a/src/test/kc/procedure-callingconvention-phi-far-2.c +++ /dev/null @@ -1,30 +0,0 @@ -// Test a far call procedure with a calling convention sp - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma far(rubbish, 1, stage_prepare, stage_execution, stage_exit) - -char plus(char a, char b) { - return a+b; -} - -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } -} - -void stage_exit() { - asm { - pla - sta 0 - } -} diff --git a/src/test/kc/procedure-callingconvention-stack-far-0.c b/src/test/kc/procedure-callingconvention-stack-bank-0.c similarity index 76% rename from src/test/kc/procedure-callingconvention-stack-far-0.c rename to src/test/kc/procedure-callingconvention-stack-bank-0.c index b232fde4f..3801b0673 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-0.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-0.c @@ -7,6 +7,6 @@ void main(void) { } #pragma code_seg(test) -char __far(test, 2) __stackcall plus(char a, char b) { +char __bank(ram, 2) __stackcall plus(char a, char b) { return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-1.c b/src/test/kc/procedure-callingconvention-stack-bank-1.c similarity index 82% rename from src/test/kc/procedure-callingconvention-stack-far-1.c rename to src/test/kc/procedure-callingconvention-stack-bank-1.c index 458e13cd4..da246a882 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-1.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-1.c @@ -9,6 +9,6 @@ void main(void) { #pragma calling(__stackcall) #pragma code_seg(test) -char __far(test,20) plus(char a, char b) { +char __bank(ram,20) plus(char a, char b) { return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-2.c b/src/test/kc/procedure-callingconvention-stack-bank-2.c similarity index 86% rename from src/test/kc/procedure-callingconvention-stack-far-2.c rename to src/test/kc/procedure-callingconvention-stack-bank-2.c index 328dd4d34..cb8a3bc86 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-2.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-2.c @@ -14,7 +14,7 @@ void main(void) { } // this should give a pragma error during compile, as test is not declared yet. -char __far(test, 20) __stackcall plus(char a, char b) { +char __bank(ram, 20) __stackcall plus(char a, char b) { i++; return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c similarity index 80% rename from src/test/kc/procedure-callingconvention-stack-far-3.c rename to src/test/kc/procedure-callingconvention-stack-bank-3.c index 1bfec448f..6ab8d136f 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-3.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-3.c @@ -20,23 +20,23 @@ void main(void) { #pragma code_seg(test3) #pragma code_seg(Code) -void __far(test, 20) pval() { +void __bank(ram, 20) pval() { printval(); } -void __far(test2, 21) ival() { +void __bank(ram, 21) ival() { incval(); } -void __far(test, 20) printval() { +void __bank(ram, 20) printval() { SCREEN[0] = val; } -void __far(test2, 21) incval() { +void __bank(ram, 21) incval() { val++; } -#pragma near +#pragma nobank void printother() { for(char i:0..5) { diff --git a/src/test/kc/procedure-callingconvention-stack-far-4.c b/src/test/kc/procedure-callingconvention-stack-bank-4.c similarity index 84% rename from src/test/kc/procedure-callingconvention-stack-far-4.c rename to src/test/kc/procedure-callingconvention-stack-bank-4.c index c006ecd6f..76c66aa26 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-4.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-4.c @@ -19,12 +19,12 @@ void main(void) { } } -struct Point __far(1) get(char i) { +struct Point __bank(ram,1) get(char i) { struct Point p = { i, i/2 }; return p; } -void __far(2) print(struct Point p) { +void __bank(ram,2) print(struct Point p) { SCREEN[idx++] = p.x; SCREEN[idx++] = p.y; } diff --git a/src/test/kc/procedure-callingconvention-stack-far-5.c b/src/test/kc/procedure-callingconvention-stack-bank-5.c similarity index 84% rename from src/test/kc/procedure-callingconvention-stack-far-5.c rename to src/test/kc/procedure-callingconvention-stack-bank-5.c index 925beedec..3bfac0ef3 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-5.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-5.c @@ -7,7 +7,7 @@ void main(void) { *SCREEN = pow2(6); } -char __stackcall __far(1) pow2(char n) { +char __stackcall __bank(ram,1) pow2(char n) { if (n == 0) return 1; else { From 944fbd3021333184c1d1e4496c2021078ed5af9d Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 26 Mar 2023 10:30:23 +0200 Subject: [PATCH 12/50] - removed gen files --- .gitignore | 1 + gen/KickCLexer.interp | 490 ------------- gen/KickCLexer.java | 1602 ----------------------------------------- gen/KickCLexer.tokens | 227 ------ 4 files changed, 1 insertion(+), 2319 deletions(-) delete mode 100644 gen/KickCLexer.interp delete mode 100644 gen/KickCLexer.java delete mode 100644 gen/KickCLexer.tokens diff --git a/.gitignore b/.gitignore index c7169a380..14e2eee75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/gen */*.mon */*.vs */*.brk diff --git a/gen/KickCLexer.interp b/gen/KickCLexer.interp deleted file mode 100644 index 3688c113f..000000000 --- a/gen/KickCLexer.interp +++ /dev/null @@ -1,490 +0,0 @@ -token literal names: -null -null -null -null -null -null -null -null -';' -null -null -'..' -'...' -'?' -null -'->' -null -null -null -null -'%' -'++' -'--' -'&' -'~' -'^' -'|' -null -null -'==' -'!=' -null -'<=' -'>=' -null -'&&' -'||' -'=' -null -'typedef' -'const' -'extern' -'__export' -'__align' -'inline' -'volatile' -'static' -'__interrupt' -'register' -'__zp_reserve' -'__address' -'__zp' -'__mem' -'__far' -'__near' -'__ssa' -'__ma' -'__intrinsic' -null -'if' -'else' -'while' -'do' -'for' -'switch' -'return' -'break' -'continue' -'goto' -'asm' -'default' -'case' -'struct' -'union' -'enum' -'sizeof' -'typeid' -'defined' -'kickasm' -'!' -null -null -null -'#import' -'#include' -'#pragma' -'#define' -null -'#undef' -'#ifdef' -'#ifndef' -'#if' -'#elif' -'#else' -'#endif' -'#error' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -'.byte' -null -'#' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -TYPEDEFNAME -CURLY_BEGIN -CURLY_END -BRACKET_BEGIN -BRACKET_END -PAR_BEGIN -PAR_END -SEMICOLON -COLON -COMMA -RANGE -PARAM_LIST -CONDITION -DOT -ARROW -PLUS -MINUS -ASTERISK -DIVIDE -MODULO -INC -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 -TYPEDEF -CONST -EXTERN -EXPORT -ALIGN -INLINE -VOLATILE -STATIC -INTERRUPT -REGISTER -LOCAL_RESERVE -ADDRESS -ADDRESS_ZEROPAGE -ADDRESS_MAINMEM -FAR -NEAR -FORM_SSA -FORM_MA -INTRINSIC -CALLINGCONVENTION -IF -ELSE -WHILE -DO -FOR -SWITCH -RETURN -BREAK -CONTINUE -GOTO -ASM -DEFAULT -CASE -STRUCT -UNION -ENUM -SIZEOF -TYPEID -DEFINED -KICKASM -LOGIC_NOT -SIMPLETYPE -BOOLEAN -KICKASM_BODY -IMPORT -INCLUDE -PRAGMA -DEFINE -DEFINE_CONTINUE -UNDEF -IFDEF -IFNDEF -IFIF -ELIF -IFELSE -ENDIF -ERROR -TOKEN_STRINGIZE -TOKEN_MERGE -NUMBER -NUMFLOAT -BINFLOAT -DECFLOAT -HEXFLOAT -NUMINT -BININTEGER -DECINTEGER -HEXINTEGER -NAME -STRING -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 -ASM_NUMFLOAT -ASM_BINFLOAT -ASM_DECFLOAT -ASM_HEXFLOAT -ASM_NUMINT -ASM_BININTEGER -ASM_DECINTEGER -ASM_HEXINTEGER -ASM_CHAR -ASM_MULTI_REL -ASM_MULTI_NAME -ASM_NAME -ASM_TAG -ASM_WS -ASM_COMMENT_LINE -ASM_COMMENT_BLOCK -IMPORT_SYSTEMFILE -IMPORT_LOCALFILE -IMPORT_WS -IMPORT_COMMENT_LINE -IMPORT_COMMENT_BLOCK - -rule names: -CURLY_BEGIN -CURLY_END -BRACKET_BEGIN -BRACKET_END -PAR_BEGIN -PAR_END -SEMICOLON -COLON -COMMA -RANGE -PARAM_LIST -CONDITION -DOT -ARROW -PLUS -MINUS -ASTERISK -DIVIDE -MODULO -INC -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 -TYPEDEF -CONST -EXTERN -EXPORT -ALIGN -INLINE -VOLATILE -STATIC -INTERRUPT -REGISTER -LOCAL_RESERVE -ADDRESS -ADDRESS_ZEROPAGE -ADDRESS_MAINMEM -FAR -NEAR -FORM_SSA -FORM_MA -INTRINSIC -CALLINGCONVENTION -IF -ELSE -WHILE -DO -FOR -SWITCH -RETURN -BREAK -CONTINUE -GOTO -ASM -DEFAULT -CASE -STRUCT -UNION -ENUM -SIZEOF -TYPEID -DEFINED -KICKASM -LOGIC_NOT -SIMPLETYPE -BOOLEAN -KICKASM_BODY -IMPORT -INCLUDE -PRAGMA -DEFINE -DEFINE_CONTINUE -UNDEF -IFDEF -IFNDEF -IFIF -ELIF -IFELSE -ENDIF -ERROR -TOKEN_STRINGIZE -TOKEN_MERGE -NUMBER -NUMFLOAT -BINFLOAT -DECFLOAT -HEXFLOAT -NUMINT -BININTEGER -DECINTEGER -HEXINTEGER -BINDIGIT -DECDIGIT -HEXDIGIT -NAME -NAME_START -NAME_CHAR -STRING -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 -ASM_NUMFLOAT -ASM_BINFLOAT -ASM_DECFLOAT -ASM_HEXFLOAT -ASM_NUMINT -ASM_BININTEGER -ASM_DECINTEGER -ASM_HEXINTEGER -ASM_BINDIGIT -ASM_DECDIGIT -ASM_HEXDIGIT -ASM_CHAR -ASM_MULTI_REL -ASM_MULTI_NAME -ASM_NAME -ASM_NAME_START -ASM_NAME_CHAR -ASM_TAG -ASM_WS -ASM_COMMENT_LINE -ASM_COMMENT_BLOCK -IMPORT_SYSTEMFILE -IMPORT_LOCALFILE -IMPORT_WS -IMPORT_COMMENT_LINE -IMPORT_COMMENT_BLOCK - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE -ASM_MODE -IMPORT_MODE - -atn: -[4, 0, 154, 1983, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 439, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 637, 8, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 814, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 825, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 831, 8, 80, 10, 80, 12, 80, 834, 9, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 881, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 3, 96, 943, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 948, 8, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 955, 8, 98, 1, 98, 5, 98, 958, 8, 98, 10, 98, 12, 98, 961, 9, 98, 1, 98, 1, 98, 4, 98, 965, 8, 98, 11, 98, 12, 98, 966, 1, 99, 5, 99, 970, 8, 99, 10, 99, 12, 99, 973, 9, 99, 1, 99, 1, 99, 4, 99, 977, 8, 99, 11, 99, 12, 99, 978, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 986, 8, 100, 1, 100, 5, 100, 989, 8, 100, 10, 100, 12, 100, 992, 9, 100, 1, 100, 1, 100, 4, 100, 996, 8, 100, 11, 100, 12, 100, 997, 1, 101, 1, 101, 1, 101, 3, 101, 1003, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1008, 8, 101, 1, 102, 1, 102, 1, 102, 4, 102, 1013, 8, 102, 11, 102, 12, 102, 1014, 1, 102, 1, 102, 4, 102, 1019, 8, 102, 11, 102, 12, 102, 1020, 3, 102, 1023, 8, 102, 1, 103, 4, 103, 1026, 8, 103, 11, 103, 12, 103, 1027, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1035, 8, 104, 1, 104, 4, 104, 1038, 8, 104, 11, 104, 12, 104, 1039, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 5, 108, 1050, 8, 108, 10, 108, 12, 108, 1053, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1065, 8, 111, 10, 111, 12, 111, 1068, 9, 111, 1, 111, 1, 111, 3, 111, 1072, 8, 111, 1, 111, 1, 111, 3, 111, 1076, 8, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1087, 8, 112, 1, 112, 3, 112, 1090, 8, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1095, 8, 112, 1, 112, 3, 112, 1098, 8, 112, 1, 112, 1, 112, 1, 113, 4, 113, 1103, 8, 113, 11, 113, 12, 113, 1104, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1113, 8, 114, 10, 114, 12, 114, 1116, 9, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1124, 8, 115, 10, 115, 12, 115, 1127, 9, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1747, 8, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1791, 8, 136, 1, 137, 1, 137, 1, 137, 3, 137, 1796, 8, 137, 1, 138, 1, 138, 5, 138, 1800, 8, 138, 10, 138, 12, 138, 1803, 9, 138, 1, 138, 1, 138, 4, 138, 1807, 8, 138, 11, 138, 12, 138, 1808, 1, 139, 5, 139, 1812, 8, 139, 10, 139, 12, 139, 1815, 9, 139, 1, 139, 1, 139, 4, 139, 1819, 8, 139, 11, 139, 12, 139, 1820, 1, 140, 1, 140, 5, 140, 1825, 8, 140, 10, 140, 12, 140, 1828, 9, 140, 1, 140, 1, 140, 4, 140, 1832, 8, 140, 11, 140, 12, 140, 1833, 1, 141, 1, 141, 1, 141, 3, 141, 1839, 8, 141, 1, 142, 1, 142, 4, 142, 1843, 8, 142, 11, 142, 12, 142, 1844, 1, 143, 4, 143, 1848, 8, 143, 11, 143, 12, 143, 1849, 1, 144, 1, 144, 4, 144, 1854, 8, 144, 11, 144, 12, 144, 1855, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1868, 8, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1874, 8, 149, 11, 149, 12, 149, 1875, 1, 150, 1, 150, 5, 150, 1880, 8, 150, 10, 150, 12, 150, 1883, 9, 150, 1, 151, 1, 151, 5, 151, 1887, 8, 151, 10, 151, 12, 151, 1890, 9, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 155, 4, 155, 1900, 8, 155, 11, 155, 12, 155, 1901, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1910, 8, 156, 10, 156, 12, 156, 1913, 9, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 5, 157, 1921, 8, 157, 10, 157, 12, 157, 1924, 9, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 4, 158, 1933, 8, 158, 11, 158, 12, 158, 1934, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 5, 159, 1944, 8, 159, 10, 159, 12, 159, 1947, 9, 159, 1, 159, 1, 159, 1, 159, 1, 160, 4, 160, 1953, 8, 160, 11, 160, 12, 160, 1954, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1963, 8, 161, 10, 161, 12, 161, 1966, 9, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 1974, 8, 162, 10, 162, 12, 162, 1977, 9, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 4, 832, 1125, 1922, 1975, 0, 163, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 0, 215, 0, 217, 0, 219, 107, 221, 0, 223, 0, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 141, 293, 0, 295, 0, 297, 0, 299, 142, 301, 143, 303, 144, 305, 145, 307, 0, 309, 0, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 327, 154, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2244, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 291, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 305, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 1, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 2, 327, 1, 0, 0, 0, 3, 329, 1, 0, 0, 0, 5, 332, 1, 0, 0, 0, 7, 334, 1, 0, 0, 0, 9, 336, 1, 0, 0, 0, 11, 338, 1, 0, 0, 0, 13, 340, 1, 0, 0, 0, 15, 342, 1, 0, 0, 0, 17, 344, 1, 0, 0, 0, 19, 346, 1, 0, 0, 0, 21, 348, 1, 0, 0, 0, 23, 351, 1, 0, 0, 0, 25, 355, 1, 0, 0, 0, 27, 357, 1, 0, 0, 0, 29, 359, 1, 0, 0, 0, 31, 362, 1, 0, 0, 0, 33, 364, 1, 0, 0, 0, 35, 366, 1, 0, 0, 0, 37, 368, 1, 0, 0, 0, 39, 370, 1, 0, 0, 0, 41, 372, 1, 0, 0, 0, 43, 375, 1, 0, 0, 0, 45, 378, 1, 0, 0, 0, 47, 380, 1, 0, 0, 0, 49, 382, 1, 0, 0, 0, 51, 384, 1, 0, 0, 0, 53, 386, 1, 0, 0, 0, 55, 389, 1, 0, 0, 0, 57, 392, 1, 0, 0, 0, 59, 395, 1, 0, 0, 0, 61, 398, 1, 0, 0, 0, 63, 400, 1, 0, 0, 0, 65, 403, 1, 0, 0, 0, 67, 406, 1, 0, 0, 0, 69, 408, 1, 0, 0, 0, 71, 411, 1, 0, 0, 0, 73, 414, 1, 0, 0, 0, 75, 438, 1, 0, 0, 0, 77, 440, 1, 0, 0, 0, 79, 448, 1, 0, 0, 0, 81, 454, 1, 0, 0, 0, 83, 461, 1, 0, 0, 0, 85, 470, 1, 0, 0, 0, 87, 478, 1, 0, 0, 0, 89, 485, 1, 0, 0, 0, 91, 494, 1, 0, 0, 0, 93, 501, 1, 0, 0, 0, 95, 513, 1, 0, 0, 0, 97, 522, 1, 0, 0, 0, 99, 535, 1, 0, 0, 0, 101, 545, 1, 0, 0, 0, 103, 550, 1, 0, 0, 0, 105, 556, 1, 0, 0, 0, 107, 562, 1, 0, 0, 0, 109, 569, 1, 0, 0, 0, 111, 575, 1, 0, 0, 0, 113, 580, 1, 0, 0, 0, 115, 636, 1, 0, 0, 0, 117, 638, 1, 0, 0, 0, 119, 641, 1, 0, 0, 0, 121, 646, 1, 0, 0, 0, 123, 652, 1, 0, 0, 0, 125, 655, 1, 0, 0, 0, 127, 659, 1, 0, 0, 0, 129, 666, 1, 0, 0, 0, 131, 673, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 688, 1, 0, 0, 0, 137, 693, 1, 0, 0, 0, 139, 699, 1, 0, 0, 0, 141, 707, 1, 0, 0, 0, 143, 712, 1, 0, 0, 0, 145, 719, 1, 0, 0, 0, 147, 725, 1, 0, 0, 0, 149, 730, 1, 0, 0, 0, 151, 737, 1, 0, 0, 0, 153, 744, 1, 0, 0, 0, 155, 752, 1, 0, 0, 0, 157, 760, 1, 0, 0, 0, 159, 813, 1, 0, 0, 0, 161, 824, 1, 0, 0, 0, 163, 826, 1, 0, 0, 0, 165, 838, 1, 0, 0, 0, 167, 848, 1, 0, 0, 0, 169, 859, 1, 0, 0, 0, 171, 867, 1, 0, 0, 0, 173, 880, 1, 0, 0, 0, 175, 882, 1, 0, 0, 0, 177, 889, 1, 0, 0, 0, 179, 896, 1, 0, 0, 0, 181, 904, 1, 0, 0, 0, 183, 908, 1, 0, 0, 0, 185, 914, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 927, 1, 0, 0, 0, 191, 934, 1, 0, 0, 0, 193, 937, 1, 0, 0, 0, 195, 942, 1, 0, 0, 0, 197, 947, 1, 0, 0, 0, 199, 954, 1, 0, 0, 0, 201, 971, 1, 0, 0, 0, 203, 985, 1, 0, 0, 0, 205, 1002, 1, 0, 0, 0, 207, 1022, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1034, 1, 0, 0, 0, 213, 1041, 1, 0, 0, 0, 215, 1043, 1, 0, 0, 0, 217, 1045, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1056, 1, 0, 0, 0, 223, 1058, 1, 0, 0, 0, 225, 1060, 1, 0, 0, 0, 227, 1082, 1, 0, 0, 0, 229, 1102, 1, 0, 0, 0, 231, 1108, 1, 0, 0, 0, 233, 1119, 1, 0, 0, 0, 235, 1133, 1, 0, 0, 0, 237, 1746, 1, 0, 0, 0, 239, 1748, 1, 0, 0, 0, 241, 1750, 1, 0, 0, 0, 243, 1752, 1, 0, 0, 0, 245, 1754, 1, 0, 0, 0, 247, 1756, 1, 0, 0, 0, 249, 1758, 1, 0, 0, 0, 251, 1760, 1, 0, 0, 0, 253, 1762, 1, 0, 0, 0, 255, 1764, 1, 0, 0, 0, 257, 1767, 1, 0, 0, 0, 259, 1770, 1, 0, 0, 0, 261, 1772, 1, 0, 0, 0, 263, 1774, 1, 0, 0, 0, 265, 1776, 1, 0, 0, 0, 267, 1778, 1, 0, 0, 0, 269, 1780, 1, 0, 0, 0, 271, 1782, 1, 0, 0, 0, 273, 1785, 1, 0, 0, 0, 275, 1790, 1, 0, 0, 0, 277, 1795, 1, 0, 0, 0, 279, 1797, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1822, 1, 0, 0, 0, 285, 1838, 1, 0, 0, 0, 287, 1840, 1, 0, 0, 0, 289, 1847, 1, 0, 0, 0, 291, 1851, 1, 0, 0, 0, 293, 1857, 1, 0, 0, 0, 295, 1859, 1, 0, 0, 0, 297, 1861, 1, 0, 0, 0, 299, 1863, 1, 0, 0, 0, 301, 1871, 1, 0, 0, 0, 303, 1877, 1, 0, 0, 0, 305, 1884, 1, 0, 0, 0, 307, 1891, 1, 0, 0, 0, 309, 1893, 1, 0, 0, 0, 311, 1895, 1, 0, 0, 0, 313, 1899, 1, 0, 0, 0, 315, 1905, 1, 0, 0, 0, 317, 1916, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1939, 1, 0, 0, 0, 323, 1952, 1, 0, 0, 0, 325, 1958, 1, 0, 0, 0, 327, 1969, 1, 0, 0, 0, 329, 330, 5, 123, 0, 0, 330, 331, 6, 0, 0, 0, 331, 4, 1, 0, 0, 0, 332, 333, 5, 125, 0, 0, 333, 6, 1, 0, 0, 0, 334, 335, 5, 91, 0, 0, 335, 8, 1, 0, 0, 0, 336, 337, 5, 93, 0, 0, 337, 10, 1, 0, 0, 0, 338, 339, 5, 40, 0, 0, 339, 12, 1, 0, 0, 0, 340, 341, 5, 41, 0, 0, 341, 14, 1, 0, 0, 0, 342, 343, 5, 59, 0, 0, 343, 16, 1, 0, 0, 0, 344, 345, 5, 58, 0, 0, 345, 18, 1, 0, 0, 0, 346, 347, 5, 44, 0, 0, 347, 20, 1, 0, 0, 0, 348, 349, 5, 46, 0, 0, 349, 350, 5, 46, 0, 0, 350, 22, 1, 0, 0, 0, 351, 352, 5, 46, 0, 0, 352, 353, 5, 46, 0, 0, 353, 354, 5, 46, 0, 0, 354, 24, 1, 0, 0, 0, 355, 356, 5, 63, 0, 0, 356, 26, 1, 0, 0, 0, 357, 358, 5, 46, 0, 0, 358, 28, 1, 0, 0, 0, 359, 360, 5, 45, 0, 0, 360, 361, 5, 62, 0, 0, 361, 30, 1, 0, 0, 0, 362, 363, 5, 43, 0, 0, 363, 32, 1, 0, 0, 0, 364, 365, 5, 45, 0, 0, 365, 34, 1, 0, 0, 0, 366, 367, 5, 42, 0, 0, 367, 36, 1, 0, 0, 0, 368, 369, 5, 47, 0, 0, 369, 38, 1, 0, 0, 0, 370, 371, 5, 37, 0, 0, 371, 40, 1, 0, 0, 0, 372, 373, 5, 43, 0, 0, 373, 374, 5, 43, 0, 0, 374, 42, 1, 0, 0, 0, 375, 376, 5, 45, 0, 0, 376, 377, 5, 45, 0, 0, 377, 44, 1, 0, 0, 0, 378, 379, 5, 38, 0, 0, 379, 46, 1, 0, 0, 0, 380, 381, 5, 126, 0, 0, 381, 48, 1, 0, 0, 0, 382, 383, 5, 94, 0, 0, 383, 50, 1, 0, 0, 0, 384, 385, 5, 124, 0, 0, 385, 52, 1, 0, 0, 0, 386, 387, 5, 60, 0, 0, 387, 388, 5, 60, 0, 0, 388, 54, 1, 0, 0, 0, 389, 390, 5, 62, 0, 0, 390, 391, 5, 62, 0, 0, 391, 56, 1, 0, 0, 0, 392, 393, 5, 61, 0, 0, 393, 394, 5, 61, 0, 0, 394, 58, 1, 0, 0, 0, 395, 396, 5, 33, 0, 0, 396, 397, 5, 61, 0, 0, 397, 60, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 62, 1, 0, 0, 0, 400, 401, 5, 60, 0, 0, 401, 402, 5, 61, 0, 0, 402, 64, 1, 0, 0, 0, 403, 404, 5, 62, 0, 0, 404, 405, 5, 61, 0, 0, 405, 66, 1, 0, 0, 0, 406, 407, 5, 62, 0, 0, 407, 68, 1, 0, 0, 0, 408, 409, 5, 38, 0, 0, 409, 410, 5, 38, 0, 0, 410, 70, 1, 0, 0, 0, 411, 412, 5, 124, 0, 0, 412, 413, 5, 124, 0, 0, 413, 72, 1, 0, 0, 0, 414, 415, 5, 61, 0, 0, 415, 74, 1, 0, 0, 0, 416, 417, 5, 43, 0, 0, 417, 439, 5, 61, 0, 0, 418, 419, 5, 45, 0, 0, 419, 439, 5, 61, 0, 0, 420, 421, 5, 42, 0, 0, 421, 439, 5, 61, 0, 0, 422, 423, 5, 47, 0, 0, 423, 439, 5, 61, 0, 0, 424, 425, 5, 37, 0, 0, 425, 439, 5, 61, 0, 0, 426, 427, 5, 60, 0, 0, 427, 428, 5, 60, 0, 0, 428, 439, 5, 61, 0, 0, 429, 430, 5, 62, 0, 0, 430, 431, 5, 62, 0, 0, 431, 439, 5, 61, 0, 0, 432, 433, 5, 38, 0, 0, 433, 439, 5, 61, 0, 0, 434, 435, 5, 124, 0, 0, 435, 439, 5, 61, 0, 0, 436, 437, 5, 94, 0, 0, 437, 439, 5, 61, 0, 0, 438, 416, 1, 0, 0, 0, 438, 418, 1, 0, 0, 0, 438, 420, 1, 0, 0, 0, 438, 422, 1, 0, 0, 0, 438, 424, 1, 0, 0, 0, 438, 426, 1, 0, 0, 0, 438, 429, 1, 0, 0, 0, 438, 432, 1, 0, 0, 0, 438, 434, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 76, 1, 0, 0, 0, 440, 441, 5, 116, 0, 0, 441, 442, 5, 121, 0, 0, 442, 443, 5, 112, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 100, 0, 0, 445, 446, 5, 101, 0, 0, 446, 447, 5, 102, 0, 0, 447, 78, 1, 0, 0, 0, 448, 449, 5, 99, 0, 0, 449, 450, 5, 111, 0, 0, 450, 451, 5, 110, 0, 0, 451, 452, 5, 115, 0, 0, 452, 453, 5, 116, 0, 0, 453, 80, 1, 0, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 5, 120, 0, 0, 456, 457, 5, 116, 0, 0, 457, 458, 5, 101, 0, 0, 458, 459, 5, 114, 0, 0, 459, 460, 5, 110, 0, 0, 460, 82, 1, 0, 0, 0, 461, 462, 5, 95, 0, 0, 462, 463, 5, 95, 0, 0, 463, 464, 5, 101, 0, 0, 464, 465, 5, 120, 0, 0, 465, 466, 5, 112, 0, 0, 466, 467, 5, 111, 0, 0, 467, 468, 5, 114, 0, 0, 468, 469, 5, 116, 0, 0, 469, 84, 1, 0, 0, 0, 470, 471, 5, 95, 0, 0, 471, 472, 5, 95, 0, 0, 472, 473, 5, 97, 0, 0, 473, 474, 5, 108, 0, 0, 474, 475, 5, 105, 0, 0, 475, 476, 5, 103, 0, 0, 476, 477, 5, 110, 0, 0, 477, 86, 1, 0, 0, 0, 478, 479, 5, 105, 0, 0, 479, 480, 5, 110, 0, 0, 480, 481, 5, 108, 0, 0, 481, 482, 5, 105, 0, 0, 482, 483, 5, 110, 0, 0, 483, 484, 5, 101, 0, 0, 484, 88, 1, 0, 0, 0, 485, 486, 5, 118, 0, 0, 486, 487, 5, 111, 0, 0, 487, 488, 5, 108, 0, 0, 488, 489, 5, 97, 0, 0, 489, 490, 5, 116, 0, 0, 490, 491, 5, 105, 0, 0, 491, 492, 5, 108, 0, 0, 492, 493, 5, 101, 0, 0, 493, 90, 1, 0, 0, 0, 494, 495, 5, 115, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 97, 0, 0, 497, 498, 5, 116, 0, 0, 498, 499, 5, 105, 0, 0, 499, 500, 5, 99, 0, 0, 500, 92, 1, 0, 0, 0, 501, 502, 5, 95, 0, 0, 502, 503, 5, 95, 0, 0, 503, 504, 5, 105, 0, 0, 504, 505, 5, 110, 0, 0, 505, 506, 5, 116, 0, 0, 506, 507, 5, 101, 0, 0, 507, 508, 5, 114, 0, 0, 508, 509, 5, 114, 0, 0, 509, 510, 5, 117, 0, 0, 510, 511, 5, 112, 0, 0, 511, 512, 5, 116, 0, 0, 512, 94, 1, 0, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 101, 0, 0, 515, 516, 5, 103, 0, 0, 516, 517, 5, 105, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 116, 0, 0, 519, 520, 5, 101, 0, 0, 520, 521, 5, 114, 0, 0, 521, 96, 1, 0, 0, 0, 522, 523, 5, 95, 0, 0, 523, 524, 5, 95, 0, 0, 524, 525, 5, 122, 0, 0, 525, 526, 5, 112, 0, 0, 526, 527, 5, 95, 0, 0, 527, 528, 5, 114, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 115, 0, 0, 530, 531, 5, 101, 0, 0, 531, 532, 5, 114, 0, 0, 532, 533, 5, 118, 0, 0, 533, 534, 5, 101, 0, 0, 534, 98, 1, 0, 0, 0, 535, 536, 5, 95, 0, 0, 536, 537, 5, 95, 0, 0, 537, 538, 5, 97, 0, 0, 538, 539, 5, 100, 0, 0, 539, 540, 5, 100, 0, 0, 540, 541, 5, 114, 0, 0, 541, 542, 5, 101, 0, 0, 542, 543, 5, 115, 0, 0, 543, 544, 5, 115, 0, 0, 544, 100, 1, 0, 0, 0, 545, 546, 5, 95, 0, 0, 546, 547, 5, 95, 0, 0, 547, 548, 5, 122, 0, 0, 548, 549, 5, 112, 0, 0, 549, 102, 1, 0, 0, 0, 550, 551, 5, 95, 0, 0, 551, 552, 5, 95, 0, 0, 552, 553, 5, 109, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 109, 0, 0, 555, 104, 1, 0, 0, 0, 556, 557, 5, 95, 0, 0, 557, 558, 5, 95, 0, 0, 558, 559, 5, 102, 0, 0, 559, 560, 5, 97, 0, 0, 560, 561, 5, 114, 0, 0, 561, 106, 1, 0, 0, 0, 562, 563, 5, 95, 0, 0, 563, 564, 5, 95, 0, 0, 564, 565, 5, 110, 0, 0, 565, 566, 5, 101, 0, 0, 566, 567, 5, 97, 0, 0, 567, 568, 5, 114, 0, 0, 568, 108, 1, 0, 0, 0, 569, 570, 5, 95, 0, 0, 570, 571, 5, 95, 0, 0, 571, 572, 5, 115, 0, 0, 572, 573, 5, 115, 0, 0, 573, 574, 5, 97, 0, 0, 574, 110, 1, 0, 0, 0, 575, 576, 5, 95, 0, 0, 576, 577, 5, 95, 0, 0, 577, 578, 5, 109, 0, 0, 578, 579, 5, 97, 0, 0, 579, 112, 1, 0, 0, 0, 580, 581, 5, 95, 0, 0, 581, 582, 5, 95, 0, 0, 582, 583, 5, 105, 0, 0, 583, 584, 5, 110, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 114, 0, 0, 586, 587, 5, 105, 0, 0, 587, 588, 5, 110, 0, 0, 588, 589, 5, 115, 0, 0, 589, 590, 5, 105, 0, 0, 590, 591, 5, 99, 0, 0, 591, 114, 1, 0, 0, 0, 592, 593, 5, 95, 0, 0, 593, 594, 5, 95, 0, 0, 594, 595, 5, 115, 0, 0, 595, 596, 5, 116, 0, 0, 596, 597, 5, 97, 0, 0, 597, 598, 5, 99, 0, 0, 598, 599, 5, 107, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 637, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 112, 0, 0, 606, 607, 5, 104, 0, 0, 607, 608, 5, 105, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 637, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 118, 0, 0, 615, 616, 5, 97, 0, 0, 616, 617, 5, 114, 0, 0, 617, 618, 5, 99, 0, 0, 618, 619, 5, 97, 0, 0, 619, 620, 5, 108, 0, 0, 620, 637, 5, 108, 0, 0, 621, 622, 5, 95, 0, 0, 622, 623, 5, 95, 0, 0, 623, 624, 5, 105, 0, 0, 624, 625, 5, 110, 0, 0, 625, 626, 5, 116, 0, 0, 626, 627, 5, 114, 0, 0, 627, 628, 5, 105, 0, 0, 628, 629, 5, 110, 0, 0, 629, 630, 5, 115, 0, 0, 630, 631, 5, 105, 0, 0, 631, 632, 5, 99, 0, 0, 632, 633, 5, 99, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 108, 0, 0, 635, 637, 5, 108, 0, 0, 636, 592, 1, 0, 0, 0, 636, 603, 1, 0, 0, 0, 636, 612, 1, 0, 0, 0, 636, 621, 1, 0, 0, 0, 637, 116, 1, 0, 0, 0, 638, 639, 5, 105, 0, 0, 639, 640, 5, 102, 0, 0, 640, 118, 1, 0, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 115, 0, 0, 644, 645, 5, 101, 0, 0, 645, 120, 1, 0, 0, 0, 646, 647, 5, 119, 0, 0, 647, 648, 5, 104, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 108, 0, 0, 650, 651, 5, 101, 0, 0, 651, 122, 1, 0, 0, 0, 652, 653, 5, 100, 0, 0, 653, 654, 5, 111, 0, 0, 654, 124, 1, 0, 0, 0, 655, 656, 5, 102, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 114, 0, 0, 658, 126, 1, 0, 0, 0, 659, 660, 5, 115, 0, 0, 660, 661, 5, 119, 0, 0, 661, 662, 5, 105, 0, 0, 662, 663, 5, 116, 0, 0, 663, 664, 5, 99, 0, 0, 664, 665, 5, 104, 0, 0, 665, 128, 1, 0, 0, 0, 666, 667, 5, 114, 0, 0, 667, 668, 5, 101, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 117, 0, 0, 670, 671, 5, 114, 0, 0, 671, 672, 5, 110, 0, 0, 672, 130, 1, 0, 0, 0, 673, 674, 5, 98, 0, 0, 674, 675, 5, 114, 0, 0, 675, 676, 5, 101, 0, 0, 676, 677, 5, 97, 0, 0, 677, 678, 5, 107, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 110, 0, 0, 682, 683, 5, 116, 0, 0, 683, 684, 5, 105, 0, 0, 684, 685, 5, 110, 0, 0, 685, 686, 5, 117, 0, 0, 686, 687, 5, 101, 0, 0, 687, 134, 1, 0, 0, 0, 688, 689, 5, 103, 0, 0, 689, 690, 5, 111, 0, 0, 690, 691, 5, 116, 0, 0, 691, 692, 5, 111, 0, 0, 692, 136, 1, 0, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 115, 0, 0, 695, 696, 5, 109, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 6, 67, 1, 0, 698, 138, 1, 0, 0, 0, 699, 700, 5, 100, 0, 0, 700, 701, 5, 101, 0, 0, 701, 702, 5, 102, 0, 0, 702, 703, 5, 97, 0, 0, 703, 704, 5, 117, 0, 0, 704, 705, 5, 108, 0, 0, 705, 706, 5, 116, 0, 0, 706, 140, 1, 0, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 97, 0, 0, 709, 710, 5, 115, 0, 0, 710, 711, 5, 101, 0, 0, 711, 142, 1, 0, 0, 0, 712, 713, 5, 115, 0, 0, 713, 714, 5, 116, 0, 0, 714, 715, 5, 114, 0, 0, 715, 716, 5, 117, 0, 0, 716, 717, 5, 99, 0, 0, 717, 718, 5, 116, 0, 0, 718, 144, 1, 0, 0, 0, 719, 720, 5, 117, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 105, 0, 0, 722, 723, 5, 111, 0, 0, 723, 724, 5, 110, 0, 0, 724, 146, 1, 0, 0, 0, 725, 726, 5, 101, 0, 0, 726, 727, 5, 110, 0, 0, 727, 728, 5, 117, 0, 0, 728, 729, 5, 109, 0, 0, 729, 148, 1, 0, 0, 0, 730, 731, 5, 115, 0, 0, 731, 732, 5, 105, 0, 0, 732, 733, 5, 122, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 111, 0, 0, 735, 736, 5, 102, 0, 0, 736, 150, 1, 0, 0, 0, 737, 738, 5, 116, 0, 0, 738, 739, 5, 121, 0, 0, 739, 740, 5, 112, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 100, 0, 0, 743, 152, 1, 0, 0, 0, 744, 745, 5, 100, 0, 0, 745, 746, 5, 101, 0, 0, 746, 747, 5, 102, 0, 0, 747, 748, 5, 105, 0, 0, 748, 749, 5, 110, 0, 0, 749, 750, 5, 101, 0, 0, 750, 751, 5, 100, 0, 0, 751, 154, 1, 0, 0, 0, 752, 753, 5, 107, 0, 0, 753, 754, 5, 105, 0, 0, 754, 755, 5, 99, 0, 0, 755, 756, 5, 107, 0, 0, 756, 757, 5, 97, 0, 0, 757, 758, 5, 115, 0, 0, 758, 759, 5, 109, 0, 0, 759, 156, 1, 0, 0, 0, 760, 761, 5, 33, 0, 0, 761, 158, 1, 0, 0, 0, 762, 763, 5, 115, 0, 0, 763, 764, 5, 105, 0, 0, 764, 765, 5, 103, 0, 0, 765, 766, 5, 110, 0, 0, 766, 767, 5, 101, 0, 0, 767, 814, 5, 100, 0, 0, 768, 769, 5, 117, 0, 0, 769, 770, 5, 110, 0, 0, 770, 771, 5, 115, 0, 0, 771, 772, 5, 105, 0, 0, 772, 773, 5, 103, 0, 0, 773, 774, 5, 110, 0, 0, 774, 775, 5, 101, 0, 0, 775, 814, 5, 100, 0, 0, 776, 777, 5, 98, 0, 0, 777, 778, 5, 121, 0, 0, 778, 779, 5, 116, 0, 0, 779, 814, 5, 101, 0, 0, 780, 781, 5, 119, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 114, 0, 0, 783, 814, 5, 100, 0, 0, 784, 785, 5, 100, 0, 0, 785, 786, 5, 119, 0, 0, 786, 787, 5, 111, 0, 0, 787, 788, 5, 114, 0, 0, 788, 814, 5, 100, 0, 0, 789, 790, 5, 98, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 111, 0, 0, 792, 814, 5, 108, 0, 0, 793, 794, 5, 99, 0, 0, 794, 795, 5, 104, 0, 0, 795, 796, 5, 97, 0, 0, 796, 814, 5, 114, 0, 0, 797, 798, 5, 115, 0, 0, 798, 799, 5, 104, 0, 0, 799, 800, 5, 111, 0, 0, 800, 801, 5, 114, 0, 0, 801, 814, 5, 116, 0, 0, 802, 803, 5, 105, 0, 0, 803, 804, 5, 110, 0, 0, 804, 814, 5, 116, 0, 0, 805, 806, 5, 108, 0, 0, 806, 807, 5, 111, 0, 0, 807, 808, 5, 110, 0, 0, 808, 814, 5, 103, 0, 0, 809, 810, 5, 118, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 105, 0, 0, 812, 814, 5, 100, 0, 0, 813, 762, 1, 0, 0, 0, 813, 768, 1, 0, 0, 0, 813, 776, 1, 0, 0, 0, 813, 780, 1, 0, 0, 0, 813, 784, 1, 0, 0, 0, 813, 789, 1, 0, 0, 0, 813, 793, 1, 0, 0, 0, 813, 797, 1, 0, 0, 0, 813, 802, 1, 0, 0, 0, 813, 805, 1, 0, 0, 0, 813, 809, 1, 0, 0, 0, 814, 160, 1, 0, 0, 0, 815, 816, 5, 116, 0, 0, 816, 817, 5, 114, 0, 0, 817, 818, 5, 117, 0, 0, 818, 825, 5, 101, 0, 0, 819, 820, 5, 102, 0, 0, 820, 821, 5, 97, 0, 0, 821, 822, 5, 108, 0, 0, 822, 823, 5, 115, 0, 0, 823, 825, 5, 101, 0, 0, 824, 815, 1, 0, 0, 0, 824, 819, 1, 0, 0, 0, 825, 162, 1, 0, 0, 0, 826, 827, 5, 123, 0, 0, 827, 828, 5, 123, 0, 0, 828, 832, 1, 0, 0, 0, 829, 831, 9, 0, 0, 0, 830, 829, 1, 0, 0, 0, 831, 834, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 835, 836, 5, 125, 0, 0, 836, 837, 5, 125, 0, 0, 837, 164, 1, 0, 0, 0, 838, 839, 5, 35, 0, 0, 839, 840, 5, 105, 0, 0, 840, 841, 5, 109, 0, 0, 841, 842, 5, 112, 0, 0, 842, 843, 5, 111, 0, 0, 843, 844, 5, 114, 0, 0, 844, 845, 5, 116, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 6, 81, 2, 0, 847, 166, 1, 0, 0, 0, 848, 849, 5, 35, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 110, 0, 0, 851, 852, 5, 99, 0, 0, 852, 853, 5, 108, 0, 0, 853, 854, 5, 117, 0, 0, 854, 855, 5, 100, 0, 0, 855, 856, 5, 101, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 6, 82, 3, 0, 858, 168, 1, 0, 0, 0, 859, 860, 5, 35, 0, 0, 860, 861, 5, 112, 0, 0, 861, 862, 5, 114, 0, 0, 862, 863, 5, 97, 0, 0, 863, 864, 5, 103, 0, 0, 864, 865, 5, 109, 0, 0, 865, 866, 5, 97, 0, 0, 866, 170, 1, 0, 0, 0, 867, 868, 5, 35, 0, 0, 868, 869, 5, 100, 0, 0, 869, 870, 5, 101, 0, 0, 870, 871, 5, 102, 0, 0, 871, 872, 5, 105, 0, 0, 872, 873, 5, 110, 0, 0, 873, 874, 5, 101, 0, 0, 874, 172, 1, 0, 0, 0, 875, 876, 5, 92, 0, 0, 876, 881, 5, 10, 0, 0, 877, 878, 5, 92, 0, 0, 878, 879, 5, 13, 0, 0, 879, 881, 5, 10, 0, 0, 880, 875, 1, 0, 0, 0, 880, 877, 1, 0, 0, 0, 881, 174, 1, 0, 0, 0, 882, 883, 5, 35, 0, 0, 883, 884, 5, 117, 0, 0, 884, 885, 5, 110, 0, 0, 885, 886, 5, 100, 0, 0, 886, 887, 5, 101, 0, 0, 887, 888, 5, 102, 0, 0, 888, 176, 1, 0, 0, 0, 889, 890, 5, 35, 0, 0, 890, 891, 5, 105, 0, 0, 891, 892, 5, 102, 0, 0, 892, 893, 5, 100, 0, 0, 893, 894, 5, 101, 0, 0, 894, 895, 5, 102, 0, 0, 895, 178, 1, 0, 0, 0, 896, 897, 5, 35, 0, 0, 897, 898, 5, 105, 0, 0, 898, 899, 5, 102, 0, 0, 899, 900, 5, 110, 0, 0, 900, 901, 5, 100, 0, 0, 901, 902, 5, 101, 0, 0, 902, 903, 5, 102, 0, 0, 903, 180, 1, 0, 0, 0, 904, 905, 5, 35, 0, 0, 905, 906, 5, 105, 0, 0, 906, 907, 5, 102, 0, 0, 907, 182, 1, 0, 0, 0, 908, 909, 5, 35, 0, 0, 909, 910, 5, 101, 0, 0, 910, 911, 5, 108, 0, 0, 911, 912, 5, 105, 0, 0, 912, 913, 5, 102, 0, 0, 913, 184, 1, 0, 0, 0, 914, 915, 5, 35, 0, 0, 915, 916, 5, 101, 0, 0, 916, 917, 5, 108, 0, 0, 917, 918, 5, 115, 0, 0, 918, 919, 5, 101, 0, 0, 919, 186, 1, 0, 0, 0, 920, 921, 5, 35, 0, 0, 921, 922, 5, 101, 0, 0, 922, 923, 5, 110, 0, 0, 923, 924, 5, 100, 0, 0, 924, 925, 5, 105, 0, 0, 925, 926, 5, 102, 0, 0, 926, 188, 1, 0, 0, 0, 927, 928, 5, 35, 0, 0, 928, 929, 5, 101, 0, 0, 929, 930, 5, 114, 0, 0, 930, 931, 5, 114, 0, 0, 931, 932, 5, 111, 0, 0, 932, 933, 5, 114, 0, 0, 933, 190, 1, 0, 0, 0, 934, 935, 5, 35, 0, 0, 935, 936, 3, 219, 108, 0, 936, 192, 1, 0, 0, 0, 937, 938, 5, 35, 0, 0, 938, 939, 3, 219, 108, 0, 939, 194, 1, 0, 0, 0, 940, 943, 3, 197, 97, 0, 941, 943, 3, 205, 101, 0, 942, 940, 1, 0, 0, 0, 942, 941, 1, 0, 0, 0, 943, 196, 1, 0, 0, 0, 944, 948, 3, 199, 98, 0, 945, 948, 3, 201, 99, 0, 946, 948, 3, 203, 100, 0, 947, 944, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 946, 1, 0, 0, 0, 948, 198, 1, 0, 0, 0, 949, 955, 5, 37, 0, 0, 950, 951, 5, 48, 0, 0, 951, 955, 5, 98, 0, 0, 952, 953, 5, 48, 0, 0, 953, 955, 5, 66, 0, 0, 954, 949, 1, 0, 0, 0, 954, 950, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 955, 959, 1, 0, 0, 0, 956, 958, 3, 213, 105, 0, 957, 956, 1, 0, 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 964, 5, 46, 0, 0, 963, 965, 3, 213, 105, 0, 964, 963, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 200, 1, 0, 0, 0, 968, 970, 3, 215, 106, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 976, 5, 46, 0, 0, 975, 977, 3, 215, 106, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 202, 1, 0, 0, 0, 980, 986, 5, 36, 0, 0, 981, 982, 5, 48, 0, 0, 982, 986, 5, 120, 0, 0, 983, 984, 5, 48, 0, 0, 984, 986, 5, 88, 0, 0, 985, 980, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 986, 990, 1, 0, 0, 0, 987, 989, 3, 217, 107, 0, 988, 987, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 993, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 993, 995, 5, 46, 0, 0, 994, 996, 3, 217, 107, 0, 995, 994, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 995, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 204, 1, 0, 0, 0, 999, 1003, 3, 209, 103, 0, 1000, 1003, 3, 211, 104, 0, 1001, 1003, 3, 207, 102, 0, 1002, 999, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1001, 1, 0, 0, 0, 1003, 1007, 1, 0, 0, 0, 1004, 1005, 7, 0, 0, 0, 1005, 1008, 7, 1, 0, 0, 1006, 1008, 7, 2, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 206, 1, 0, 0, 0, 1009, 1010, 5, 48, 0, 0, 1010, 1012, 7, 3, 0, 0, 1011, 1013, 3, 213, 105, 0, 1012, 1011, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1023, 1, 0, 0, 0, 1016, 1018, 5, 37, 0, 0, 1017, 1019, 3, 213, 105, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1023, 1, 0, 0, 0, 1022, 1009, 1, 0, 0, 0, 1022, 1016, 1, 0, 0, 0, 1023, 208, 1, 0, 0, 0, 1024, 1026, 3, 215, 106, 0, 1025, 1024, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 210, 1, 0, 0, 0, 1029, 1035, 5, 36, 0, 0, 1030, 1031, 5, 48, 0, 0, 1031, 1035, 5, 120, 0, 0, 1032, 1033, 5, 48, 0, 0, 1033, 1035, 5, 88, 0, 0, 1034, 1029, 1, 0, 0, 0, 1034, 1030, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1038, 3, 217, 107, 0, 1037, 1036, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 212, 1, 0, 0, 0, 1041, 1042, 7, 4, 0, 0, 1042, 214, 1, 0, 0, 0, 1043, 1044, 7, 5, 0, 0, 1044, 216, 1, 0, 0, 0, 1045, 1046, 7, 6, 0, 0, 1046, 218, 1, 0, 0, 0, 1047, 1051, 3, 221, 109, 0, 1048, 1050, 3, 223, 110, 0, 1049, 1048, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1054, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1054, 1055, 6, 108, 4, 0, 1055, 220, 1, 0, 0, 0, 1056, 1057, 7, 7, 0, 0, 1057, 222, 1, 0, 0, 0, 1058, 1059, 7, 8, 0, 0, 1059, 224, 1, 0, 0, 0, 1060, 1066, 5, 34, 0, 0, 1061, 1062, 5, 92, 0, 0, 1062, 1065, 5, 34, 0, 0, 1063, 1065, 8, 9, 0, 0, 1064, 1061, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1071, 5, 34, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1077, 1, 0, 0, 0, 1073, 1075, 7, 11, 0, 0, 1074, 1076, 7, 12, 0, 0, 1075, 1074, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1073, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 10, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 226, 1, 0, 0, 0, 1082, 1097, 5, 39, 0, 0, 1083, 1094, 5, 92, 0, 0, 1084, 1086, 7, 13, 0, 0, 1085, 1087, 7, 5, 0, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1090, 7, 5, 0, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1095, 1, 0, 0, 0, 1091, 1092, 5, 120, 0, 0, 1092, 1093, 7, 14, 0, 0, 1093, 1095, 7, 14, 0, 0, 1094, 1084, 1, 0, 0, 0, 1094, 1091, 1, 0, 0, 0, 1095, 1098, 1, 0, 0, 0, 1096, 1098, 8, 15, 0, 0, 1097, 1083, 1, 0, 0, 0, 1097, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 5, 39, 0, 0, 1100, 228, 1, 0, 0, 0, 1101, 1103, 7, 16, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1107, 6, 113, 5, 0, 1107, 230, 1, 0, 0, 0, 1108, 1109, 5, 47, 0, 0, 1109, 1110, 5, 47, 0, 0, 1110, 1114, 1, 0, 0, 0, 1111, 1113, 8, 17, 0, 0, 1112, 1111, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 6, 114, 6, 0, 1118, 232, 1, 0, 0, 0, 1119, 1120, 5, 47, 0, 0, 1120, 1121, 5, 42, 0, 0, 1121, 1125, 1, 0, 0, 0, 1122, 1124, 9, 0, 0, 0, 1123, 1122, 1, 0, 0, 0, 1124, 1127, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1126, 1128, 1, 0, 0, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1129, 5, 42, 0, 0, 1129, 1130, 5, 47, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1132, 6, 115, 6, 0, 1132, 234, 1, 0, 0, 0, 1133, 1134, 5, 46, 0, 0, 1134, 1135, 5, 98, 0, 0, 1135, 1136, 5, 121, 0, 0, 1136, 1137, 5, 116, 0, 0, 1137, 1138, 5, 101, 0, 0, 1138, 236, 1, 0, 0, 0, 1139, 1140, 5, 98, 0, 0, 1140, 1141, 5, 114, 0, 0, 1141, 1747, 5, 107, 0, 0, 1142, 1143, 5, 111, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1747, 5, 97, 0, 0, 1145, 1146, 5, 107, 0, 0, 1146, 1147, 5, 105, 0, 0, 1147, 1747, 5, 108, 0, 0, 1148, 1149, 5, 115, 0, 0, 1149, 1150, 5, 108, 0, 0, 1150, 1747, 5, 111, 0, 0, 1151, 1152, 5, 110, 0, 0, 1152, 1153, 5, 111, 0, 0, 1153, 1747, 5, 112, 0, 0, 1154, 1155, 5, 97, 0, 0, 1155, 1156, 5, 115, 0, 0, 1156, 1747, 5, 108, 0, 0, 1157, 1158, 5, 112, 0, 0, 1158, 1159, 5, 104, 0, 0, 1159, 1747, 5, 112, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 1162, 5, 110, 0, 0, 1162, 1747, 5, 99, 0, 0, 1163, 1164, 5, 98, 0, 0, 1164, 1165, 5, 112, 0, 0, 1165, 1747, 5, 108, 0, 0, 1166, 1167, 5, 99, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1747, 5, 99, 0, 0, 1169, 1170, 5, 106, 0, 0, 1170, 1171, 5, 115, 0, 0, 1171, 1747, 5, 114, 0, 0, 1172, 1173, 5, 97, 0, 0, 1173, 1174, 5, 110, 0, 0, 1174, 1747, 5, 100, 0, 0, 1175, 1176, 5, 114, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1747, 5, 97, 0, 0, 1178, 1179, 5, 98, 0, 0, 1179, 1180, 5, 105, 0, 0, 1180, 1747, 5, 116, 0, 0, 1181, 1182, 5, 114, 0, 0, 1182, 1183, 5, 111, 0, 0, 1183, 1747, 5, 108, 0, 0, 1184, 1185, 5, 112, 0, 0, 1185, 1186, 5, 108, 0, 0, 1186, 1747, 5, 97, 0, 0, 1187, 1188, 5, 112, 0, 0, 1188, 1189, 5, 108, 0, 0, 1189, 1747, 5, 112, 0, 0, 1190, 1191, 5, 98, 0, 0, 1191, 1192, 5, 109, 0, 0, 1192, 1747, 5, 105, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1747, 5, 99, 0, 0, 1196, 1197, 5, 114, 0, 0, 1197, 1198, 5, 116, 0, 0, 1198, 1747, 5, 105, 0, 0, 1199, 1200, 5, 101, 0, 0, 1200, 1201, 5, 111, 0, 0, 1201, 1747, 5, 114, 0, 0, 1202, 1203, 5, 115, 0, 0, 1203, 1204, 5, 114, 0, 0, 1204, 1747, 5, 101, 0, 0, 1205, 1206, 5, 108, 0, 0, 1206, 1207, 5, 115, 0, 0, 1207, 1747, 5, 114, 0, 0, 1208, 1209, 5, 112, 0, 0, 1209, 1210, 5, 104, 0, 0, 1210, 1747, 5, 97, 0, 0, 1211, 1212, 5, 97, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1747, 5, 114, 0, 0, 1214, 1215, 5, 106, 0, 0, 1215, 1216, 5, 109, 0, 0, 1216, 1747, 5, 112, 0, 0, 1217, 1218, 5, 98, 0, 0, 1218, 1219, 5, 118, 0, 0, 1219, 1747, 5, 99, 0, 0, 1220, 1221, 5, 99, 0, 0, 1221, 1222, 5, 108, 0, 0, 1222, 1747, 5, 105, 0, 0, 1223, 1224, 5, 114, 0, 0, 1224, 1225, 5, 116, 0, 0, 1225, 1747, 5, 115, 0, 0, 1226, 1227, 5, 97, 0, 0, 1227, 1228, 5, 100, 0, 0, 1228, 1747, 5, 99, 0, 0, 1229, 1230, 5, 114, 0, 0, 1230, 1231, 5, 114, 0, 0, 1231, 1747, 5, 97, 0, 0, 1232, 1233, 5, 98, 0, 0, 1233, 1234, 5, 118, 0, 0, 1234, 1747, 5, 115, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1747, 5, 105, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 97, 0, 0, 1240, 1747, 5, 120, 0, 0, 1241, 1242, 5, 115, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1747, 5, 121, 0, 0, 1244, 1245, 5, 115, 0, 0, 1245, 1246, 5, 116, 0, 0, 1246, 1747, 5, 97, 0, 0, 1247, 1248, 5, 115, 0, 0, 1248, 1249, 5, 116, 0, 0, 1249, 1747, 5, 120, 0, 0, 1250, 1251, 5, 100, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1747, 5, 121, 0, 0, 1253, 1254, 5, 116, 0, 0, 1254, 1255, 5, 120, 0, 0, 1255, 1747, 5, 97, 0, 0, 1256, 1257, 5, 120, 0, 0, 1257, 1258, 5, 97, 0, 0, 1258, 1747, 5, 97, 0, 0, 1259, 1260, 5, 98, 0, 0, 1260, 1261, 5, 99, 0, 0, 1261, 1747, 5, 99, 0, 0, 1262, 1263, 5, 97, 0, 0, 1263, 1264, 5, 104, 0, 0, 1264, 1747, 5, 120, 0, 0, 1265, 1266, 5, 116, 0, 0, 1266, 1267, 5, 121, 0, 0, 1267, 1747, 5, 97, 0, 0, 1268, 1269, 5, 116, 0, 0, 1269, 1270, 5, 120, 0, 0, 1270, 1747, 5, 115, 0, 0, 1271, 1272, 5, 116, 0, 0, 1272, 1273, 5, 97, 0, 0, 1273, 1747, 5, 115, 0, 0, 1274, 1275, 5, 115, 0, 0, 1275, 1276, 5, 104, 0, 0, 1276, 1747, 5, 121, 0, 0, 1277, 1278, 5, 115, 0, 0, 1278, 1279, 5, 104, 0, 0, 1279, 1747, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 100, 0, 0, 1282, 1747, 5, 121, 0, 0, 1283, 1284, 5, 108, 0, 0, 1284, 1285, 5, 100, 0, 0, 1285, 1747, 5, 97, 0, 0, 1286, 1287, 5, 108, 0, 0, 1287, 1288, 5, 100, 0, 0, 1288, 1747, 5, 120, 0, 0, 1289, 1290, 5, 108, 0, 0, 1290, 1291, 5, 97, 0, 0, 1291, 1747, 5, 120, 0, 0, 1292, 1293, 5, 116, 0, 0, 1293, 1294, 5, 97, 0, 0, 1294, 1747, 5, 121, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 97, 0, 0, 1297, 1747, 5, 120, 0, 0, 1298, 1299, 5, 98, 0, 0, 1299, 1300, 5, 99, 0, 0, 1300, 1747, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 108, 0, 0, 1303, 1747, 5, 118, 0, 0, 1304, 1305, 5, 116, 0, 0, 1305, 1306, 5, 115, 0, 0, 1306, 1747, 5, 120, 0, 0, 1307, 1308, 5, 108, 0, 0, 1308, 1309, 5, 97, 0, 0, 1309, 1747, 5, 115, 0, 0, 1310, 1311, 5, 99, 0, 0, 1311, 1312, 5, 112, 0, 0, 1312, 1747, 5, 121, 0, 0, 1313, 1314, 5, 99, 0, 0, 1314, 1315, 5, 109, 0, 0, 1315, 1747, 5, 112, 0, 0, 1316, 1317, 5, 99, 0, 0, 1317, 1318, 5, 112, 0, 0, 1318, 1747, 5, 120, 0, 0, 1319, 1320, 5, 100, 0, 0, 1320, 1321, 5, 99, 0, 0, 1321, 1747, 5, 112, 0, 0, 1322, 1323, 5, 100, 0, 0, 1323, 1324, 5, 101, 0, 0, 1324, 1747, 5, 99, 0, 0, 1325, 1326, 5, 105, 0, 0, 1326, 1327, 5, 110, 0, 0, 1327, 1747, 5, 99, 0, 0, 1328, 1329, 5, 97, 0, 0, 1329, 1330, 5, 120, 0, 0, 1330, 1747, 5, 115, 0, 0, 1331, 1332, 5, 98, 0, 0, 1332, 1333, 5, 110, 0, 0, 1333, 1747, 5, 101, 0, 0, 1334, 1335, 5, 99, 0, 0, 1335, 1336, 5, 108, 0, 0, 1336, 1747, 5, 100, 0, 0, 1337, 1338, 5, 115, 0, 0, 1338, 1339, 5, 98, 0, 0, 1339, 1747, 5, 99, 0, 0, 1340, 1341, 5, 105, 0, 0, 1341, 1342, 5, 115, 0, 0, 1342, 1747, 5, 99, 0, 0, 1343, 1344, 5, 105, 0, 0, 1344, 1345, 5, 110, 0, 0, 1345, 1747, 5, 120, 0, 0, 1346, 1347, 5, 98, 0, 0, 1347, 1348, 5, 101, 0, 0, 1348, 1747, 5, 113, 0, 0, 1349, 1350, 5, 115, 0, 0, 1350, 1351, 5, 101, 0, 0, 1351, 1747, 5, 100, 0, 0, 1352, 1353, 5, 100, 0, 0, 1353, 1354, 5, 101, 0, 0, 1354, 1747, 5, 120, 0, 0, 1355, 1356, 5, 105, 0, 0, 1356, 1357, 5, 110, 0, 0, 1357, 1747, 5, 121, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1360, 5, 111, 0, 0, 1360, 1747, 5, 114, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 98, 0, 0, 1363, 1364, 5, 114, 0, 0, 1364, 1747, 5, 48, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 98, 0, 0, 1367, 1368, 5, 114, 0, 0, 1368, 1747, 5, 49, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 98, 0, 0, 1371, 1372, 5, 114, 0, 0, 1372, 1747, 5, 50, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 98, 0, 0, 1375, 1376, 5, 114, 0, 0, 1376, 1747, 5, 51, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 98, 0, 0, 1379, 1380, 5, 114, 0, 0, 1380, 1747, 5, 52, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 98, 0, 0, 1383, 1384, 5, 114, 0, 0, 1384, 1747, 5, 53, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 98, 0, 0, 1387, 1388, 5, 114, 0, 0, 1388, 1747, 5, 54, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 98, 0, 0, 1391, 1392, 5, 114, 0, 0, 1392, 1747, 5, 55, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 98, 0, 0, 1395, 1396, 5, 115, 0, 0, 1396, 1747, 5, 48, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 98, 0, 0, 1399, 1400, 5, 115, 0, 0, 1400, 1747, 5, 49, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 98, 0, 0, 1403, 1404, 5, 115, 0, 0, 1404, 1747, 5, 50, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 98, 0, 0, 1407, 1408, 5, 115, 0, 0, 1408, 1747, 5, 51, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 98, 0, 0, 1411, 1412, 5, 115, 0, 0, 1412, 1747, 5, 52, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 98, 0, 0, 1415, 1416, 5, 115, 0, 0, 1416, 1747, 5, 53, 0, 0, 1417, 1418, 5, 98, 0, 0, 1418, 1419, 5, 98, 0, 0, 1419, 1420, 5, 115, 0, 0, 1420, 1747, 5, 54, 0, 0, 1421, 1422, 5, 98, 0, 0, 1422, 1423, 5, 98, 0, 0, 1423, 1424, 5, 115, 0, 0, 1424, 1747, 5, 55, 0, 0, 1425, 1426, 5, 98, 0, 0, 1426, 1427, 5, 114, 0, 0, 1427, 1747, 5, 97, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 104, 0, 0, 1430, 1747, 5, 120, 0, 0, 1431, 1432, 5, 112, 0, 0, 1432, 1433, 5, 104, 0, 0, 1433, 1747, 5, 121, 0, 0, 1434, 1435, 5, 112, 0, 0, 1435, 1436, 5, 108, 0, 0, 1436, 1747, 5, 120, 0, 0, 1437, 1438, 5, 112, 0, 0, 1438, 1439, 5, 108, 0, 0, 1439, 1747, 5, 121, 0, 0, 1440, 1441, 5, 114, 0, 0, 1441, 1442, 5, 109, 0, 0, 1442, 1443, 5, 98, 0, 0, 1443, 1747, 5, 48, 0, 0, 1444, 1445, 5, 114, 0, 0, 1445, 1446, 5, 109, 0, 0, 1446, 1447, 5, 98, 0, 0, 1447, 1747, 5, 49, 0, 0, 1448, 1449, 5, 114, 0, 0, 1449, 1450, 5, 109, 0, 0, 1450, 1451, 5, 98, 0, 0, 1451, 1747, 5, 50, 0, 0, 1452, 1453, 5, 114, 0, 0, 1453, 1454, 5, 109, 0, 0, 1454, 1455, 5, 98, 0, 0, 1455, 1747, 5, 51, 0, 0, 1456, 1457, 5, 114, 0, 0, 1457, 1458, 5, 109, 0, 0, 1458, 1459, 5, 98, 0, 0, 1459, 1747, 5, 52, 0, 0, 1460, 1461, 5, 114, 0, 0, 1461, 1462, 5, 109, 0, 0, 1462, 1463, 5, 98, 0, 0, 1463, 1747, 5, 53, 0, 0, 1464, 1465, 5, 114, 0, 0, 1465, 1466, 5, 109, 0, 0, 1466, 1467, 5, 98, 0, 0, 1467, 1747, 5, 54, 0, 0, 1468, 1469, 5, 114, 0, 0, 1469, 1470, 5, 109, 0, 0, 1470, 1471, 5, 98, 0, 0, 1471, 1747, 5, 55, 0, 0, 1472, 1473, 5, 115, 0, 0, 1473, 1474, 5, 109, 0, 0, 1474, 1475, 5, 98, 0, 0, 1475, 1747, 5, 48, 0, 0, 1476, 1477, 5, 115, 0, 0, 1477, 1478, 5, 109, 0, 0, 1478, 1479, 5, 98, 0, 0, 1479, 1747, 5, 49, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, 1482, 5, 109, 0, 0, 1482, 1483, 5, 98, 0, 0, 1483, 1747, 5, 50, 0, 0, 1484, 1485, 5, 115, 0, 0, 1485, 1486, 5, 109, 0, 0, 1486, 1487, 5, 98, 0, 0, 1487, 1747, 5, 51, 0, 0, 1488, 1489, 5, 115, 0, 0, 1489, 1490, 5, 109, 0, 0, 1490, 1491, 5, 98, 0, 0, 1491, 1747, 5, 52, 0, 0, 1492, 1493, 5, 115, 0, 0, 1493, 1494, 5, 109, 0, 0, 1494, 1495, 5, 98, 0, 0, 1495, 1747, 5, 53, 0, 0, 1496, 1497, 5, 115, 0, 0, 1497, 1498, 5, 109, 0, 0, 1498, 1499, 5, 98, 0, 0, 1499, 1747, 5, 54, 0, 0, 1500, 1501, 5, 115, 0, 0, 1501, 1502, 5, 109, 0, 0, 1502, 1503, 5, 98, 0, 0, 1503, 1747, 5, 55, 0, 0, 1504, 1505, 5, 115, 0, 0, 1505, 1506, 5, 116, 0, 0, 1506, 1747, 5, 112, 0, 0, 1507, 1508, 5, 115, 0, 0, 1508, 1509, 5, 116, 0, 0, 1509, 1747, 5, 122, 0, 0, 1510, 1511, 5, 116, 0, 0, 1511, 1512, 5, 114, 0, 0, 1512, 1747, 5, 98, 0, 0, 1513, 1514, 5, 116, 0, 0, 1514, 1515, 5, 115, 0, 0, 1515, 1747, 5, 98, 0, 0, 1516, 1517, 5, 119, 0, 0, 1517, 1518, 5, 97, 0, 0, 1518, 1747, 5, 105, 0, 0, 1519, 1520, 5, 99, 0, 0, 1520, 1521, 5, 108, 0, 0, 1521, 1747, 5, 101, 0, 0, 1522, 1523, 5, 115, 0, 0, 1523, 1524, 5, 101, 0, 0, 1524, 1747, 5, 101, 0, 0, 1525, 1526, 5, 116, 0, 0, 1526, 1527, 5, 115, 0, 0, 1527, 1747, 5, 121, 0, 0, 1528, 1529, 5, 108, 0, 0, 1529, 1530, 5, 98, 0, 0, 1530, 1531, 5, 112, 0, 0, 1531, 1747, 5, 108, 0, 0, 1532, 1533, 5, 105, 0, 0, 1533, 1534, 5, 110, 0, 0, 1534, 1747, 5, 122, 0, 0, 1535, 1536, 5, 116, 0, 0, 1536, 1537, 5, 121, 0, 0, 1537, 1747, 5, 115, 0, 0, 1538, 1539, 5, 108, 0, 0, 1539, 1540, 5, 98, 0, 0, 1540, 1541, 5, 109, 0, 0, 1541, 1747, 5, 105, 0, 0, 1542, 1543, 5, 100, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1747, 5, 122, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 101, 0, 0, 1547, 1747, 5, 103, 0, 0, 1548, 1549, 5, 97, 0, 0, 1549, 1550, 5, 115, 0, 0, 1550, 1747, 5, 114, 0, 0, 1551, 1552, 5, 116, 0, 0, 1552, 1553, 5, 97, 0, 0, 1553, 1747, 5, 122, 0, 0, 1554, 1555, 5, 108, 0, 0, 1555, 1556, 5, 98, 0, 0, 1556, 1557, 5, 118, 0, 0, 1557, 1747, 5, 99, 0, 0, 1558, 1559, 5, 116, 0, 0, 1559, 1560, 5, 97, 0, 0, 1560, 1747, 5, 98, 0, 0, 1561, 1562, 5, 109, 0, 0, 1562, 1563, 5, 97, 0, 0, 1563, 1747, 5, 112, 0, 0, 1564, 1565, 5, 114, 0, 0, 1565, 1566, 5, 116, 0, 0, 1566, 1747, 5, 110, 0, 0, 1567, 1568, 5, 108, 0, 0, 1568, 1569, 5, 98, 0, 0, 1569, 1570, 5, 115, 0, 0, 1570, 1747, 5, 114, 0, 0, 1571, 1572, 5, 116, 0, 0, 1572, 1573, 5, 122, 0, 0, 1573, 1747, 5, 97, 0, 0, 1574, 1575, 5, 108, 0, 0, 1575, 1576, 5, 98, 0, 0, 1576, 1577, 5, 118, 0, 0, 1577, 1747, 5, 115, 0, 0, 1578, 1579, 5, 116, 0, 0, 1579, 1580, 5, 98, 0, 0, 1580, 1747, 5, 97, 0, 0, 1581, 1582, 5, 108, 0, 0, 1582, 1583, 5, 98, 0, 0, 1583, 1584, 5, 114, 0, 0, 1584, 1747, 5, 97, 0, 0, 1585, 1586, 5, 108, 0, 0, 1586, 1587, 5, 98, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1747, 5, 99, 0, 0, 1589, 1590, 5, 108, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1747, 5, 122, 0, 0, 1592, 1593, 5, 108, 0, 0, 1593, 1594, 5, 98, 0, 0, 1594, 1595, 5, 99, 0, 0, 1595, 1747, 5, 115, 0, 0, 1596, 1597, 5, 99, 0, 0, 1597, 1598, 5, 112, 0, 0, 1598, 1747, 5, 122, 0, 0, 1599, 1600, 5, 100, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 1747, 5, 119, 0, 0, 1602, 1603, 5, 97, 0, 0, 1603, 1604, 5, 115, 0, 0, 1604, 1747, 5, 119, 0, 0, 1605, 1606, 5, 108, 0, 0, 1606, 1607, 5, 98, 0, 0, 1607, 1608, 5, 110, 0, 0, 1608, 1747, 5, 101, 0, 0, 1609, 1610, 5, 112, 0, 0, 1610, 1611, 5, 104, 0, 0, 1611, 1747, 5, 122, 0, 0, 1612, 1613, 5, 105, 0, 0, 1613, 1614, 5, 110, 0, 0, 1614, 1747, 5, 119, 0, 0, 1615, 1616, 5, 114, 0, 0, 1616, 1617, 5, 111, 0, 0, 1617, 1747, 5, 119, 0, 0, 1618, 1619, 5, 108, 0, 0, 1619, 1620, 5, 98, 0, 0, 1620, 1621, 5, 101, 0, 0, 1621, 1747, 5, 113, 0, 0, 1622, 1623, 5, 112, 0, 0, 1623, 1624, 5, 104, 0, 0, 1624, 1747, 5, 119, 0, 0, 1625, 1626, 5, 112, 0, 0, 1626, 1627, 5, 108, 0, 0, 1627, 1747, 5, 122, 0, 0, 1628, 1629, 5, 101, 0, 0, 1629, 1630, 5, 111, 0, 0, 1630, 1747, 5, 109, 0, 0, 1631, 1632, 5, 97, 0, 0, 1632, 1633, 5, 100, 0, 0, 1633, 1634, 5, 99, 0, 0, 1634, 1747, 5, 113, 0, 0, 1635, 1636, 5, 97, 0, 0, 1636, 1637, 5, 110, 0, 0, 1637, 1638, 5, 100, 0, 0, 1638, 1747, 5, 113, 0, 0, 1639, 1640, 5, 97, 0, 0, 1640, 1641, 5, 115, 0, 0, 1641, 1642, 5, 108, 0, 0, 1642, 1747, 5, 113, 0, 0, 1643, 1644, 5, 97, 0, 0, 1644, 1645, 5, 115, 0, 0, 1645, 1646, 5, 114, 0, 0, 1646, 1747, 5, 113, 0, 0, 1647, 1648, 5, 98, 0, 0, 1648, 1649, 5, 105, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1747, 5, 113, 0, 0, 1651, 1652, 5, 99, 0, 0, 1652, 1653, 5, 112, 0, 0, 1653, 1747, 5, 113, 0, 0, 1654, 1655, 5, 100, 0, 0, 1655, 1656, 5, 101, 0, 0, 1656, 1747, 5, 113, 0, 0, 1657, 1658, 5, 101, 0, 0, 1658, 1659, 5, 111, 0, 0, 1659, 1660, 5, 114, 0, 0, 1660, 1747, 5, 113, 0, 0, 1661, 1662, 5, 105, 0, 0, 1662, 1663, 5, 110, 0, 0, 1663, 1747, 5, 113, 0, 0, 1664, 1665, 5, 108, 0, 0, 1665, 1666, 5, 100, 0, 0, 1666, 1747, 5, 113, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1669, 5, 115, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1747, 5, 113, 0, 0, 1671, 1672, 5, 111, 0, 0, 1672, 1673, 5, 114, 0, 0, 1673, 1747, 5, 113, 0, 0, 1674, 1675, 5, 114, 0, 0, 1675, 1676, 5, 111, 0, 0, 1676, 1677, 5, 108, 0, 0, 1677, 1747, 5, 113, 0, 0, 1678, 1679, 5, 114, 0, 0, 1679, 1680, 5, 111, 0, 0, 1680, 1681, 5, 114, 0, 0, 1681, 1747, 5, 113, 0, 0, 1682, 1683, 5, 115, 0, 0, 1683, 1684, 5, 98, 0, 0, 1684, 1685, 5, 99, 0, 0, 1685, 1747, 5, 113, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1747, 5, 113, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 120, 0, 0, 1691, 1747, 5, 121, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 116, 0, 0, 1694, 1747, 5, 48, 0, 0, 1695, 1696, 5, 115, 0, 0, 1696, 1697, 5, 116, 0, 0, 1697, 1747, 5, 49, 0, 0, 1698, 1699, 5, 115, 0, 0, 1699, 1700, 5, 116, 0, 0, 1700, 1747, 5, 50, 0, 0, 1701, 1702, 5, 115, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1747, 5, 121, 0, 0, 1704, 1705, 5, 116, 0, 0, 1705, 1706, 5, 109, 0, 0, 1706, 1747, 5, 97, 0, 0, 1707, 1708, 5, 98, 0, 0, 1708, 1709, 5, 115, 0, 0, 1709, 1747, 5, 114, 0, 0, 1710, 1711, 5, 116, 0, 0, 1711, 1712, 5, 97, 0, 0, 1712, 1747, 5, 109, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 115, 0, 0, 1715, 1747, 5, 108, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 108, 0, 0, 1718, 1747, 5, 97, 0, 0, 1719, 1720, 5, 99, 0, 0, 1720, 1721, 5, 108, 0, 0, 1721, 1747, 5, 120, 0, 0, 1722, 1723, 5, 99, 0, 0, 1723, 1724, 5, 108, 0, 0, 1724, 1747, 5, 121, 0, 0, 1725, 1726, 5, 99, 0, 0, 1726, 1727, 5, 115, 0, 0, 1727, 1747, 5, 104, 0, 0, 1728, 1729, 5, 115, 0, 0, 1729, 1730, 5, 101, 0, 0, 1730, 1747, 5, 116, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 115, 0, 0, 1733, 1747, 5, 116, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1747, 5, 97, 0, 0, 1737, 1738, 5, 116, 0, 0, 1738, 1739, 5, 100, 0, 0, 1739, 1747, 5, 100, 0, 0, 1740, 1741, 5, 116, 0, 0, 1741, 1742, 5, 105, 0, 0, 1742, 1747, 5, 110, 0, 0, 1743, 1744, 5, 116, 0, 0, 1744, 1745, 5, 105, 0, 0, 1745, 1747, 5, 105, 0, 0, 1746, 1139, 1, 0, 0, 0, 1746, 1142, 1, 0, 0, 0, 1746, 1145, 1, 0, 0, 0, 1746, 1148, 1, 0, 0, 0, 1746, 1151, 1, 0, 0, 0, 1746, 1154, 1, 0, 0, 0, 1746, 1157, 1, 0, 0, 0, 1746, 1160, 1, 0, 0, 0, 1746, 1163, 1, 0, 0, 0, 1746, 1166, 1, 0, 0, 0, 1746, 1169, 1, 0, 0, 0, 1746, 1172, 1, 0, 0, 0, 1746, 1175, 1, 0, 0, 0, 1746, 1178, 1, 0, 0, 0, 1746, 1181, 1, 0, 0, 0, 1746, 1184, 1, 0, 0, 0, 1746, 1187, 1, 0, 0, 0, 1746, 1190, 1, 0, 0, 0, 1746, 1193, 1, 0, 0, 0, 1746, 1196, 1, 0, 0, 0, 1746, 1199, 1, 0, 0, 0, 1746, 1202, 1, 0, 0, 0, 1746, 1205, 1, 0, 0, 0, 1746, 1208, 1, 0, 0, 0, 1746, 1211, 1, 0, 0, 0, 1746, 1214, 1, 0, 0, 0, 1746, 1217, 1, 0, 0, 0, 1746, 1220, 1, 0, 0, 0, 1746, 1223, 1, 0, 0, 0, 1746, 1226, 1, 0, 0, 0, 1746, 1229, 1, 0, 0, 0, 1746, 1232, 1, 0, 0, 0, 1746, 1235, 1, 0, 0, 0, 1746, 1238, 1, 0, 0, 0, 1746, 1241, 1, 0, 0, 0, 1746, 1244, 1, 0, 0, 0, 1746, 1247, 1, 0, 0, 0, 1746, 1250, 1, 0, 0, 0, 1746, 1253, 1, 0, 0, 0, 1746, 1256, 1, 0, 0, 0, 1746, 1259, 1, 0, 0, 0, 1746, 1262, 1, 0, 0, 0, 1746, 1265, 1, 0, 0, 0, 1746, 1268, 1, 0, 0, 0, 1746, 1271, 1, 0, 0, 0, 1746, 1274, 1, 0, 0, 0, 1746, 1277, 1, 0, 0, 0, 1746, 1280, 1, 0, 0, 0, 1746, 1283, 1, 0, 0, 0, 1746, 1286, 1, 0, 0, 0, 1746, 1289, 1, 0, 0, 0, 1746, 1292, 1, 0, 0, 0, 1746, 1295, 1, 0, 0, 0, 1746, 1298, 1, 0, 0, 0, 1746, 1301, 1, 0, 0, 0, 1746, 1304, 1, 0, 0, 0, 1746, 1307, 1, 0, 0, 0, 1746, 1310, 1, 0, 0, 0, 1746, 1313, 1, 0, 0, 0, 1746, 1316, 1, 0, 0, 0, 1746, 1319, 1, 0, 0, 0, 1746, 1322, 1, 0, 0, 0, 1746, 1325, 1, 0, 0, 0, 1746, 1328, 1, 0, 0, 0, 1746, 1331, 1, 0, 0, 0, 1746, 1334, 1, 0, 0, 0, 1746, 1337, 1, 0, 0, 0, 1746, 1340, 1, 0, 0, 0, 1746, 1343, 1, 0, 0, 0, 1746, 1346, 1, 0, 0, 0, 1746, 1349, 1, 0, 0, 0, 1746, 1352, 1, 0, 0, 0, 1746, 1355, 1, 0, 0, 0, 1746, 1358, 1, 0, 0, 0, 1746, 1361, 1, 0, 0, 0, 1746, 1365, 1, 0, 0, 0, 1746, 1369, 1, 0, 0, 0, 1746, 1373, 1, 0, 0, 0, 1746, 1377, 1, 0, 0, 0, 1746, 1381, 1, 0, 0, 0, 1746, 1385, 1, 0, 0, 0, 1746, 1389, 1, 0, 0, 0, 1746, 1393, 1, 0, 0, 0, 1746, 1397, 1, 0, 0, 0, 1746, 1401, 1, 0, 0, 0, 1746, 1405, 1, 0, 0, 0, 1746, 1409, 1, 0, 0, 0, 1746, 1413, 1, 0, 0, 0, 1746, 1417, 1, 0, 0, 0, 1746, 1421, 1, 0, 0, 0, 1746, 1425, 1, 0, 0, 0, 1746, 1428, 1, 0, 0, 0, 1746, 1431, 1, 0, 0, 0, 1746, 1434, 1, 0, 0, 0, 1746, 1437, 1, 0, 0, 0, 1746, 1440, 1, 0, 0, 0, 1746, 1444, 1, 0, 0, 0, 1746, 1448, 1, 0, 0, 0, 1746, 1452, 1, 0, 0, 0, 1746, 1456, 1, 0, 0, 0, 1746, 1460, 1, 0, 0, 0, 1746, 1464, 1, 0, 0, 0, 1746, 1468, 1, 0, 0, 0, 1746, 1472, 1, 0, 0, 0, 1746, 1476, 1, 0, 0, 0, 1746, 1480, 1, 0, 0, 0, 1746, 1484, 1, 0, 0, 0, 1746, 1488, 1, 0, 0, 0, 1746, 1492, 1, 0, 0, 0, 1746, 1496, 1, 0, 0, 0, 1746, 1500, 1, 0, 0, 0, 1746, 1504, 1, 0, 0, 0, 1746, 1507, 1, 0, 0, 0, 1746, 1510, 1, 0, 0, 0, 1746, 1513, 1, 0, 0, 0, 1746, 1516, 1, 0, 0, 0, 1746, 1519, 1, 0, 0, 0, 1746, 1522, 1, 0, 0, 0, 1746, 1525, 1, 0, 0, 0, 1746, 1528, 1, 0, 0, 0, 1746, 1532, 1, 0, 0, 0, 1746, 1535, 1, 0, 0, 0, 1746, 1538, 1, 0, 0, 0, 1746, 1542, 1, 0, 0, 0, 1746, 1545, 1, 0, 0, 0, 1746, 1548, 1, 0, 0, 0, 1746, 1551, 1, 0, 0, 0, 1746, 1554, 1, 0, 0, 0, 1746, 1558, 1, 0, 0, 0, 1746, 1561, 1, 0, 0, 0, 1746, 1564, 1, 0, 0, 0, 1746, 1567, 1, 0, 0, 0, 1746, 1571, 1, 0, 0, 0, 1746, 1574, 1, 0, 0, 0, 1746, 1578, 1, 0, 0, 0, 1746, 1581, 1, 0, 0, 0, 1746, 1585, 1, 0, 0, 0, 1746, 1589, 1, 0, 0, 0, 1746, 1592, 1, 0, 0, 0, 1746, 1596, 1, 0, 0, 0, 1746, 1599, 1, 0, 0, 0, 1746, 1602, 1, 0, 0, 0, 1746, 1605, 1, 0, 0, 0, 1746, 1609, 1, 0, 0, 0, 1746, 1612, 1, 0, 0, 0, 1746, 1615, 1, 0, 0, 0, 1746, 1618, 1, 0, 0, 0, 1746, 1622, 1, 0, 0, 0, 1746, 1625, 1, 0, 0, 0, 1746, 1628, 1, 0, 0, 0, 1746, 1631, 1, 0, 0, 0, 1746, 1635, 1, 0, 0, 0, 1746, 1639, 1, 0, 0, 0, 1746, 1643, 1, 0, 0, 0, 1746, 1647, 1, 0, 0, 0, 1746, 1651, 1, 0, 0, 0, 1746, 1654, 1, 0, 0, 0, 1746, 1657, 1, 0, 0, 0, 1746, 1661, 1, 0, 0, 0, 1746, 1664, 1, 0, 0, 0, 1746, 1667, 1, 0, 0, 0, 1746, 1671, 1, 0, 0, 0, 1746, 1674, 1, 0, 0, 0, 1746, 1678, 1, 0, 0, 0, 1746, 1682, 1, 0, 0, 0, 1746, 1686, 1, 0, 0, 0, 1746, 1689, 1, 0, 0, 0, 1746, 1692, 1, 0, 0, 0, 1746, 1695, 1, 0, 0, 0, 1746, 1698, 1, 0, 0, 0, 1746, 1701, 1, 0, 0, 0, 1746, 1704, 1, 0, 0, 0, 1746, 1707, 1, 0, 0, 0, 1746, 1710, 1, 0, 0, 0, 1746, 1713, 1, 0, 0, 0, 1746, 1716, 1, 0, 0, 0, 1746, 1719, 1, 0, 0, 0, 1746, 1722, 1, 0, 0, 0, 1746, 1725, 1, 0, 0, 0, 1746, 1728, 1, 0, 0, 0, 1746, 1731, 1, 0, 0, 0, 1746, 1734, 1, 0, 0, 0, 1746, 1737, 1, 0, 0, 0, 1746, 1740, 1, 0, 0, 0, 1746, 1743, 1, 0, 0, 0, 1747, 238, 1, 0, 0, 0, 1748, 1749, 5, 35, 0, 0, 1749, 240, 1, 0, 0, 0, 1750, 1751, 5, 58, 0, 0, 1751, 242, 1, 0, 0, 0, 1752, 1753, 5, 44, 0, 0, 1753, 244, 1, 0, 0, 0, 1754, 1755, 5, 40, 0, 0, 1755, 246, 1, 0, 0, 0, 1756, 1757, 5, 41, 0, 0, 1757, 248, 1, 0, 0, 0, 1758, 1759, 5, 91, 0, 0, 1759, 250, 1, 0, 0, 0, 1760, 1761, 5, 93, 0, 0, 1761, 252, 1, 0, 0, 0, 1762, 1763, 5, 46, 0, 0, 1763, 254, 1, 0, 0, 0, 1764, 1765, 5, 60, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 256, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 1769, 5, 62, 0, 0, 1769, 258, 1, 0, 0, 0, 1770, 1771, 5, 43, 0, 0, 1771, 260, 1, 0, 0, 0, 1772, 1773, 5, 45, 0, 0, 1773, 262, 1, 0, 0, 0, 1774, 1775, 5, 60, 0, 0, 1775, 264, 1, 0, 0, 0, 1776, 1777, 5, 62, 0, 0, 1777, 266, 1, 0, 0, 0, 1778, 1779, 5, 42, 0, 0, 1779, 268, 1, 0, 0, 0, 1780, 1781, 5, 47, 0, 0, 1781, 270, 1, 0, 0, 0, 1782, 1783, 5, 123, 0, 0, 1783, 1784, 6, 134, 7, 0, 1784, 272, 1, 0, 0, 0, 1785, 1786, 5, 125, 0, 0, 1786, 1787, 6, 135, 8, 0, 1787, 274, 1, 0, 0, 0, 1788, 1791, 3, 277, 137, 0, 1789, 1791, 3, 285, 141, 0, 1790, 1788, 1, 0, 0, 0, 1790, 1789, 1, 0, 0, 0, 1791, 276, 1, 0, 0, 0, 1792, 1796, 3, 279, 138, 0, 1793, 1796, 3, 281, 139, 0, 1794, 1796, 3, 283, 140, 0, 1795, 1792, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1795, 1794, 1, 0, 0, 0, 1796, 278, 1, 0, 0, 0, 1797, 1801, 5, 37, 0, 0, 1798, 1800, 3, 293, 145, 0, 1799, 1798, 1, 0, 0, 0, 1800, 1803, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1804, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1804, 1806, 5, 46, 0, 0, 1805, 1807, 3, 293, 145, 0, 1806, 1805, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1806, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 280, 1, 0, 0, 0, 1810, 1812, 3, 295, 146, 0, 1811, 1810, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1816, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1818, 5, 46, 0, 0, 1817, 1819, 3, 295, 146, 0, 1818, 1817, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 282, 1, 0, 0, 0, 1822, 1826, 5, 36, 0, 0, 1823, 1825, 3, 297, 147, 0, 1824, 1823, 1, 0, 0, 0, 1825, 1828, 1, 0, 0, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1829, 1, 0, 0, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1831, 5, 46, 0, 0, 1830, 1832, 3, 297, 147, 0, 1831, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 284, 1, 0, 0, 0, 1835, 1839, 3, 289, 143, 0, 1836, 1839, 3, 291, 144, 0, 1837, 1839, 3, 287, 142, 0, 1838, 1835, 1, 0, 0, 0, 1838, 1836, 1, 0, 0, 0, 1838, 1837, 1, 0, 0, 0, 1839, 286, 1, 0, 0, 0, 1840, 1842, 5, 37, 0, 0, 1841, 1843, 3, 293, 145, 0, 1842, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1842, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 288, 1, 0, 0, 0, 1846, 1848, 3, 295, 146, 0, 1847, 1846, 1, 0, 0, 0, 1848, 1849, 1, 0, 0, 0, 1849, 1847, 1, 0, 0, 0, 1849, 1850, 1, 0, 0, 0, 1850, 290, 1, 0, 0, 0, 1851, 1853, 5, 36, 0, 0, 1852, 1854, 3, 297, 147, 0, 1853, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1853, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 292, 1, 0, 0, 0, 1857, 1858, 7, 4, 0, 0, 1858, 294, 1, 0, 0, 0, 1859, 1860, 7, 5, 0, 0, 1860, 296, 1, 0, 0, 0, 1861, 1862, 7, 6, 0, 0, 1862, 298, 1, 0, 0, 0, 1863, 1867, 5, 39, 0, 0, 1864, 1865, 5, 92, 0, 0, 1865, 1868, 7, 18, 0, 0, 1866, 1868, 8, 15, 0, 0, 1867, 1864, 1, 0, 0, 0, 1867, 1866, 1, 0, 0, 0, 1868, 1869, 1, 0, 0, 0, 1869, 1870, 5, 39, 0, 0, 1870, 300, 1, 0, 0, 0, 1871, 1873, 3, 303, 150, 0, 1872, 1874, 7, 19, 0, 0, 1873, 1872, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 302, 1, 0, 0, 0, 1877, 1881, 5, 33, 0, 0, 1878, 1880, 3, 309, 153, 0, 1879, 1878, 1, 0, 0, 0, 1880, 1883, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1881, 1882, 1, 0, 0, 0, 1882, 304, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1884, 1888, 3, 307, 152, 0, 1885, 1887, 3, 309, 153, 0, 1886, 1885, 1, 0, 0, 0, 1887, 1890, 1, 0, 0, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 306, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1892, 7, 7, 0, 0, 1892, 308, 1, 0, 0, 0, 1893, 1894, 7, 8, 0, 0, 1894, 310, 1, 0, 0, 0, 1895, 1896, 5, 64, 0, 0, 1896, 1897, 3, 305, 151, 0, 1897, 312, 1, 0, 0, 0, 1898, 1900, 7, 16, 0, 0, 1899, 1898, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1901, 1899, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1904, 6, 155, 5, 0, 1904, 314, 1, 0, 0, 0, 1905, 1906, 5, 47, 0, 0, 1906, 1907, 5, 47, 0, 0, 1907, 1911, 1, 0, 0, 0, 1908, 1910, 8, 17, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 1913, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1912, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1915, 6, 156, 6, 0, 1915, 316, 1, 0, 0, 0, 1916, 1917, 5, 47, 0, 0, 1917, 1918, 5, 42, 0, 0, 1918, 1922, 1, 0, 0, 0, 1919, 1921, 9, 0, 0, 0, 1920, 1919, 1, 0, 0, 0, 1921, 1924, 1, 0, 0, 0, 1922, 1923, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1923, 1925, 1, 0, 0, 0, 1924, 1922, 1, 0, 0, 0, 1925, 1926, 5, 42, 0, 0, 1926, 1927, 5, 47, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1929, 6, 157, 6, 0, 1929, 318, 1, 0, 0, 0, 1930, 1932, 5, 60, 0, 0, 1931, 1933, 7, 20, 0, 0, 1932, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1932, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 1937, 5, 62, 0, 0, 1937, 1938, 6, 158, 9, 0, 1938, 320, 1, 0, 0, 0, 1939, 1945, 5, 34, 0, 0, 1940, 1941, 5, 92, 0, 0, 1941, 1944, 5, 34, 0, 0, 1942, 1944, 8, 9, 0, 0, 1943, 1940, 1, 0, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1947, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1948, 1, 0, 0, 0, 1947, 1945, 1, 0, 0, 0, 1948, 1949, 5, 34, 0, 0, 1949, 1950, 6, 159, 10, 0, 1950, 322, 1, 0, 0, 0, 1951, 1953, 7, 16, 0, 0, 1952, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1957, 6, 160, 5, 0, 1957, 324, 1, 0, 0, 0, 1958, 1959, 5, 47, 0, 0, 1959, 1960, 5, 47, 0, 0, 1960, 1964, 1, 0, 0, 0, 1961, 1963, 8, 17, 0, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1966, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1968, 6, 161, 6, 0, 1968, 326, 1, 0, 0, 0, 1969, 1970, 5, 47, 0, 0, 1970, 1971, 5, 42, 0, 0, 1971, 1975, 1, 0, 0, 0, 1972, 1974, 9, 0, 0, 0, 1973, 1972, 1, 0, 0, 0, 1974, 1977, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1975, 1973, 1, 0, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 5, 42, 0, 0, 1979, 1980, 5, 47, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1982, 6, 162, 6, 0, 1982, 328, 1, 0, 0, 0, 67, 0, 1, 2, 438, 636, 813, 824, 832, 880, 942, 947, 954, 959, 966, 971, 978, 985, 990, 997, 1002, 1007, 1014, 1020, 1022, 1027, 1034, 1039, 1051, 1064, 1066, 1071, 1075, 1077, 1080, 1086, 1089, 1094, 1097, 1104, 1114, 1125, 1746, 1790, 1795, 1801, 1808, 1813, 1820, 1826, 1833, 1838, 1844, 1849, 1855, 1867, 1875, 1881, 1888, 1901, 1911, 1922, 1934, 1943, 1945, 1954, 1964, 1975, 11, 1, 0, 0, 1, 67, 1, 1, 81, 2, 1, 82, 3, 1, 108, 4, 0, 1, 0, 0, 2, 0, 1, 134, 5, 1, 135, 6, 1, 158, 7, 1, 159, 8] \ No newline at end of file diff --git a/gen/KickCLexer.java b/gen/KickCLexer.java deleted file mode 100644 index 4bfb13a32..000000000 --- a/gen/KickCLexer.java +++ /dev/null @@ -1,1602 +0,0 @@ -// Generated from D:/Users/svenv/OneDrive/Documents/GitHub/kickc/src/main/antlr4/dk/camelot64/kickc/parser\KickCLexer.g4 by ANTLR 4.10.1 - - -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) -public class KickCLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - TYPEDEFNAME=1, CURLY_BEGIN=2, CURLY_END=3, BRACKET_BEGIN=4, BRACKET_END=5, - PAR_BEGIN=6, PAR_END=7, SEMICOLON=8, COLON=9, COMMA=10, RANGE=11, PARAM_LIST=12, - CONDITION=13, DOT=14, ARROW=15, PLUS=16, MINUS=17, ASTERISK=18, DIVIDE=19, - MODULO=20, INC=21, DEC=22, AND=23, BIT_NOT=24, BIT_XOR=25, BIT_OR=26, - SHIFT_LEFT=27, SHIFT_RIGHT=28, EQUAL=29, NOT_EQUAL=30, LESS_THAN=31, LESS_THAN_EQUAL=32, - GREATER_THAN_EQUAL=33, GREATER_THAN=34, LOGIC_AND=35, LOGIC_OR=36, ASSIGN=37, - ASSIGN_COMPOUND=38, TYPEDEF=39, CONST=40, EXTERN=41, EXPORT=42, ALIGN=43, - INLINE=44, VOLATILE=45, STATIC=46, INTERRUPT=47, REGISTER=48, LOCAL_RESERVE=49, - ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, NEAR=54, - FORM_SSA=55, FORM_MA=56, INTRINSIC=57, CALLINGCONVENTION=58, IF=59, ELSE=60, - WHILE=61, DO=62, FOR=63, SWITCH=64, RETURN=65, BREAK=66, CONTINUE=67, - GOTO=68, ASM=69, DEFAULT=70, CASE=71, STRUCT=72, UNION=73, ENUM=74, SIZEOF=75, - TYPEID=76, DEFINED=77, KICKASM=78, LOGIC_NOT=79, SIMPLETYPE=80, BOOLEAN=81, - KICKASM_BODY=82, IMPORT=83, INCLUDE=84, PRAGMA=85, DEFINE=86, DEFINE_CONTINUE=87, - UNDEF=88, IFDEF=89, IFNDEF=90, IFIF=91, ELIF=92, IFELSE=93, ENDIF=94, - ERROR=95, TOKEN_STRINGIZE=96, TOKEN_MERGE=97, NUMBER=98, NUMFLOAT=99, - BINFLOAT=100, DECFLOAT=101, HEXFLOAT=102, NUMINT=103, BININTEGER=104, - DECINTEGER=105, HEXINTEGER=106, NAME=107, STRING=108, CHAR=109, WS=110, - COMMENT_LINE=111, COMMENT_BLOCK=112, ASM_BYTE=113, ASM_MNEMONIC=114, ASM_IMM=115, - ASM_COLON=116, ASM_COMMA=117, ASM_PAR_BEGIN=118, ASM_PAR_END=119, ASM_BRACKET_BEGIN=120, - ASM_BRACKET_END=121, ASM_DOT=122, ASM_SHIFT_LEFT=123, ASM_SHIFT_RIGHT=124, - ASM_PLUS=125, ASM_MINUS=126, ASM_LESS_THAN=127, ASM_GREATER_THAN=128, - ASM_MULTIPLY=129, ASM_DIVIDE=130, ASM_CURLY_BEGIN=131, ASM_CURLY_END=132, - ASM_NUMBER=133, ASM_NUMFLOAT=134, ASM_BINFLOAT=135, ASM_DECFLOAT=136, - ASM_HEXFLOAT=137, ASM_NUMINT=138, ASM_BININTEGER=139, ASM_DECINTEGER=140, - ASM_HEXINTEGER=141, ASM_CHAR=142, ASM_MULTI_REL=143, ASM_MULTI_NAME=144, - ASM_NAME=145, ASM_TAG=146, ASM_WS=147, ASM_COMMENT_LINE=148, ASM_COMMENT_BLOCK=149, - IMPORT_SYSTEMFILE=150, IMPORT_LOCALFILE=151, IMPORT_WS=152, IMPORT_COMMENT_LINE=153, - IMPORT_COMMENT_BLOCK=154; - public static final int - ASM_MODE=1, IMPORT_MODE=2; - public static String[] channelNames = { - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" - }; - - public static String[] modeNames = { - "DEFAULT_MODE", "ASM_MODE", "IMPORT_MODE" - }; - - private static String[] makeRuleNames() { - return new String[] { - "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", "PAR_BEGIN", - "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", "CONDITION", - "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", "INC", - "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", - "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", - "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", - "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", - "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", - "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", - "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", - "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", - "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", - "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", "STRING", - "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", - "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", - "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_BINDIGIT", - "ASM_DECDIGIT", "ASM_HEXDIGIT", "ASM_CHAR", "ASM_MULTI_REL", "ASM_MULTI_NAME", - "ASM_NAME", "ASM_NAME_START", "ASM_NAME_CHAR", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", - "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", - "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" - }; - } - public static final String[] ruleNames = makeRuleNames(); - - private static String[] makeLiteralNames() { - return new String[] { - null, null, null, null, null, null, null, null, "';'", null, null, "'..'", - "'...'", "'?'", null, "'->'", null, null, null, null, "'%'", "'++'", - "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, - "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", - "'extern'", "'__export'", "'__align'", "'inline'", "'volatile'", "'static'", - "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", - "'__mem'", "'__far'", "'__near'", "'__ssa'", "'__ma'", "'__intrinsic'", - null, "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", - "'break'", "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", - "'union'", "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", - "'!'", null, null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", - null, "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", - "'#endif'", "'#error'", null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, "'.byte'", null, - "'#'" - }; - } - private static final String[] _LITERAL_NAMES = makeLiteralNames(); - private static String[] makeSymbolicNames() { - return new String[] { - null, "TYPEDEFNAME", "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", - "PAR_BEGIN", "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", - "CONDITION", "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", - "INC", "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", - "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", - "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", - "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", - "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", - "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", - "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", - "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", - "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", - "STRING", "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", - "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", - "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL", - "ASM_MULTI_NAME", "ASM_NAME", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", - "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", - "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" - }; - } - private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); - public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); - - /** - * @deprecated Use {@link #VOCABULARY} instead. - */ - @Deprecated - public static final String[] tokenNames; - static { - tokenNames = new String[_SYMBOLIC_NAMES.length]; - for (int i = 0; i < tokenNames.length; i++) { - tokenNames[i] = VOCABULARY.getLiteralName(i); - if (tokenNames[i] == null) { - tokenNames[i] = VOCABULARY.getSymbolicName(i); - } - - if (tokenNames[i] == null) { - tokenNames[i] = ""; - } - } - } - - @Override - @Deprecated - public String[] getTokenNames() { - return tokenNames; - } - - @Override - - public Vocabulary getVocabulary() { - return VOCABULARY; - } - - - - /** The C-Parser. Used for importing C-files and communicating with the Parser about typedefs. */ - CParser cParser; - /** True if the next CURLY starts ASM_MODE */ - boolean asmEnter = false; - /** Counts the nested curlies inside ASM_MODE to determine when to exit ASM_MODE */ - int asmCurlyCount = 0; - - public KickCLexer(CharStream input, CParser cParser) { - this(input); - this.cParser = cParser; - } - - - public KickCLexer(CharStream input) { - super(input); - _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - @Override - public String getGrammarFileName() { return "KickCLexer.g4"; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public String[] getChannelNames() { return channelNames; } - - @Override - public String[] getModeNames() { return modeNames; } - - @Override - public ATN getATN() { return _ATN; } - - @Override - public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { - switch (ruleIndex) { - case 0: - CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); - break; - case 67: - ASM_action((RuleContext)_localctx, actionIndex); - break; - case 81: - IMPORT_action((RuleContext)_localctx, actionIndex); - break; - case 82: - INCLUDE_action((RuleContext)_localctx, actionIndex); - break; - case 108: - NAME_action((RuleContext)_localctx, actionIndex); - break; - case 134: - ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); - break; - case 135: - ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); - break; - case 158: - IMPORT_SYSTEMFILE_action((RuleContext)_localctx, actionIndex); - break; - case 159: - IMPORT_LOCALFILE_action((RuleContext)_localctx, actionIndex); - break; - } - } - private void CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 0: - if(asmEnter) { pushMode(ASM_MODE); asmEnter=false; } - break; - } - } - private void ASM_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 1: - asmEnter=true; - break; - } - } - private void IMPORT_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 2: - pushMode(IMPORT_MODE); - break; - } - } - private void INCLUDE_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 3: - pushMode(IMPORT_MODE); - break; - } - } - private void NAME_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 4: - if(cParser.isTypedef(getText())) setType(TYPEDEFNAME); - break; - } - } - private void ASM_CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 5: - asmCurlyCount++; - break; - } - } - private void ASM_CURLY_END_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 6: - asmCurlyCount--; if(asmCurlyCount<0) { popMode(); } - break; - } - } - private void IMPORT_SYSTEMFILE_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 7: - popMode(); - break; - } - } - private void IMPORT_LOCALFILE_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 8: - popMode(); - break; - } - } - - public static final String _serializedATN = - "\u0004\u0000\u009a\u07bf\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ - "\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007"+ - "\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007"+ - "\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b"+ - "\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007"+ - "\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002"+ - "\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002"+ - "\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002"+ - "\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002"+ - "\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002"+ - "\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002"+ - "\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#"+ - "\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ - "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ - "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+ - "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ - "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ - "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ - "A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+ - "F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+ - "K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+ - "P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+ - "U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+ - "Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+ - "_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002"+ - "d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002"+ - "i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002"+ - "n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002"+ - "s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002"+ - "x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007{\u0002|\u0007|\u0002"+ - "}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002\u0080\u0007\u0080"+ - "\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002\u0083\u0007\u0083"+ - "\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002\u0086\u0007\u0086"+ - "\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002\u0089\u0007\u0089"+ - "\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b\u0002\u008c\u0007\u008c"+ - "\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e\u0002\u008f\u0007\u008f"+ - "\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091\u0002\u0092\u0007\u0092"+ - "\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094\u0002\u0095\u0007\u0095"+ - "\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097\u0002\u0098\u0007\u0098"+ - "\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007\u009b"+ - "\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007\u009e"+ - "\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007\u00a1"+ - "\u0002\u00a2\u0007\u00a2\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ - "\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004"+ - "\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007"+ - "\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+ - "\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ - "\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ - "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ - "\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+ - "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001"+ - "\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u01b7\b$\u0001%\u0001%\u0001"+ - "%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001"+ - "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ - "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001"+ - "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ - "+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ - "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+ - "-\u0001-\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001"+ - ".\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ - "/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ - "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+ - "2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u0001"+ - "3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ - "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00038\u027d\b8\u00019\u00019\u00019\u0001"+ - ":\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ - ";\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001"+ - ">\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001"+ - "?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001"+ - "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001"+ - "E\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001"+ - "G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001"+ - "I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001"+ - "J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001"+ - "M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0003N\u032e\bN\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ - "O\u0001O\u0001O\u0003O\u0339\bO\u0001P\u0001P\u0001P\u0001P\u0005P\u033f"+ - "\bP\nP\fP\u0342\tP\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ - "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001"+ - "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ - "S\u0001S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ - "T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001U\u0003U\u0371\bU\u0001"+ - "V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001"+ - "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ - "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ - "Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001"+ - "\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001]\u0001]"+ - "\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001`\u0001"+ - "`\u0003`\u03af\b`\u0001a\u0001a\u0001a\u0003a\u03b4\ba\u0001b\u0001b\u0001"+ - "b\u0001b\u0001b\u0003b\u03bb\bb\u0001b\u0005b\u03be\bb\nb\fb\u03c1\tb"+ - "\u0001b\u0001b\u0004b\u03c5\bb\u000bb\fb\u03c6\u0001c\u0005c\u03ca\bc"+ - "\nc\fc\u03cd\tc\u0001c\u0001c\u0004c\u03d1\bc\u000bc\fc\u03d2\u0001d\u0001"+ - "d\u0001d\u0001d\u0001d\u0003d\u03da\bd\u0001d\u0005d\u03dd\bd\nd\fd\u03e0"+ - "\td\u0001d\u0001d\u0004d\u03e4\bd\u000bd\fd\u03e5\u0001e\u0001e\u0001"+ - "e\u0003e\u03eb\be\u0001e\u0001e\u0001e\u0003e\u03f0\be\u0001f\u0001f\u0001"+ - "f\u0004f\u03f5\bf\u000bf\ff\u03f6\u0001f\u0001f\u0004f\u03fb\bf\u000b"+ - "f\ff\u03fc\u0003f\u03ff\bf\u0001g\u0004g\u0402\bg\u000bg\fg\u0403\u0001"+ - "h\u0001h\u0001h\u0001h\u0001h\u0003h\u040b\bh\u0001h\u0004h\u040e\bh\u000b"+ - "h\fh\u040f\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0001l\u0001l\u0005"+ - "l\u041a\bl\nl\fl\u041d\tl\u0001l\u0001l\u0001m\u0001m\u0001n\u0001n\u0001"+ - "o\u0001o\u0001o\u0001o\u0005o\u0429\bo\no\fo\u042c\to\u0001o\u0001o\u0003"+ - "o\u0430\bo\u0001o\u0001o\u0003o\u0434\bo\u0003o\u0436\bo\u0001o\u0003"+ - "o\u0439\bo\u0001p\u0001p\u0001p\u0001p\u0003p\u043f\bp\u0001p\u0003p\u0442"+ - "\bp\u0001p\u0001p\u0001p\u0003p\u0447\bp\u0001p\u0003p\u044a\bp\u0001"+ - "p\u0001p\u0001q\u0004q\u044f\bq\u000bq\fq\u0450\u0001q\u0001q\u0001r\u0001"+ - "r\u0001r\u0001r\u0005r\u0459\br\nr\fr\u045c\tr\u0001r\u0001r\u0001s\u0001"+ - "s\u0001s\u0001s\u0005s\u0464\bs\ns\fs\u0467\ts\u0001s\u0001s\u0001s\u0001"+ - "s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0003u\u06d3\bu\u0001v\u0001v\u0001w\u0001"+ - "w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001{\u0001|\u0001"+ - "|\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001\u007f"+ - "\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ - "\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ - "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0001\u0087"+ - "\u0001\u0088\u0001\u0088\u0003\u0088\u06ff\b\u0088\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0003\u0089\u0704\b\u0089\u0001\u008a\u0001\u008a\u0005\u008a"+ - "\u0708\b\u008a\n\u008a\f\u008a\u070b\t\u008a\u0001\u008a\u0001\u008a\u0004"+ - "\u008a\u070f\b\u008a\u000b\u008a\f\u008a\u0710\u0001\u008b\u0005\u008b"+ - "\u0714\b\u008b\n\u008b\f\u008b\u0717\t\u008b\u0001\u008b\u0001\u008b\u0004"+ - "\u008b\u071b\b\u008b\u000b\u008b\f\u008b\u071c\u0001\u008c\u0001\u008c"+ - "\u0005\u008c\u0721\b\u008c\n\u008c\f\u008c\u0724\t\u008c\u0001\u008c\u0001"+ - "\u008c\u0004\u008c\u0728\b\u008c\u000b\u008c\f\u008c\u0729\u0001\u008d"+ - "\u0001\u008d\u0001\u008d\u0003\u008d\u072f\b\u008d\u0001\u008e\u0001\u008e"+ - "\u0004\u008e\u0733\b\u008e\u000b\u008e\f\u008e\u0734\u0001\u008f\u0004"+ - "\u008f\u0738\b\u008f\u000b\u008f\f\u008f\u0739\u0001\u0090\u0001\u0090"+ - "\u0004\u0090\u073e\b\u0090\u000b\u0090\f\u0090\u073f\u0001\u0091\u0001"+ - "\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001"+ - "\u0094\u0001\u0094\u0001\u0094\u0003\u0094\u074c\b\u0094\u0001\u0094\u0001"+ - "\u0094\u0001\u0095\u0001\u0095\u0004\u0095\u0752\b\u0095\u000b\u0095\f"+ - "\u0095\u0753\u0001\u0096\u0001\u0096\u0005\u0096\u0758\b\u0096\n\u0096"+ - "\f\u0096\u075b\t\u0096\u0001\u0097\u0001\u0097\u0005\u0097\u075f\b\u0097"+ - "\n\u0097\f\u0097\u0762\t\u0097\u0001\u0098\u0001\u0098\u0001\u0099\u0001"+ - "\u0099\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009b\u0004\u009b\u076c"+ - "\b\u009b\u000b\u009b\f\u009b\u076d\u0001\u009b\u0001\u009b\u0001\u009c"+ - "\u0001\u009c\u0001\u009c\u0001\u009c\u0005\u009c\u0776\b\u009c\n\u009c"+ - "\f\u009c\u0779\t\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ - "\u0001\u009d\u0001\u009d\u0005\u009d\u0781\b\u009d\n\u009d\f\u009d\u0784"+ - "\t\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001"+ - "\u009e\u0001\u009e\u0004\u009e\u078d\b\u009e\u000b\u009e\f\u009e\u078e"+ - "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f\u0001\u009f"+ - "\u0001\u009f\u0005\u009f\u0798\b\u009f\n\u009f\f\u009f\u079b\t\u009f\u0001"+ - "\u009f\u0001\u009f\u0001\u009f\u0001\u00a0\u0004\u00a0\u07a1\b\u00a0\u000b"+ - "\u00a0\f\u00a0\u07a2\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a1\u0005\u00a1\u07ab\b\u00a1\n\u00a1\f\u00a1\u07ae\t\u00a1"+ - "\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0005\u00a2\u07b6\b\u00a2\n\u00a2\f\u00a2\u07b9\t\u00a2\u0001\u00a2\u0001"+ - "\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0004\u0340\u0465\u0782\u07b7"+ - "\u0000\u00a3\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r"+ - "\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ - "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ - "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ - "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ - "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ - "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ - "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ - "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ - "j\u00d5\u0000\u00d7\u0000\u00d9\u0000\u00dbk\u00dd\u0000\u00df\u0000\u00e1"+ - "l\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ - "v\u00f7w\u00f9x\u00fby\u00fdz\u00ff{\u0101|\u0103}\u0105~\u0107\u007f"+ - "\u0109\u0080\u010b\u0081\u010d\u0082\u010f\u0083\u0111\u0084\u0113\u0085"+ - "\u0115\u0086\u0117\u0087\u0119\u0088\u011b\u0089\u011d\u008a\u011f\u008b"+ - "\u0121\u008c\u0123\u008d\u0125\u0000\u0127\u0000\u0129\u0000\u012b\u008e"+ - "\u012d\u008f\u012f\u0090\u0131\u0091\u0133\u0000\u0135\u0000\u0137\u0092"+ - "\u0139\u0093\u013b\u0094\u013d\u0095\u013f\u0096\u0141\u0097\u0143\u0098"+ - "\u0145\u0099\u0147\u009a\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSU"+ - "Ussuu\n\u0000BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb"+ - "\u0001\u000001\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004"+ - "\u000009AZ__az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000"+ - "aammsu\u0007\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'"+ - "\u0004\u0000\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\""+ - "\'\'ffnnrr\u0002\u0000++--\u0005\u0000-9AZ\\\\__az\u08c4\u0000\u0003\u0001"+ - "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ - "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ - "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ - "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ - "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ - "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ - "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ - "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ - "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ - "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ - "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ - "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ - "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ - "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ - "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ - "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ - "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ - "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ - "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ - "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ - "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ - "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ - "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ - "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ - "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ - "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ - "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ - "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ - "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ - "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ - "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ - "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ - "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ - "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ - "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ - "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ - "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ - "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ - "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ - "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ - "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ - "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ - "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ - "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ - "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ - "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ - "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ - "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ - "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00db\u0001"+ - "\u0000\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001"+ - "\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001"+ - "\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001"+ - "\u0000\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001"+ - "\u0000\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001"+ - "\u0000\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001"+ - "\u0000\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001"+ - "\u0000\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001"+ - "\u0000\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001"+ - "\u0000\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001"+ - "\u0000\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001"+ - "\u0000\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001"+ - "\u0000\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001"+ - "\u0000\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001"+ - "\u0000\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001"+ - "\u0000\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001"+ - "\u0000\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0123\u0001"+ - "\u0000\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001"+ - "\u0000\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0131\u0001"+ - "\u0000\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001"+ - "\u0000\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0001\u013d\u0001"+ - "\u0000\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001"+ - "\u0000\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001"+ - "\u0000\u0000\u0000\u0002\u0147\u0001\u0000\u0000\u0000\u0003\u0149\u0001"+ - "\u0000\u0000\u0000\u0005\u014c\u0001\u0000\u0000\u0000\u0007\u014e\u0001"+ - "\u0000\u0000\u0000\t\u0150\u0001\u0000\u0000\u0000\u000b\u0152\u0001\u0000"+ - "\u0000\u0000\r\u0154\u0001\u0000\u0000\u0000\u000f\u0156\u0001\u0000\u0000"+ - "\u0000\u0011\u0158\u0001\u0000\u0000\u0000\u0013\u015a\u0001\u0000\u0000"+ - "\u0000\u0015\u015c\u0001\u0000\u0000\u0000\u0017\u015f\u0001\u0000\u0000"+ - "\u0000\u0019\u0163\u0001\u0000\u0000\u0000\u001b\u0165\u0001\u0000\u0000"+ - "\u0000\u001d\u0167\u0001\u0000\u0000\u0000\u001f\u016a\u0001\u0000\u0000"+ - "\u0000!\u016c\u0001\u0000\u0000\u0000#\u016e\u0001\u0000\u0000\u0000%"+ - "\u0170\u0001\u0000\u0000\u0000\'\u0172\u0001\u0000\u0000\u0000)\u0174"+ - "\u0001\u0000\u0000\u0000+\u0177\u0001\u0000\u0000\u0000-\u017a\u0001\u0000"+ - "\u0000\u0000/\u017c\u0001\u0000\u0000\u00001\u017e\u0001\u0000\u0000\u0000"+ - "3\u0180\u0001\u0000\u0000\u00005\u0182\u0001\u0000\u0000\u00007\u0185"+ - "\u0001\u0000\u0000\u00009\u0188\u0001\u0000\u0000\u0000;\u018b\u0001\u0000"+ - "\u0000\u0000=\u018e\u0001\u0000\u0000\u0000?\u0190\u0001\u0000\u0000\u0000"+ - "A\u0193\u0001\u0000\u0000\u0000C\u0196\u0001\u0000\u0000\u0000E\u0198"+ - "\u0001\u0000\u0000\u0000G\u019b\u0001\u0000\u0000\u0000I\u019e\u0001\u0000"+ - "\u0000\u0000K\u01b6\u0001\u0000\u0000\u0000M\u01b8\u0001\u0000\u0000\u0000"+ - "O\u01c0\u0001\u0000\u0000\u0000Q\u01c6\u0001\u0000\u0000\u0000S\u01cd"+ - "\u0001\u0000\u0000\u0000U\u01d6\u0001\u0000\u0000\u0000W\u01de\u0001\u0000"+ - "\u0000\u0000Y\u01e5\u0001\u0000\u0000\u0000[\u01ee\u0001\u0000\u0000\u0000"+ - "]\u01f5\u0001\u0000\u0000\u0000_\u0201\u0001\u0000\u0000\u0000a\u020a"+ - "\u0001\u0000\u0000\u0000c\u0217\u0001\u0000\u0000\u0000e\u0221\u0001\u0000"+ - "\u0000\u0000g\u0226\u0001\u0000\u0000\u0000i\u022c\u0001\u0000\u0000\u0000"+ - "k\u0232\u0001\u0000\u0000\u0000m\u0239\u0001\u0000\u0000\u0000o\u023f"+ - "\u0001\u0000\u0000\u0000q\u0244\u0001\u0000\u0000\u0000s\u027c\u0001\u0000"+ - "\u0000\u0000u\u027e\u0001\u0000\u0000\u0000w\u0281\u0001\u0000\u0000\u0000"+ - "y\u0286\u0001\u0000\u0000\u0000{\u028c\u0001\u0000\u0000\u0000}\u028f"+ - "\u0001\u0000\u0000\u0000\u007f\u0293\u0001\u0000\u0000\u0000\u0081\u029a"+ - "\u0001\u0000\u0000\u0000\u0083\u02a1\u0001\u0000\u0000\u0000\u0085\u02a7"+ - "\u0001\u0000\u0000\u0000\u0087\u02b0\u0001\u0000\u0000\u0000\u0089\u02b5"+ - "\u0001\u0000\u0000\u0000\u008b\u02bb\u0001\u0000\u0000\u0000\u008d\u02c3"+ - "\u0001\u0000\u0000\u0000\u008f\u02c8\u0001\u0000\u0000\u0000\u0091\u02cf"+ - "\u0001\u0000\u0000\u0000\u0093\u02d5\u0001\u0000\u0000\u0000\u0095\u02da"+ - "\u0001\u0000\u0000\u0000\u0097\u02e1\u0001\u0000\u0000\u0000\u0099\u02e8"+ - "\u0001\u0000\u0000\u0000\u009b\u02f0\u0001\u0000\u0000\u0000\u009d\u02f8"+ - "\u0001\u0000\u0000\u0000\u009f\u032d\u0001\u0000\u0000\u0000\u00a1\u0338"+ - "\u0001\u0000\u0000\u0000\u00a3\u033a\u0001\u0000\u0000\u0000\u00a5\u0346"+ - "\u0001\u0000\u0000\u0000\u00a7\u0350\u0001\u0000\u0000\u0000\u00a9\u035b"+ - "\u0001\u0000\u0000\u0000\u00ab\u0363\u0001\u0000\u0000\u0000\u00ad\u0370"+ - "\u0001\u0000\u0000\u0000\u00af\u0372\u0001\u0000\u0000\u0000\u00b1\u0379"+ - "\u0001\u0000\u0000\u0000\u00b3\u0380\u0001\u0000\u0000\u0000\u00b5\u0388"+ - "\u0001\u0000\u0000\u0000\u00b7\u038c\u0001\u0000\u0000\u0000\u00b9\u0392"+ - "\u0001\u0000\u0000\u0000\u00bb\u0398\u0001\u0000\u0000\u0000\u00bd\u039f"+ - "\u0001\u0000\u0000\u0000\u00bf\u03a6\u0001\u0000\u0000\u0000\u00c1\u03a9"+ - "\u0001\u0000\u0000\u0000\u00c3\u03ae\u0001\u0000\u0000\u0000\u00c5\u03b3"+ - "\u0001\u0000\u0000\u0000\u00c7\u03ba\u0001\u0000\u0000\u0000\u00c9\u03cb"+ - "\u0001\u0000\u0000\u0000\u00cb\u03d9\u0001\u0000\u0000\u0000\u00cd\u03ea"+ - "\u0001\u0000\u0000\u0000\u00cf\u03fe\u0001\u0000\u0000\u0000\u00d1\u0401"+ - "\u0001\u0000\u0000\u0000\u00d3\u040a\u0001\u0000\u0000\u0000\u00d5\u0411"+ - "\u0001\u0000\u0000\u0000\u00d7\u0413\u0001\u0000\u0000\u0000\u00d9\u0415"+ - "\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000\u0000\u0000\u00dd\u0420"+ - "\u0001\u0000\u0000\u0000\u00df\u0422\u0001\u0000\u0000\u0000\u00e1\u0424"+ - "\u0001\u0000\u0000\u0000\u00e3\u043a\u0001\u0000\u0000\u0000\u00e5\u044e"+ - "\u0001\u0000\u0000\u0000\u00e7\u0454\u0001\u0000\u0000\u0000\u00e9\u045f"+ - "\u0001\u0000\u0000\u0000\u00eb\u046d\u0001\u0000\u0000\u0000\u00ed\u06d2"+ - "\u0001\u0000\u0000\u0000\u00ef\u06d4\u0001\u0000\u0000\u0000\u00f1\u06d6"+ - "\u0001\u0000\u0000\u0000\u00f3\u06d8\u0001\u0000\u0000\u0000\u00f5\u06da"+ - "\u0001\u0000\u0000\u0000\u00f7\u06dc\u0001\u0000\u0000\u0000\u00f9\u06de"+ - "\u0001\u0000\u0000\u0000\u00fb\u06e0\u0001\u0000\u0000\u0000\u00fd\u06e2"+ - "\u0001\u0000\u0000\u0000\u00ff\u06e4\u0001\u0000\u0000\u0000\u0101\u06e7"+ - "\u0001\u0000\u0000\u0000\u0103\u06ea\u0001\u0000\u0000\u0000\u0105\u06ec"+ - "\u0001\u0000\u0000\u0000\u0107\u06ee\u0001\u0000\u0000\u0000\u0109\u06f0"+ - "\u0001\u0000\u0000\u0000\u010b\u06f2\u0001\u0000\u0000\u0000\u010d\u06f4"+ - "\u0001\u0000\u0000\u0000\u010f\u06f6\u0001\u0000\u0000\u0000\u0111\u06f9"+ - "\u0001\u0000\u0000\u0000\u0113\u06fe\u0001\u0000\u0000\u0000\u0115\u0703"+ - "\u0001\u0000\u0000\u0000\u0117\u0705\u0001\u0000\u0000\u0000\u0119\u0715"+ - "\u0001\u0000\u0000\u0000\u011b\u071e\u0001\u0000\u0000\u0000\u011d\u072e"+ - "\u0001\u0000\u0000\u0000\u011f\u0730\u0001\u0000\u0000\u0000\u0121\u0737"+ - "\u0001\u0000\u0000\u0000\u0123\u073b\u0001\u0000\u0000\u0000\u0125\u0741"+ - "\u0001\u0000\u0000\u0000\u0127\u0743\u0001\u0000\u0000\u0000\u0129\u0745"+ - "\u0001\u0000\u0000\u0000\u012b\u0747\u0001\u0000\u0000\u0000\u012d\u074f"+ - "\u0001\u0000\u0000\u0000\u012f\u0755\u0001\u0000\u0000\u0000\u0131\u075c"+ - "\u0001\u0000\u0000\u0000\u0133\u0763\u0001\u0000\u0000\u0000\u0135\u0765"+ - "\u0001\u0000\u0000\u0000\u0137\u0767\u0001\u0000\u0000\u0000\u0139\u076b"+ - "\u0001\u0000\u0000\u0000\u013b\u0771\u0001\u0000\u0000\u0000\u013d\u077c"+ - "\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000\u0000\u0000\u0141\u0793"+ - "\u0001\u0000\u0000\u0000\u0143\u07a0\u0001\u0000\u0000\u0000\u0145\u07a6"+ - "\u0001\u0000\u0000\u0000\u0147\u07b1\u0001\u0000\u0000\u0000\u0149\u014a"+ - "\u0005{\u0000\u0000\u014a\u014b\u0006\u0000\u0000\u0000\u014b\u0004\u0001"+ - "\u0000\u0000\u0000\u014c\u014d\u0005}\u0000\u0000\u014d\u0006\u0001\u0000"+ - "\u0000\u0000\u014e\u014f\u0005[\u0000\u0000\u014f\b\u0001\u0000\u0000"+ - "\u0000\u0150\u0151\u0005]\u0000\u0000\u0151\n\u0001\u0000\u0000\u0000"+ - "\u0152\u0153\u0005(\u0000\u0000\u0153\f\u0001\u0000\u0000\u0000\u0154"+ - "\u0155\u0005)\u0000\u0000\u0155\u000e\u0001\u0000\u0000\u0000\u0156\u0157"+ - "\u0005;\u0000\u0000\u0157\u0010\u0001\u0000\u0000\u0000\u0158\u0159\u0005"+ - ":\u0000\u0000\u0159\u0012\u0001\u0000\u0000\u0000\u015a\u015b\u0005,\u0000"+ - "\u0000\u015b\u0014\u0001\u0000\u0000\u0000\u015c\u015d\u0005.\u0000\u0000"+ - "\u015d\u015e\u0005.\u0000\u0000\u015e\u0016\u0001\u0000\u0000\u0000\u015f"+ - "\u0160\u0005.\u0000\u0000\u0160\u0161\u0005.\u0000\u0000\u0161\u0162\u0005"+ - ".\u0000\u0000\u0162\u0018\u0001\u0000\u0000\u0000\u0163\u0164\u0005?\u0000"+ - "\u0000\u0164\u001a\u0001\u0000\u0000\u0000\u0165\u0166\u0005.\u0000\u0000"+ - "\u0166\u001c\u0001\u0000\u0000\u0000\u0167\u0168\u0005-\u0000\u0000\u0168"+ - "\u0169\u0005>\u0000\u0000\u0169\u001e\u0001\u0000\u0000\u0000\u016a\u016b"+ - "\u0005+\u0000\u0000\u016b \u0001\u0000\u0000\u0000\u016c\u016d\u0005-"+ - "\u0000\u0000\u016d\"\u0001\u0000\u0000\u0000\u016e\u016f\u0005*\u0000"+ - "\u0000\u016f$\u0001\u0000\u0000\u0000\u0170\u0171\u0005/\u0000\u0000\u0171"+ - "&\u0001\u0000\u0000\u0000\u0172\u0173\u0005%\u0000\u0000\u0173(\u0001"+ - "\u0000\u0000\u0000\u0174\u0175\u0005+\u0000\u0000\u0175\u0176\u0005+\u0000"+ - "\u0000\u0176*\u0001\u0000\u0000\u0000\u0177\u0178\u0005-\u0000\u0000\u0178"+ - "\u0179\u0005-\u0000\u0000\u0179,\u0001\u0000\u0000\u0000\u017a\u017b\u0005"+ - "&\u0000\u0000\u017b.\u0001\u0000\u0000\u0000\u017c\u017d\u0005~\u0000"+ - "\u0000\u017d0\u0001\u0000\u0000\u0000\u017e\u017f\u0005^\u0000\u0000\u017f"+ - "2\u0001\u0000\u0000\u0000\u0180\u0181\u0005|\u0000\u0000\u01814\u0001"+ - "\u0000\u0000\u0000\u0182\u0183\u0005<\u0000\u0000\u0183\u0184\u0005<\u0000"+ - "\u0000\u01846\u0001\u0000\u0000\u0000\u0185\u0186\u0005>\u0000\u0000\u0186"+ - "\u0187\u0005>\u0000\u0000\u01878\u0001\u0000\u0000\u0000\u0188\u0189\u0005"+ - "=\u0000\u0000\u0189\u018a\u0005=\u0000\u0000\u018a:\u0001\u0000\u0000"+ - "\u0000\u018b\u018c\u0005!\u0000\u0000\u018c\u018d\u0005=\u0000\u0000\u018d"+ - "<\u0001\u0000\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f>\u0001"+ - "\u0000\u0000\u0000\u0190\u0191\u0005<\u0000\u0000\u0191\u0192\u0005=\u0000"+ - "\u0000\u0192@\u0001\u0000\u0000\u0000\u0193\u0194\u0005>\u0000\u0000\u0194"+ - "\u0195\u0005=\u0000\u0000\u0195B\u0001\u0000\u0000\u0000\u0196\u0197\u0005"+ - ">\u0000\u0000\u0197D\u0001\u0000\u0000\u0000\u0198\u0199\u0005&\u0000"+ - "\u0000\u0199\u019a\u0005&\u0000\u0000\u019aF\u0001\u0000\u0000\u0000\u019b"+ - "\u019c\u0005|\u0000\u0000\u019c\u019d\u0005|\u0000\u0000\u019dH\u0001"+ - "\u0000\u0000\u0000\u019e\u019f\u0005=\u0000\u0000\u019fJ\u0001\u0000\u0000"+ - "\u0000\u01a0\u01a1\u0005+\u0000\u0000\u01a1\u01b7\u0005=\u0000\u0000\u01a2"+ - "\u01a3\u0005-\u0000\u0000\u01a3\u01b7\u0005=\u0000\u0000\u01a4\u01a5\u0005"+ - "*\u0000\u0000\u01a5\u01b7\u0005=\u0000\u0000\u01a6\u01a7\u0005/\u0000"+ - "\u0000\u01a7\u01b7\u0005=\u0000\u0000\u01a8\u01a9\u0005%\u0000\u0000\u01a9"+ - "\u01b7\u0005=\u0000\u0000\u01aa\u01ab\u0005<\u0000\u0000\u01ab\u01ac\u0005"+ - "<\u0000\u0000\u01ac\u01b7\u0005=\u0000\u0000\u01ad\u01ae\u0005>\u0000"+ - "\u0000\u01ae\u01af\u0005>\u0000\u0000\u01af\u01b7\u0005=\u0000\u0000\u01b0"+ - "\u01b1\u0005&\u0000\u0000\u01b1\u01b7\u0005=\u0000\u0000\u01b2\u01b3\u0005"+ - "|\u0000\u0000\u01b3\u01b7\u0005=\u0000\u0000\u01b4\u01b5\u0005^\u0000"+ - "\u0000\u01b5\u01b7\u0005=\u0000\u0000\u01b6\u01a0\u0001\u0000\u0000\u0000"+ - "\u01b6\u01a2\u0001\u0000\u0000\u0000\u01b6\u01a4\u0001\u0000\u0000\u0000"+ - "\u01b6\u01a6\u0001\u0000\u0000\u0000\u01b6\u01a8\u0001\u0000\u0000\u0000"+ - "\u01b6\u01aa\u0001\u0000\u0000\u0000\u01b6\u01ad\u0001\u0000\u0000\u0000"+ - "\u01b6\u01b0\u0001\u0000\u0000\u0000\u01b6\u01b2\u0001\u0000\u0000\u0000"+ - "\u01b6\u01b4\u0001\u0000\u0000\u0000\u01b7L\u0001\u0000\u0000\u0000\u01b8"+ - "\u01b9\u0005t\u0000\u0000\u01b9\u01ba\u0005y\u0000\u0000\u01ba\u01bb\u0005"+ - "p\u0000\u0000\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005d\u0000"+ - "\u0000\u01bd\u01be\u0005e\u0000\u0000\u01be\u01bf\u0005f\u0000\u0000\u01bf"+ - "N\u0001\u0000\u0000\u0000\u01c0\u01c1\u0005c\u0000\u0000\u01c1\u01c2\u0005"+ - "o\u0000\u0000\u01c2\u01c3\u0005n\u0000\u0000\u01c3\u01c4\u0005s\u0000"+ - "\u0000\u01c4\u01c5\u0005t\u0000\u0000\u01c5P\u0001\u0000\u0000\u0000\u01c6"+ - "\u01c7\u0005e\u0000\u0000\u01c7\u01c8\u0005x\u0000\u0000\u01c8\u01c9\u0005"+ - "t\u0000\u0000\u01c9\u01ca\u0005e\u0000\u0000\u01ca\u01cb\u0005r\u0000"+ - "\u0000\u01cb\u01cc\u0005n\u0000\u0000\u01ccR\u0001\u0000\u0000\u0000\u01cd"+ - "\u01ce\u0005_\u0000\u0000\u01ce\u01cf\u0005_\u0000\u0000\u01cf\u01d0\u0005"+ - "e\u0000\u0000\u01d0\u01d1\u0005x\u0000\u0000\u01d1\u01d2\u0005p\u0000"+ - "\u0000\u01d2\u01d3\u0005o\u0000\u0000\u01d3\u01d4\u0005r\u0000\u0000\u01d4"+ - "\u01d5\u0005t\u0000\u0000\u01d5T\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005"+ - "_\u0000\u0000\u01d7\u01d8\u0005_\u0000\u0000\u01d8\u01d9\u0005a\u0000"+ - "\u0000\u01d9\u01da\u0005l\u0000\u0000\u01da\u01db\u0005i\u0000\u0000\u01db"+ - "\u01dc\u0005g\u0000\u0000\u01dc\u01dd\u0005n\u0000\u0000\u01ddV\u0001"+ - "\u0000\u0000\u0000\u01de\u01df\u0005i\u0000\u0000\u01df\u01e0\u0005n\u0000"+ - "\u0000\u01e0\u01e1\u0005l\u0000\u0000\u01e1\u01e2\u0005i\u0000\u0000\u01e2"+ - "\u01e3\u0005n\u0000\u0000\u01e3\u01e4\u0005e\u0000\u0000\u01e4X\u0001"+ - "\u0000\u0000\u0000\u01e5\u01e6\u0005v\u0000\u0000\u01e6\u01e7\u0005o\u0000"+ - "\u0000\u01e7\u01e8\u0005l\u0000\u0000\u01e8\u01e9\u0005a\u0000\u0000\u01e9"+ - "\u01ea\u0005t\u0000\u0000\u01ea\u01eb\u0005i\u0000\u0000\u01eb\u01ec\u0005"+ - "l\u0000\u0000\u01ec\u01ed\u0005e\u0000\u0000\u01edZ\u0001\u0000\u0000"+ - "\u0000\u01ee\u01ef\u0005s\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0"+ - "\u01f1\u0005a\u0000\u0000\u01f1\u01f2\u0005t\u0000\u0000\u01f2\u01f3\u0005"+ - "i\u0000\u0000\u01f3\u01f4\u0005c\u0000\u0000\u01f4\\\u0001\u0000\u0000"+ - "\u0000\u01f5\u01f6\u0005_\u0000\u0000\u01f6\u01f7\u0005_\u0000\u0000\u01f7"+ - "\u01f8\u0005i\u0000\u0000\u01f8\u01f9\u0005n\u0000\u0000\u01f9\u01fa\u0005"+ - "t\u0000\u0000\u01fa\u01fb\u0005e\u0000\u0000\u01fb\u01fc\u0005r\u0000"+ - "\u0000\u01fc\u01fd\u0005r\u0000\u0000\u01fd\u01fe\u0005u\u0000\u0000\u01fe"+ - "\u01ff\u0005p\u0000\u0000\u01ff\u0200\u0005t\u0000\u0000\u0200^\u0001"+ - "\u0000\u0000\u0000\u0201\u0202\u0005r\u0000\u0000\u0202\u0203\u0005e\u0000"+ - "\u0000\u0203\u0204\u0005g\u0000\u0000\u0204\u0205\u0005i\u0000\u0000\u0205"+ - "\u0206\u0005s\u0000\u0000\u0206\u0207\u0005t\u0000\u0000\u0207\u0208\u0005"+ - "e\u0000\u0000\u0208\u0209\u0005r\u0000\u0000\u0209`\u0001\u0000\u0000"+ - "\u0000\u020a\u020b\u0005_\u0000\u0000\u020b\u020c\u0005_\u0000\u0000\u020c"+ - "\u020d\u0005z\u0000\u0000\u020d\u020e\u0005p\u0000\u0000\u020e\u020f\u0005"+ - "_\u0000\u0000\u020f\u0210\u0005r\u0000\u0000\u0210\u0211\u0005e\u0000"+ - "\u0000\u0211\u0212\u0005s\u0000\u0000\u0212\u0213\u0005e\u0000\u0000\u0213"+ - "\u0214\u0005r\u0000\u0000\u0214\u0215\u0005v\u0000\u0000\u0215\u0216\u0005"+ - "e\u0000\u0000\u0216b\u0001\u0000\u0000\u0000\u0217\u0218\u0005_\u0000"+ - "\u0000\u0218\u0219\u0005_\u0000\u0000\u0219\u021a\u0005a\u0000\u0000\u021a"+ - "\u021b\u0005d\u0000\u0000\u021b\u021c\u0005d\u0000\u0000\u021c\u021d\u0005"+ - "r\u0000\u0000\u021d\u021e\u0005e\u0000\u0000\u021e\u021f\u0005s\u0000"+ - "\u0000\u021f\u0220\u0005s\u0000\u0000\u0220d\u0001\u0000\u0000\u0000\u0221"+ - "\u0222\u0005_\u0000\u0000\u0222\u0223\u0005_\u0000\u0000\u0223\u0224\u0005"+ - "z\u0000\u0000\u0224\u0225\u0005p\u0000\u0000\u0225f\u0001\u0000\u0000"+ - "\u0000\u0226\u0227\u0005_\u0000\u0000\u0227\u0228\u0005_\u0000\u0000\u0228"+ - "\u0229\u0005m\u0000\u0000\u0229\u022a\u0005e\u0000\u0000\u022a\u022b\u0005"+ - "m\u0000\u0000\u022bh\u0001\u0000\u0000\u0000\u022c\u022d\u0005_\u0000"+ - "\u0000\u022d\u022e\u0005_\u0000\u0000\u022e\u022f\u0005f\u0000\u0000\u022f"+ - "\u0230\u0005a\u0000\u0000\u0230\u0231\u0005r\u0000\u0000\u0231j\u0001"+ - "\u0000\u0000\u0000\u0232\u0233\u0005_\u0000\u0000\u0233\u0234\u0005_\u0000"+ - "\u0000\u0234\u0235\u0005n\u0000\u0000\u0235\u0236\u0005e\u0000\u0000\u0236"+ - "\u0237\u0005a\u0000\u0000\u0237\u0238\u0005r\u0000\u0000\u0238l\u0001"+ - "\u0000\u0000\u0000\u0239\u023a\u0005_\u0000\u0000\u023a\u023b\u0005_\u0000"+ - "\u0000\u023b\u023c\u0005s\u0000\u0000\u023c\u023d\u0005s\u0000\u0000\u023d"+ - "\u023e\u0005a\u0000\u0000\u023en\u0001\u0000\u0000\u0000\u023f\u0240\u0005"+ - "_\u0000\u0000\u0240\u0241\u0005_\u0000\u0000\u0241\u0242\u0005m\u0000"+ - "\u0000\u0242\u0243\u0005a\u0000\u0000\u0243p\u0001\u0000\u0000\u0000\u0244"+ - "\u0245\u0005_\u0000\u0000\u0245\u0246\u0005_\u0000\u0000\u0246\u0247\u0005"+ - "i\u0000\u0000\u0247\u0248\u0005n\u0000\u0000\u0248\u0249\u0005t\u0000"+ - "\u0000\u0249\u024a\u0005r\u0000\u0000\u024a\u024b\u0005i\u0000\u0000\u024b"+ - "\u024c\u0005n\u0000\u0000\u024c\u024d\u0005s\u0000\u0000\u024d\u024e\u0005"+ - "i\u0000\u0000\u024e\u024f\u0005c\u0000\u0000\u024fr\u0001\u0000\u0000"+ - "\u0000\u0250\u0251\u0005_\u0000\u0000\u0251\u0252\u0005_\u0000\u0000\u0252"+ - "\u0253\u0005s\u0000\u0000\u0253\u0254\u0005t\u0000\u0000\u0254\u0255\u0005"+ - "a\u0000\u0000\u0255\u0256\u0005c\u0000\u0000\u0256\u0257\u0005k\u0000"+ - "\u0000\u0257\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259"+ - "\u025a\u0005l\u0000\u0000\u025a\u027d\u0005l\u0000\u0000\u025b\u025c\u0005"+ - "_\u0000\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005p\u0000"+ - "\u0000\u025e\u025f\u0005h\u0000\u0000\u025f\u0260\u0005i\u0000\u0000\u0260"+ - "\u0261\u0005c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005"+ - "l\u0000\u0000\u0263\u027d\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000"+ - "\u0000\u0265\u0266\u0005_\u0000\u0000\u0266\u0267\u0005v\u0000\u0000\u0267"+ - "\u0268\u0005a\u0000\u0000\u0268\u0269\u0005r\u0000\u0000\u0269\u026a\u0005"+ - "c\u0000\u0000\u026a\u026b\u0005a\u0000\u0000\u026b\u026c\u0005l\u0000"+ - "\u0000\u026c\u027d\u0005l\u0000\u0000\u026d\u026e\u0005_\u0000\u0000\u026e"+ - "\u026f\u0005_\u0000\u0000\u026f\u0270\u0005i\u0000\u0000\u0270\u0271\u0005"+ - "n\u0000\u0000\u0271\u0272\u0005t\u0000\u0000\u0272\u0273\u0005r\u0000"+ - "\u0000\u0273\u0274\u0005i\u0000\u0000\u0274\u0275\u0005n\u0000\u0000\u0275"+ - "\u0276\u0005s\u0000\u0000\u0276\u0277\u0005i\u0000\u0000\u0277\u0278\u0005"+ - "c\u0000\u0000\u0278\u0279\u0005c\u0000\u0000\u0279\u027a\u0005a\u0000"+ - "\u0000\u027a\u027b\u0005l\u0000\u0000\u027b\u027d\u0005l\u0000\u0000\u027c"+ - "\u0250\u0001\u0000\u0000\u0000\u027c\u025b\u0001\u0000\u0000\u0000\u027c"+ - "\u0264\u0001\u0000\u0000\u0000\u027c\u026d\u0001\u0000\u0000\u0000\u027d"+ - "t\u0001\u0000\u0000\u0000\u027e\u027f\u0005i\u0000\u0000\u027f\u0280\u0005"+ - "f\u0000\u0000\u0280v\u0001\u0000\u0000\u0000\u0281\u0282\u0005e\u0000"+ - "\u0000\u0282\u0283\u0005l\u0000\u0000\u0283\u0284\u0005s\u0000\u0000\u0284"+ - "\u0285\u0005e\u0000\u0000\u0285x\u0001\u0000\u0000\u0000\u0286\u0287\u0005"+ - "w\u0000\u0000\u0287\u0288\u0005h\u0000\u0000\u0288\u0289\u0005i\u0000"+ - "\u0000\u0289\u028a\u0005l\u0000\u0000\u028a\u028b\u0005e\u0000\u0000\u028b"+ - "z\u0001\u0000\u0000\u0000\u028c\u028d\u0005d\u0000\u0000\u028d\u028e\u0005"+ - "o\u0000\u0000\u028e|\u0001\u0000\u0000\u0000\u028f\u0290\u0005f\u0000"+ - "\u0000\u0290\u0291\u0005o\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292"+ - "~\u0001\u0000\u0000\u0000\u0293\u0294\u0005s\u0000\u0000\u0294\u0295\u0005"+ - "w\u0000\u0000\u0295\u0296\u0005i\u0000\u0000\u0296\u0297\u0005t\u0000"+ - "\u0000\u0297\u0298\u0005c\u0000\u0000\u0298\u0299\u0005h\u0000\u0000\u0299"+ - "\u0080\u0001\u0000\u0000\u0000\u029a\u029b\u0005r\u0000\u0000\u029b\u029c"+ - "\u0005e\u0000\u0000\u029c\u029d\u0005t\u0000\u0000\u029d\u029e\u0005u"+ - "\u0000\u0000\u029e\u029f\u0005r\u0000\u0000\u029f\u02a0\u0005n\u0000\u0000"+ - "\u02a0\u0082\u0001\u0000\u0000\u0000\u02a1\u02a2\u0005b\u0000\u0000\u02a2"+ - "\u02a3\u0005r\u0000\u0000\u02a3\u02a4\u0005e\u0000\u0000\u02a4\u02a5\u0005"+ - "a\u0000\u0000\u02a5\u02a6\u0005k\u0000\u0000\u02a6\u0084\u0001\u0000\u0000"+ - "\u0000\u02a7\u02a8\u0005c\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9"+ - "\u02aa\u0005n\u0000\u0000\u02aa\u02ab\u0005t\u0000\u0000\u02ab\u02ac\u0005"+ - "i\u0000\u0000\u02ac\u02ad\u0005n\u0000\u0000\u02ad\u02ae\u0005u\u0000"+ - "\u0000\u02ae\u02af\u0005e\u0000\u0000\u02af\u0086\u0001\u0000\u0000\u0000"+ - "\u02b0\u02b1\u0005g\u0000\u0000\u02b1\u02b2\u0005o\u0000\u0000\u02b2\u02b3"+ - "\u0005t\u0000\u0000\u02b3\u02b4\u0005o\u0000\u0000\u02b4\u0088\u0001\u0000"+ - "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005s\u0000\u0000"+ - "\u02b7\u02b8\u0005m\u0000\u0000\u02b8\u02b9\u0001\u0000\u0000\u0000\u02b9"+ - "\u02ba\u0006C\u0001\u0000\u02ba\u008a\u0001\u0000\u0000\u0000\u02bb\u02bc"+ - "\u0005d\u0000\u0000\u02bc\u02bd\u0005e\u0000\u0000\u02bd\u02be\u0005f"+ - "\u0000\u0000\u02be\u02bf\u0005a\u0000\u0000\u02bf\u02c0\u0005u\u0000\u0000"+ - "\u02c0\u02c1\u0005l\u0000\u0000\u02c1\u02c2\u0005t\u0000\u0000\u02c2\u008c"+ - "\u0001\u0000\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005"+ - "a\u0000\u0000\u02c5\u02c6\u0005s\u0000\u0000\u02c6\u02c7\u0005e\u0000"+ - "\u0000\u02c7\u008e\u0001\u0000\u0000\u0000\u02c8\u02c9\u0005s\u0000\u0000"+ - "\u02c9\u02ca\u0005t\u0000\u0000\u02ca\u02cb\u0005r\u0000\u0000\u02cb\u02cc"+ - "\u0005u\u0000\u0000\u02cc\u02cd\u0005c\u0000\u0000\u02cd\u02ce\u0005t"+ - "\u0000\u0000\u02ce\u0090\u0001\u0000\u0000\u0000\u02cf\u02d0\u0005u\u0000"+ - "\u0000\u02d0\u02d1\u0005n\u0000\u0000\u02d1\u02d2\u0005i\u0000\u0000\u02d2"+ - "\u02d3\u0005o\u0000\u0000\u02d3\u02d4\u0005n\u0000\u0000\u02d4\u0092\u0001"+ - "\u0000\u0000\u0000\u02d5\u02d6\u0005e\u0000\u0000\u02d6\u02d7\u0005n\u0000"+ - "\u0000\u02d7\u02d8\u0005u\u0000\u0000\u02d8\u02d9\u0005m\u0000\u0000\u02d9"+ - "\u0094\u0001\u0000\u0000\u0000\u02da\u02db\u0005s\u0000\u0000\u02db\u02dc"+ - "\u0005i\u0000\u0000\u02dc\u02dd\u0005z\u0000\u0000\u02dd\u02de\u0005e"+ - "\u0000\u0000\u02de\u02df\u0005o\u0000\u0000\u02df\u02e0\u0005f\u0000\u0000"+ - "\u02e0\u0096\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005t\u0000\u0000\u02e2"+ - "\u02e3\u0005y\u0000\u0000\u02e3\u02e4\u0005p\u0000\u0000\u02e4\u02e5\u0005"+ - "e\u0000\u0000\u02e5\u02e6\u0005i\u0000\u0000\u02e6\u02e7\u0005d\u0000"+ - "\u0000\u02e7\u0098\u0001\u0000\u0000\u0000\u02e8\u02e9\u0005d\u0000\u0000"+ - "\u02e9\u02ea\u0005e\u0000\u0000\u02ea\u02eb\u0005f\u0000\u0000\u02eb\u02ec"+ - "\u0005i\u0000\u0000\u02ec\u02ed\u0005n\u0000\u0000\u02ed\u02ee\u0005e"+ - "\u0000\u0000\u02ee\u02ef\u0005d\u0000\u0000\u02ef\u009a\u0001\u0000\u0000"+ - "\u0000\u02f0\u02f1\u0005k\u0000\u0000\u02f1\u02f2\u0005i\u0000\u0000\u02f2"+ - "\u02f3\u0005c\u0000\u0000\u02f3\u02f4\u0005k\u0000\u0000\u02f4\u02f5\u0005"+ - "a\u0000\u0000\u02f5\u02f6\u0005s\u0000\u0000\u02f6\u02f7\u0005m\u0000"+ - "\u0000\u02f7\u009c\u0001\u0000\u0000\u0000\u02f8\u02f9\u0005!\u0000\u0000"+ - "\u02f9\u009e\u0001\u0000\u0000\u0000\u02fa\u02fb\u0005s\u0000\u0000\u02fb"+ - "\u02fc\u0005i\u0000\u0000\u02fc\u02fd\u0005g\u0000\u0000\u02fd\u02fe\u0005"+ - "n\u0000\u0000\u02fe\u02ff\u0005e\u0000\u0000\u02ff\u032e\u0005d\u0000"+ - "\u0000\u0300\u0301\u0005u\u0000\u0000\u0301\u0302\u0005n\u0000\u0000\u0302"+ - "\u0303\u0005s\u0000\u0000\u0303\u0304\u0005i\u0000\u0000\u0304\u0305\u0005"+ - "g\u0000\u0000\u0305\u0306\u0005n\u0000\u0000\u0306\u0307\u0005e\u0000"+ - "\u0000\u0307\u032e\u0005d\u0000\u0000\u0308\u0309\u0005b\u0000\u0000\u0309"+ - "\u030a\u0005y\u0000\u0000\u030a\u030b\u0005t\u0000\u0000\u030b\u032e\u0005"+ - "e\u0000\u0000\u030c\u030d\u0005w\u0000\u0000\u030d\u030e\u0005o\u0000"+ - "\u0000\u030e\u030f\u0005r\u0000\u0000\u030f\u032e\u0005d\u0000\u0000\u0310"+ - "\u0311\u0005d\u0000\u0000\u0311\u0312\u0005w\u0000\u0000\u0312\u0313\u0005"+ - "o\u0000\u0000\u0313\u0314\u0005r\u0000\u0000\u0314\u032e\u0005d\u0000"+ - "\u0000\u0315\u0316\u0005b\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317"+ - "\u0318\u0005o\u0000\u0000\u0318\u032e\u0005l\u0000\u0000\u0319\u031a\u0005"+ - "c\u0000\u0000\u031a\u031b\u0005h\u0000\u0000\u031b\u031c\u0005a\u0000"+ - "\u0000\u031c\u032e\u0005r\u0000\u0000\u031d\u031e\u0005s\u0000\u0000\u031e"+ - "\u031f\u0005h\u0000\u0000\u031f\u0320\u0005o\u0000\u0000\u0320\u0321\u0005"+ - "r\u0000\u0000\u0321\u032e\u0005t\u0000\u0000\u0322\u0323\u0005i\u0000"+ - "\u0000\u0323\u0324\u0005n\u0000\u0000\u0324\u032e\u0005t\u0000\u0000\u0325"+ - "\u0326\u0005l\u0000\u0000\u0326\u0327\u0005o\u0000\u0000\u0327\u0328\u0005"+ - "n\u0000\u0000\u0328\u032e\u0005g\u0000\u0000\u0329\u032a\u0005v\u0000"+ - "\u0000\u032a\u032b\u0005o\u0000\u0000\u032b\u032c\u0005i\u0000\u0000\u032c"+ - "\u032e\u0005d\u0000\u0000\u032d\u02fa\u0001\u0000\u0000\u0000\u032d\u0300"+ - "\u0001\u0000\u0000\u0000\u032d\u0308\u0001\u0000\u0000\u0000\u032d\u030c"+ - "\u0001\u0000\u0000\u0000\u032d\u0310\u0001\u0000\u0000\u0000\u032d\u0315"+ - "\u0001\u0000\u0000\u0000\u032d\u0319\u0001\u0000\u0000\u0000\u032d\u031d"+ - "\u0001\u0000\u0000\u0000\u032d\u0322\u0001\u0000\u0000\u0000\u032d\u0325"+ - "\u0001\u0000\u0000\u0000\u032d\u0329\u0001\u0000\u0000\u0000\u032e\u00a0"+ - "\u0001\u0000\u0000\u0000\u032f\u0330\u0005t\u0000\u0000\u0330\u0331\u0005"+ - "r\u0000\u0000\u0331\u0332\u0005u\u0000\u0000\u0332\u0339\u0005e\u0000"+ - "\u0000\u0333\u0334\u0005f\u0000\u0000\u0334\u0335\u0005a\u0000\u0000\u0335"+ - "\u0336\u0005l\u0000\u0000\u0336\u0337\u0005s\u0000\u0000\u0337\u0339\u0005"+ - "e\u0000\u0000\u0338\u032f\u0001\u0000\u0000\u0000\u0338\u0333\u0001\u0000"+ - "\u0000\u0000\u0339\u00a2\u0001\u0000\u0000\u0000\u033a\u033b\u0005{\u0000"+ - "\u0000\u033b\u033c\u0005{\u0000\u0000\u033c\u0340\u0001\u0000\u0000\u0000"+ - "\u033d\u033f\t\u0000\u0000\u0000\u033e\u033d\u0001\u0000\u0000\u0000\u033f"+ - "\u0342\u0001\u0000\u0000\u0000\u0340\u0341\u0001\u0000\u0000\u0000\u0340"+ - "\u033e\u0001\u0000\u0000\u0000\u0341\u0343\u0001\u0000\u0000\u0000\u0342"+ - "\u0340\u0001\u0000\u0000\u0000\u0343\u0344\u0005}\u0000\u0000\u0344\u0345"+ - "\u0005}\u0000\u0000\u0345\u00a4\u0001\u0000\u0000\u0000\u0346\u0347\u0005"+ - "#\u0000\u0000\u0347\u0348\u0005i\u0000\u0000\u0348\u0349\u0005m\u0000"+ - "\u0000\u0349\u034a\u0005p\u0000\u0000\u034a\u034b\u0005o\u0000\u0000\u034b"+ - "\u034c\u0005r\u0000\u0000\u034c\u034d\u0005t\u0000\u0000\u034d\u034e\u0001"+ - "\u0000\u0000\u0000\u034e\u034f\u0006Q\u0002\u0000\u034f\u00a6\u0001\u0000"+ - "\u0000\u0000\u0350\u0351\u0005#\u0000\u0000\u0351\u0352\u0005i\u0000\u0000"+ - "\u0352\u0353\u0005n\u0000\u0000\u0353\u0354\u0005c\u0000\u0000\u0354\u0355"+ - "\u0005l\u0000\u0000\u0355\u0356\u0005u\u0000\u0000\u0356\u0357\u0005d"+ - "\u0000\u0000\u0357\u0358\u0005e\u0000\u0000\u0358\u0359\u0001\u0000\u0000"+ - "\u0000\u0359\u035a\u0006R\u0003\u0000\u035a\u00a8\u0001\u0000\u0000\u0000"+ - "\u035b\u035c\u0005#\u0000\u0000\u035c\u035d\u0005p\u0000\u0000\u035d\u035e"+ - "\u0005r\u0000\u0000\u035e\u035f\u0005a\u0000\u0000\u035f\u0360\u0005g"+ - "\u0000\u0000\u0360\u0361\u0005m\u0000\u0000\u0361\u0362\u0005a\u0000\u0000"+ - "\u0362\u00aa\u0001\u0000\u0000\u0000\u0363\u0364\u0005#\u0000\u0000\u0364"+ - "\u0365\u0005d\u0000\u0000\u0365\u0366\u0005e\u0000\u0000\u0366\u0367\u0005"+ - "f\u0000\u0000\u0367\u0368\u0005i\u0000\u0000\u0368\u0369\u0005n\u0000"+ - "\u0000\u0369\u036a\u0005e\u0000\u0000\u036a\u00ac\u0001\u0000\u0000\u0000"+ - "\u036b\u036c\u0005\\\u0000\u0000\u036c\u0371\u0005\n\u0000\u0000\u036d"+ - "\u036e\u0005\\\u0000\u0000\u036e\u036f\u0005\r\u0000\u0000\u036f\u0371"+ - "\u0005\n\u0000\u0000\u0370\u036b\u0001\u0000\u0000\u0000\u0370\u036d\u0001"+ - "\u0000\u0000\u0000\u0371\u00ae\u0001\u0000\u0000\u0000\u0372\u0373\u0005"+ - "#\u0000\u0000\u0373\u0374\u0005u\u0000\u0000\u0374\u0375\u0005n\u0000"+ - "\u0000\u0375\u0376\u0005d\u0000\u0000\u0376\u0377\u0005e\u0000\u0000\u0377"+ - "\u0378\u0005f\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000\u0379\u037a"+ - "\u0005#\u0000\u0000\u037a\u037b\u0005i\u0000\u0000\u037b\u037c\u0005f"+ - "\u0000\u0000\u037c\u037d\u0005d\u0000\u0000\u037d\u037e\u0005e\u0000\u0000"+ - "\u037e\u037f\u0005f\u0000\u0000\u037f\u00b2\u0001\u0000\u0000\u0000\u0380"+ - "\u0381\u0005#\u0000\u0000\u0381\u0382\u0005i\u0000\u0000\u0382\u0383\u0005"+ - "f\u0000\u0000\u0383\u0384\u0005n\u0000\u0000\u0384\u0385\u0005d\u0000"+ - "\u0000\u0385\u0386\u0005e\u0000\u0000\u0386\u0387\u0005f\u0000\u0000\u0387"+ - "\u00b4\u0001\u0000\u0000\u0000\u0388\u0389\u0005#\u0000\u0000\u0389\u038a"+ - "\u0005i\u0000\u0000\u038a\u038b\u0005f\u0000\u0000\u038b\u00b6\u0001\u0000"+ - "\u0000\u0000\u038c\u038d\u0005#\u0000\u0000\u038d\u038e\u0005e\u0000\u0000"+ - "\u038e\u038f\u0005l\u0000\u0000\u038f\u0390\u0005i\u0000\u0000\u0390\u0391"+ - "\u0005f\u0000\u0000\u0391\u00b8\u0001\u0000\u0000\u0000\u0392\u0393\u0005"+ - "#\u0000\u0000\u0393\u0394\u0005e\u0000\u0000\u0394\u0395\u0005l\u0000"+ - "\u0000\u0395\u0396\u0005s\u0000\u0000\u0396\u0397\u0005e\u0000\u0000\u0397"+ - "\u00ba\u0001\u0000\u0000\u0000\u0398\u0399\u0005#\u0000\u0000\u0399\u039a"+ - "\u0005e\u0000\u0000\u039a\u039b\u0005n\u0000\u0000\u039b\u039c\u0005d"+ - "\u0000\u0000\u039c\u039d\u0005i\u0000\u0000\u039d\u039e\u0005f\u0000\u0000"+ - "\u039e\u00bc\u0001\u0000\u0000\u0000\u039f\u03a0\u0005#\u0000\u0000\u03a0"+ - "\u03a1\u0005e\u0000\u0000\u03a1\u03a2\u0005r\u0000\u0000\u03a2\u03a3\u0005"+ - "r\u0000\u0000\u03a3\u03a4\u0005o\u0000\u0000\u03a4\u03a5\u0005r\u0000"+ - "\u0000\u03a5\u00be\u0001\u0000\u0000\u0000\u03a6\u03a7\u0005#\u0000\u0000"+ - "\u03a7\u03a8\u0003\u00dbl\u0000\u03a8\u00c0\u0001\u0000\u0000\u0000\u03a9"+ - "\u03aa\u0005#\u0000\u0000\u03aa\u03ab\u0003\u00dbl\u0000\u03ab\u00c2\u0001"+ - "\u0000\u0000\u0000\u03ac\u03af\u0003\u00c5a\u0000\u03ad\u03af\u0003\u00cd"+ - "e\u0000\u03ae\u03ac\u0001\u0000\u0000\u0000\u03ae\u03ad\u0001\u0000\u0000"+ - "\u0000\u03af\u00c4\u0001\u0000\u0000\u0000\u03b0\u03b4\u0003\u00c7b\u0000"+ - "\u03b1\u03b4\u0003\u00c9c\u0000\u03b2\u03b4\u0003\u00cbd\u0000\u03b3\u03b0"+ - "\u0001\u0000\u0000\u0000\u03b3\u03b1\u0001\u0000\u0000\u0000\u03b3\u03b2"+ - "\u0001\u0000\u0000\u0000\u03b4\u00c6\u0001\u0000\u0000\u0000\u03b5\u03bb"+ - "\u0005%\u0000\u0000\u03b6\u03b7\u00050\u0000\u0000\u03b7\u03bb\u0005b"+ - "\u0000\u0000\u03b8\u03b9\u00050\u0000\u0000\u03b9\u03bb\u0005B\u0000\u0000"+ - "\u03ba\u03b5\u0001\u0000\u0000\u0000\u03ba\u03b6\u0001\u0000\u0000\u0000"+ - "\u03ba\u03b8\u0001\u0000\u0000\u0000\u03bb\u03bf\u0001\u0000\u0000\u0000"+ - "\u03bc\u03be\u0003\u00d5i\u0000\u03bd\u03bc\u0001\u0000\u0000\u0000\u03be"+ - "\u03c1\u0001\u0000\u0000\u0000\u03bf\u03bd\u0001\u0000\u0000\u0000\u03bf"+ - "\u03c0\u0001\u0000\u0000\u0000\u03c0\u03c2\u0001\u0000\u0000\u0000\u03c1"+ - "\u03bf\u0001\u0000\u0000\u0000\u03c2\u03c4\u0005.\u0000\u0000\u03c3\u03c5"+ - "\u0003\u00d5i\u0000\u03c4\u03c3\u0001\u0000\u0000\u0000\u03c5\u03c6\u0001"+ - "\u0000\u0000\u0000\u03c6\u03c4\u0001\u0000\u0000\u0000\u03c6\u03c7\u0001"+ - "\u0000\u0000\u0000\u03c7\u00c8\u0001\u0000\u0000\u0000\u03c8\u03ca\u0003"+ - "\u00d7j\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03ca\u03cd\u0001\u0000"+ - "\u0000\u0000\u03cb\u03c9\u0001\u0000\u0000\u0000\u03cb\u03cc\u0001\u0000"+ - "\u0000\u0000\u03cc\u03ce\u0001\u0000\u0000\u0000\u03cd\u03cb\u0001\u0000"+ - "\u0000\u0000\u03ce\u03d0\u0005.\u0000\u0000\u03cf\u03d1\u0003\u00d7j\u0000"+ - "\u03d0\u03cf\u0001\u0000\u0000\u0000\u03d1\u03d2\u0001\u0000\u0000\u0000"+ - "\u03d2\u03d0\u0001\u0000\u0000\u0000\u03d2\u03d3\u0001\u0000\u0000\u0000"+ - "\u03d3\u00ca\u0001\u0000\u0000\u0000\u03d4\u03da\u0005$\u0000\u0000\u03d5"+ - "\u03d6\u00050\u0000\u0000\u03d6\u03da\u0005x\u0000\u0000\u03d7\u03d8\u0005"+ - "0\u0000\u0000\u03d8\u03da\u0005X\u0000\u0000\u03d9\u03d4\u0001\u0000\u0000"+ - "\u0000\u03d9\u03d5\u0001\u0000\u0000\u0000\u03d9\u03d7\u0001\u0000\u0000"+ - "\u0000\u03da\u03de\u0001\u0000\u0000\u0000\u03db\u03dd\u0003\u00d9k\u0000"+ - "\u03dc\u03db\u0001\u0000\u0000\u0000\u03dd\u03e0\u0001\u0000\u0000\u0000"+ - "\u03de\u03dc\u0001\u0000\u0000\u0000\u03de\u03df\u0001\u0000\u0000\u0000"+ - "\u03df\u03e1\u0001\u0000\u0000\u0000\u03e0\u03de\u0001\u0000\u0000\u0000"+ - "\u03e1\u03e3\u0005.\u0000\u0000\u03e2\u03e4\u0003\u00d9k\u0000\u03e3\u03e2"+ - "\u0001\u0000\u0000\u0000\u03e4\u03e5\u0001\u0000\u0000\u0000\u03e5\u03e3"+ - "\u0001\u0000\u0000\u0000\u03e5\u03e6\u0001\u0000\u0000\u0000\u03e6\u00cc"+ - "\u0001\u0000\u0000\u0000\u03e7\u03eb\u0003\u00d1g\u0000\u03e8\u03eb\u0003"+ - "\u00d3h\u0000\u03e9\u03eb\u0003\u00cff\u0000\u03ea\u03e7\u0001\u0000\u0000"+ - "\u0000\u03ea\u03e8\u0001\u0000\u0000\u0000\u03ea\u03e9\u0001\u0000\u0000"+ - "\u0000\u03eb\u03ef\u0001\u0000\u0000\u0000\u03ec\u03ed\u0007\u0000\u0000"+ - "\u0000\u03ed\u03f0\u0007\u0001\u0000\u0000\u03ee\u03f0\u0007\u0002\u0000"+ - "\u0000\u03ef\u03ec\u0001\u0000\u0000\u0000\u03ef\u03ee\u0001\u0000\u0000"+ - "\u0000\u03ef\u03f0\u0001\u0000\u0000\u0000\u03f0\u00ce\u0001\u0000\u0000"+ - "\u0000\u03f1\u03f2\u00050\u0000\u0000\u03f2\u03f4\u0007\u0003\u0000\u0000"+ - "\u03f3\u03f5\u0003\u00d5i\u0000\u03f4\u03f3\u0001\u0000\u0000\u0000\u03f5"+ - "\u03f6\u0001\u0000\u0000\u0000\u03f6\u03f4\u0001\u0000\u0000\u0000\u03f6"+ - "\u03f7\u0001\u0000\u0000\u0000\u03f7\u03ff\u0001\u0000\u0000\u0000\u03f8"+ - "\u03fa\u0005%\u0000\u0000\u03f9\u03fb\u0003\u00d5i\u0000\u03fa\u03f9\u0001"+ - "\u0000\u0000\u0000\u03fb\u03fc\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001"+ - "\u0000\u0000\u0000\u03fc\u03fd\u0001\u0000\u0000\u0000\u03fd\u03ff\u0001"+ - "\u0000\u0000\u0000\u03fe\u03f1\u0001\u0000\u0000\u0000\u03fe\u03f8\u0001"+ - "\u0000\u0000\u0000\u03ff\u00d0\u0001\u0000\u0000\u0000\u0400\u0402\u0003"+ - "\u00d7j\u0000\u0401\u0400\u0001\u0000\u0000\u0000\u0402\u0403\u0001\u0000"+ - "\u0000\u0000\u0403\u0401\u0001\u0000\u0000\u0000\u0403\u0404\u0001\u0000"+ - "\u0000\u0000\u0404\u00d2\u0001\u0000\u0000\u0000\u0405\u040b\u0005$\u0000"+ - "\u0000\u0406\u0407\u00050\u0000\u0000\u0407\u040b\u0005x\u0000\u0000\u0408"+ - "\u0409\u00050\u0000\u0000\u0409\u040b\u0005X\u0000\u0000\u040a\u0405\u0001"+ - "\u0000\u0000\u0000\u040a\u0406\u0001\u0000\u0000\u0000\u040a\u0408\u0001"+ - "\u0000\u0000\u0000\u040b\u040d\u0001\u0000\u0000\u0000\u040c\u040e\u0003"+ - "\u00d9k\u0000\u040d\u040c\u0001\u0000\u0000\u0000\u040e\u040f\u0001\u0000"+ - "\u0000\u0000\u040f\u040d\u0001\u0000\u0000\u0000\u040f\u0410\u0001\u0000"+ - "\u0000\u0000\u0410\u00d4\u0001\u0000\u0000\u0000\u0411\u0412\u0007\u0004"+ - "\u0000\u0000\u0412\u00d6\u0001\u0000\u0000\u0000\u0413\u0414\u0007\u0005"+ - "\u0000\u0000\u0414\u00d8\u0001\u0000\u0000\u0000\u0415\u0416\u0007\u0006"+ - "\u0000\u0000\u0416\u00da\u0001\u0000\u0000\u0000\u0417\u041b\u0003\u00dd"+ - "m\u0000\u0418\u041a\u0003\u00dfn\u0000\u0419\u0418\u0001\u0000\u0000\u0000"+ - "\u041a\u041d\u0001\u0000\u0000\u0000\u041b\u0419\u0001\u0000\u0000\u0000"+ - "\u041b\u041c\u0001\u0000\u0000\u0000\u041c\u041e\u0001\u0000\u0000\u0000"+ - "\u041d\u041b\u0001\u0000\u0000\u0000\u041e\u041f\u0006l\u0004\u0000\u041f"+ - "\u00dc\u0001\u0000\u0000\u0000\u0420\u0421\u0007\u0007\u0000\u0000\u0421"+ - "\u00de\u0001\u0000\u0000\u0000\u0422\u0423\u0007\b\u0000\u0000\u0423\u00e0"+ - "\u0001\u0000\u0000\u0000\u0424\u042a\u0005\"\u0000\u0000\u0425\u0426\u0005"+ - "\\\u0000\u0000\u0426\u0429\u0005\"\u0000\u0000\u0427\u0429\b\t\u0000\u0000"+ - "\u0428\u0425\u0001\u0000\u0000\u0000\u0428\u0427\u0001\u0000\u0000\u0000"+ - "\u0429\u042c\u0001\u0000\u0000\u0000\u042a\u0428\u0001\u0000\u0000\u0000"+ - "\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001\u0000\u0000\u0000"+ - "\u042c\u042a\u0001\u0000\u0000\u0000\u042d\u042f\u0005\"\u0000\u0000\u042e"+ - "\u0430\u0007\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430"+ - "\u0001\u0000\u0000\u0000\u0430\u0435\u0001\u0000\u0000\u0000\u0431\u0433"+ - "\u0007\u000b\u0000\u0000\u0432\u0434\u0007\f\u0000\u0000\u0433\u0432\u0001"+ - "\u0000\u0000\u0000\u0433\u0434\u0001\u0000\u0000\u0000\u0434\u0436\u0001"+ - "\u0000\u0000\u0000\u0435\u0431\u0001\u0000\u0000\u0000\u0435\u0436\u0001"+ - "\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000\u0437\u0439\u0007"+ - "\n\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000\u0438\u0439\u0001\u0000"+ - "\u0000\u0000\u0439\u00e2\u0001\u0000\u0000\u0000\u043a\u0449\u0005\'\u0000"+ - "\u0000\u043b\u0446\u0005\\\u0000\u0000\u043c\u043e\u0007\r\u0000\u0000"+ - "\u043d\u043f\u0007\u0005\u0000\u0000\u043e\u043d\u0001\u0000\u0000\u0000"+ - "\u043e\u043f\u0001\u0000\u0000\u0000\u043f\u0441\u0001\u0000\u0000\u0000"+ - "\u0440\u0442\u0007\u0005\u0000\u0000\u0441\u0440\u0001\u0000\u0000\u0000"+ - "\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0447\u0001\u0000\u0000\u0000"+ - "\u0443\u0444\u0005x\u0000\u0000\u0444\u0445\u0007\u000e\u0000\u0000\u0445"+ - "\u0447\u0007\u000e\u0000\u0000\u0446\u043c\u0001\u0000\u0000\u0000\u0446"+ - "\u0443\u0001\u0000\u0000\u0000\u0447\u044a\u0001\u0000\u0000\u0000\u0448"+ - "\u044a\b\u000f\u0000\u0000\u0449\u043b\u0001\u0000\u0000\u0000\u0449\u0448"+ - "\u0001\u0000\u0000\u0000\u044a\u044b\u0001\u0000\u0000\u0000\u044b\u044c"+ - "\u0005\'\u0000\u0000\u044c\u00e4\u0001\u0000\u0000\u0000\u044d\u044f\u0007"+ - "\u0010\u0000\u0000\u044e\u044d\u0001\u0000\u0000\u0000\u044f\u0450\u0001"+ - "\u0000\u0000\u0000\u0450\u044e\u0001\u0000\u0000\u0000\u0450\u0451\u0001"+ - "\u0000\u0000\u0000\u0451\u0452\u0001\u0000\u0000\u0000\u0452\u0453\u0006"+ - "q\u0005\u0000\u0453\u00e6\u0001\u0000\u0000\u0000\u0454\u0455\u0005/\u0000"+ - "\u0000\u0455\u0456\u0005/\u0000\u0000\u0456\u045a\u0001\u0000\u0000\u0000"+ - "\u0457\u0459\b\u0011\u0000\u0000\u0458\u0457\u0001\u0000\u0000\u0000\u0459"+ - "\u045c\u0001\u0000\u0000\u0000\u045a\u0458\u0001\u0000\u0000\u0000\u045a"+ - "\u045b\u0001\u0000\u0000\u0000\u045b\u045d\u0001\u0000\u0000\u0000\u045c"+ - "\u045a\u0001\u0000\u0000\u0000\u045d\u045e\u0006r\u0006\u0000\u045e\u00e8"+ - "\u0001\u0000\u0000\u0000\u045f\u0460\u0005/\u0000\u0000\u0460\u0461\u0005"+ - "*\u0000\u0000\u0461\u0465\u0001\u0000\u0000\u0000\u0462\u0464\t\u0000"+ - "\u0000\u0000\u0463\u0462\u0001\u0000\u0000\u0000\u0464\u0467\u0001\u0000"+ - "\u0000\u0000\u0465\u0466\u0001\u0000\u0000\u0000\u0465\u0463\u0001\u0000"+ - "\u0000\u0000\u0466\u0468\u0001\u0000\u0000\u0000\u0467\u0465\u0001\u0000"+ - "\u0000\u0000\u0468\u0469\u0005*\u0000\u0000\u0469\u046a\u0005/\u0000\u0000"+ - "\u046a\u046b\u0001\u0000\u0000\u0000\u046b\u046c\u0006s\u0006\u0000\u046c"+ - "\u00ea\u0001\u0000\u0000\u0000\u046d\u046e\u0005.\u0000\u0000\u046e\u046f"+ - "\u0005b\u0000\u0000\u046f\u0470\u0005y\u0000\u0000\u0470\u0471\u0005t"+ - "\u0000\u0000\u0471\u0472\u0005e\u0000\u0000\u0472\u00ec\u0001\u0000\u0000"+ - "\u0000\u0473\u0474\u0005b\u0000\u0000\u0474\u0475\u0005r\u0000\u0000\u0475"+ - "\u06d3\u0005k\u0000\u0000\u0476\u0477\u0005o\u0000\u0000\u0477\u0478\u0005"+ - "r\u0000\u0000\u0478\u06d3\u0005a\u0000\u0000\u0479\u047a\u0005k\u0000"+ - "\u0000\u047a\u047b\u0005i\u0000\u0000\u047b\u06d3\u0005l\u0000\u0000\u047c"+ - "\u047d\u0005s\u0000\u0000\u047d\u047e\u0005l\u0000\u0000\u047e\u06d3\u0005"+ - "o\u0000\u0000\u047f\u0480\u0005n\u0000\u0000\u0480\u0481\u0005o\u0000"+ - "\u0000\u0481\u06d3\u0005p\u0000\u0000\u0482\u0483\u0005a\u0000\u0000\u0483"+ - "\u0484\u0005s\u0000\u0000\u0484\u06d3\u0005l\u0000\u0000\u0485\u0486\u0005"+ - "p\u0000\u0000\u0486\u0487\u0005h\u0000\u0000\u0487\u06d3\u0005p\u0000"+ - "\u0000\u0488\u0489\u0005a\u0000\u0000\u0489\u048a\u0005n\u0000\u0000\u048a"+ - "\u06d3\u0005c\u0000\u0000\u048b\u048c\u0005b\u0000\u0000\u048c\u048d\u0005"+ - "p\u0000\u0000\u048d\u06d3\u0005l\u0000\u0000\u048e\u048f\u0005c\u0000"+ - "\u0000\u048f\u0490\u0005l\u0000\u0000\u0490\u06d3\u0005c\u0000\u0000\u0491"+ - "\u0492\u0005j\u0000\u0000\u0492\u0493\u0005s\u0000\u0000\u0493\u06d3\u0005"+ - "r\u0000\u0000\u0494\u0495\u0005a\u0000\u0000\u0495\u0496\u0005n\u0000"+ - "\u0000\u0496\u06d3\u0005d\u0000\u0000\u0497\u0498\u0005r\u0000\u0000\u0498"+ - "\u0499\u0005l\u0000\u0000\u0499\u06d3\u0005a\u0000\u0000\u049a\u049b\u0005"+ - "b\u0000\u0000\u049b\u049c\u0005i\u0000\u0000\u049c\u06d3\u0005t\u0000"+ - "\u0000\u049d\u049e\u0005r\u0000\u0000\u049e\u049f\u0005o\u0000\u0000\u049f"+ - "\u06d3\u0005l\u0000\u0000\u04a0\u04a1\u0005p\u0000\u0000\u04a1\u04a2\u0005"+ - "l\u0000\u0000\u04a2\u06d3\u0005a\u0000\u0000\u04a3\u04a4\u0005p\u0000"+ - "\u0000\u04a4\u04a5\u0005l\u0000\u0000\u04a5\u06d3\u0005p\u0000\u0000\u04a6"+ - "\u04a7\u0005b\u0000\u0000\u04a7\u04a8\u0005m\u0000\u0000\u04a8\u06d3\u0005"+ - "i\u0000\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005e\u0000"+ - "\u0000\u04ab\u06d3\u0005c\u0000\u0000\u04ac\u04ad\u0005r\u0000\u0000\u04ad"+ - "\u04ae\u0005t\u0000\u0000\u04ae\u06d3\u0005i\u0000\u0000\u04af\u04b0\u0005"+ - "e\u0000\u0000\u04b0\u04b1\u0005o\u0000\u0000\u04b1\u06d3\u0005r\u0000"+ - "\u0000\u04b2\u04b3\u0005s\u0000\u0000\u04b3\u04b4\u0005r\u0000\u0000\u04b4"+ - "\u06d3\u0005e\u0000\u0000\u04b5\u04b6\u0005l\u0000\u0000\u04b6\u04b7\u0005"+ - "s\u0000\u0000\u04b7\u06d3\u0005r\u0000\u0000\u04b8\u04b9\u0005p\u0000"+ - "\u0000\u04b9\u04ba\u0005h\u0000\u0000\u04ba\u06d3\u0005a\u0000\u0000\u04bb"+ - "\u04bc\u0005a\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06d3\u0005"+ - "r\u0000\u0000\u04be\u04bf\u0005j\u0000\u0000\u04bf\u04c0\u0005m\u0000"+ - "\u0000\u04c0\u06d3\u0005p\u0000\u0000\u04c1\u04c2\u0005b\u0000\u0000\u04c2"+ - "\u04c3\u0005v\u0000\u0000\u04c3\u06d3\u0005c\u0000\u0000\u04c4\u04c5\u0005"+ - "c\u0000\u0000\u04c5\u04c6\u0005l\u0000\u0000\u04c6\u06d3\u0005i\u0000"+ - "\u0000\u04c7\u04c8\u0005r\u0000\u0000\u04c8\u04c9\u0005t\u0000\u0000\u04c9"+ - "\u06d3\u0005s\u0000\u0000\u04ca\u04cb\u0005a\u0000\u0000\u04cb\u04cc\u0005"+ - "d\u0000\u0000\u04cc\u06d3\u0005c\u0000\u0000\u04cd\u04ce\u0005r\u0000"+ - "\u0000\u04ce\u04cf\u0005r\u0000\u0000\u04cf\u06d3\u0005a\u0000\u0000\u04d0"+ - "\u04d1\u0005b\u0000\u0000\u04d1\u04d2\u0005v\u0000\u0000\u04d2\u06d3\u0005"+ - "s\u0000\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005e\u0000"+ - "\u0000\u04d5\u06d3\u0005i\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7"+ - "\u04d8\u0005a\u0000\u0000\u04d8\u06d3\u0005x\u0000\u0000\u04d9\u04da\u0005"+ - "s\u0000\u0000\u04da\u04db\u0005t\u0000\u0000\u04db\u06d3\u0005y\u0000"+ - "\u0000\u04dc\u04dd\u0005s\u0000\u0000\u04dd\u04de\u0005t\u0000\u0000\u04de"+ - "\u06d3\u0005a\u0000\u0000\u04df\u04e0\u0005s\u0000\u0000\u04e0\u04e1\u0005"+ - "t\u0000\u0000\u04e1\u06d3\u0005x\u0000\u0000\u04e2\u04e3\u0005d\u0000"+ - "\u0000\u04e3\u04e4\u0005e\u0000\u0000\u04e4\u06d3\u0005y\u0000\u0000\u04e5"+ - "\u04e6\u0005t\u0000\u0000\u04e6\u04e7\u0005x\u0000\u0000\u04e7\u06d3\u0005"+ - "a\u0000\u0000\u04e8\u04e9\u0005x\u0000\u0000\u04e9\u04ea\u0005a\u0000"+ - "\u0000\u04ea\u06d3\u0005a\u0000\u0000\u04eb\u04ec\u0005b\u0000\u0000\u04ec"+ - "\u04ed\u0005c\u0000\u0000\u04ed\u06d3\u0005c\u0000\u0000\u04ee\u04ef\u0005"+ - "a\u0000\u0000\u04ef\u04f0\u0005h\u0000\u0000\u04f0\u06d3\u0005x\u0000"+ - "\u0000\u04f1\u04f2\u0005t\u0000\u0000\u04f2\u04f3\u0005y\u0000\u0000\u04f3"+ - "\u06d3\u0005a\u0000\u0000\u04f4\u04f5\u0005t\u0000\u0000\u04f5\u04f6\u0005"+ - "x\u0000\u0000\u04f6\u06d3\u0005s\u0000\u0000\u04f7\u04f8\u0005t\u0000"+ - "\u0000\u04f8\u04f9\u0005a\u0000\u0000\u04f9\u06d3\u0005s\u0000\u0000\u04fa"+ - "\u04fb\u0005s\u0000\u0000\u04fb\u04fc\u0005h\u0000\u0000\u04fc\u06d3\u0005"+ - "y\u0000\u0000\u04fd\u04fe\u0005s\u0000\u0000\u04fe\u04ff\u0005h\u0000"+ - "\u0000\u04ff\u06d3\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501"+ - "\u0502\u0005d\u0000\u0000\u0502\u06d3\u0005y\u0000\u0000\u0503\u0504\u0005"+ - "l\u0000\u0000\u0504\u0505\u0005d\u0000\u0000\u0505\u06d3\u0005a\u0000"+ - "\u0000\u0506\u0507\u0005l\u0000\u0000\u0507\u0508\u0005d\u0000\u0000\u0508"+ - "\u06d3\u0005x\u0000\u0000\u0509\u050a\u0005l\u0000\u0000\u050a\u050b\u0005"+ - "a\u0000\u0000\u050b\u06d3\u0005x\u0000\u0000\u050c\u050d\u0005t\u0000"+ - "\u0000\u050d\u050e\u0005a\u0000\u0000\u050e\u06d3\u0005y\u0000\u0000\u050f"+ - "\u0510\u0005t\u0000\u0000\u0510\u0511\u0005a\u0000\u0000\u0511\u06d3\u0005"+ - "x\u0000\u0000\u0512\u0513\u0005b\u0000\u0000\u0513\u0514\u0005c\u0000"+ - "\u0000\u0514\u06d3\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516"+ - "\u0517\u0005l\u0000\u0000\u0517\u06d3\u0005v\u0000\u0000\u0518\u0519\u0005"+ - "t\u0000\u0000\u0519\u051a\u0005s\u0000\u0000\u051a\u06d3\u0005x\u0000"+ - "\u0000\u051b\u051c\u0005l\u0000\u0000\u051c\u051d\u0005a\u0000\u0000\u051d"+ - "\u06d3\u0005s\u0000\u0000\u051e\u051f\u0005c\u0000\u0000\u051f\u0520\u0005"+ - "p\u0000\u0000\u0520\u06d3\u0005y\u0000\u0000\u0521\u0522\u0005c\u0000"+ - "\u0000\u0522\u0523\u0005m\u0000\u0000\u0523\u06d3\u0005p\u0000\u0000\u0524"+ - "\u0525\u0005c\u0000\u0000\u0525\u0526\u0005p\u0000\u0000\u0526\u06d3\u0005"+ - "x\u0000\u0000\u0527\u0528\u0005d\u0000\u0000\u0528\u0529\u0005c\u0000"+ - "\u0000\u0529\u06d3\u0005p\u0000\u0000\u052a\u052b\u0005d\u0000\u0000\u052b"+ - "\u052c\u0005e\u0000\u0000\u052c\u06d3\u0005c\u0000\u0000\u052d\u052e\u0005"+ - "i\u0000\u0000\u052e\u052f\u0005n\u0000\u0000\u052f\u06d3\u0005c\u0000"+ - "\u0000\u0530\u0531\u0005a\u0000\u0000\u0531\u0532\u0005x\u0000\u0000\u0532"+ - "\u06d3\u0005s\u0000\u0000\u0533\u0534\u0005b\u0000\u0000\u0534\u0535\u0005"+ - "n\u0000\u0000\u0535\u06d3\u0005e\u0000\u0000\u0536\u0537\u0005c\u0000"+ - "\u0000\u0537\u0538\u0005l\u0000\u0000\u0538\u06d3\u0005d\u0000\u0000\u0539"+ - "\u053a\u0005s\u0000\u0000\u053a\u053b\u0005b\u0000\u0000\u053b\u06d3\u0005"+ - "c\u0000\u0000\u053c\u053d\u0005i\u0000\u0000\u053d\u053e\u0005s\u0000"+ - "\u0000\u053e\u06d3\u0005c\u0000\u0000\u053f\u0540\u0005i\u0000\u0000\u0540"+ - "\u0541\u0005n\u0000\u0000\u0541\u06d3\u0005x\u0000\u0000\u0542\u0543\u0005"+ - "b\u0000\u0000\u0543\u0544\u0005e\u0000\u0000\u0544\u06d3\u0005q\u0000"+ - "\u0000\u0545\u0546\u0005s\u0000\u0000\u0546\u0547\u0005e\u0000\u0000\u0547"+ - "\u06d3\u0005d\u0000\u0000\u0548\u0549\u0005d\u0000\u0000\u0549\u054a\u0005"+ - "e\u0000\u0000\u054a\u06d3\u0005x\u0000\u0000\u054b\u054c\u0005i\u0000"+ - "\u0000\u054c\u054d\u0005n\u0000\u0000\u054d\u06d3\u0005y\u0000\u0000\u054e"+ - "\u054f\u0005r\u0000\u0000\u054f\u0550\u0005o\u0000\u0000\u0550\u06d3\u0005"+ - "r\u0000\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005b\u0000"+ - "\u0000\u0553\u0554\u0005r\u0000\u0000\u0554\u06d3\u00050\u0000\u0000\u0555"+ - "\u0556\u0005b\u0000\u0000\u0556\u0557\u0005b\u0000\u0000\u0557\u0558\u0005"+ - "r\u0000\u0000\u0558\u06d3\u00051\u0000\u0000\u0559\u055a\u0005b\u0000"+ - "\u0000\u055a\u055b\u0005b\u0000\u0000\u055b\u055c\u0005r\u0000\u0000\u055c"+ - "\u06d3\u00052\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005"+ - "b\u0000\u0000\u055f\u0560\u0005r\u0000\u0000\u0560\u06d3\u00053\u0000"+ - "\u0000\u0561\u0562\u0005b\u0000\u0000\u0562\u0563\u0005b\u0000\u0000\u0563"+ - "\u0564\u0005r\u0000\u0000\u0564\u06d3\u00054\u0000\u0000\u0565\u0566\u0005"+ - "b\u0000\u0000\u0566\u0567\u0005b\u0000\u0000\u0567\u0568\u0005r\u0000"+ - "\u0000\u0568\u06d3\u00055\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a"+ - "\u056b\u0005b\u0000\u0000\u056b\u056c\u0005r\u0000\u0000\u056c\u06d3\u0005"+ - "6\u0000\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005b\u0000"+ - "\u0000\u056f\u0570\u0005r\u0000\u0000\u0570\u06d3\u00057\u0000\u0000\u0571"+ - "\u0572\u0005b\u0000\u0000\u0572\u0573\u0005b\u0000\u0000\u0573\u0574\u0005"+ - "s\u0000\u0000\u0574\u06d3\u00050\u0000\u0000\u0575\u0576\u0005b\u0000"+ - "\u0000\u0576\u0577\u0005b\u0000\u0000\u0577\u0578\u0005s\u0000\u0000\u0578"+ - "\u06d3\u00051\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005"+ - "b\u0000\u0000\u057b\u057c\u0005s\u0000\u0000\u057c\u06d3\u00052\u0000"+ - "\u0000\u057d\u057e\u0005b\u0000\u0000\u057e\u057f\u0005b\u0000\u0000\u057f"+ - "\u0580\u0005s\u0000\u0000\u0580\u06d3\u00053\u0000\u0000\u0581\u0582\u0005"+ - "b\u0000\u0000\u0582\u0583\u0005b\u0000\u0000\u0583\u0584\u0005s\u0000"+ - "\u0000\u0584\u06d3\u00054\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586"+ - "\u0587\u0005b\u0000\u0000\u0587\u0588\u0005s\u0000\u0000\u0588\u06d3\u0005"+ - "5\u0000\u0000\u0589\u058a\u0005b\u0000\u0000\u058a\u058b\u0005b\u0000"+ - "\u0000\u058b\u058c\u0005s\u0000\u0000\u058c\u06d3\u00056\u0000\u0000\u058d"+ - "\u058e\u0005b\u0000\u0000\u058e\u058f\u0005b\u0000\u0000\u058f\u0590\u0005"+ - "s\u0000\u0000\u0590\u06d3\u00057\u0000\u0000\u0591\u0592\u0005b\u0000"+ - "\u0000\u0592\u0593\u0005r\u0000\u0000\u0593\u06d3\u0005a\u0000\u0000\u0594"+ - "\u0595\u0005p\u0000\u0000\u0595\u0596\u0005h\u0000\u0000\u0596\u06d3\u0005"+ - "x\u0000\u0000\u0597\u0598\u0005p\u0000\u0000\u0598\u0599\u0005h\u0000"+ - "\u0000\u0599\u06d3\u0005y\u0000\u0000\u059a\u059b\u0005p\u0000\u0000\u059b"+ - "\u059c\u0005l\u0000\u0000\u059c\u06d3\u0005x\u0000\u0000\u059d\u059e\u0005"+ - "p\u0000\u0000\u059e\u059f\u0005l\u0000\u0000\u059f\u06d3\u0005y\u0000"+ - "\u0000\u05a0\u05a1\u0005r\u0000\u0000\u05a1\u05a2\u0005m\u0000\u0000\u05a2"+ - "\u05a3\u0005b\u0000\u0000\u05a3\u06d3\u00050\u0000\u0000\u05a4\u05a5\u0005"+ - "r\u0000\u0000\u05a5\u05a6\u0005m\u0000\u0000\u05a6\u05a7\u0005b\u0000"+ - "\u0000\u05a7\u06d3\u00051\u0000\u0000\u05a8\u05a9\u0005r\u0000\u0000\u05a9"+ - "\u05aa\u0005m\u0000\u0000\u05aa\u05ab\u0005b\u0000\u0000\u05ab\u06d3\u0005"+ - "2\u0000\u0000\u05ac\u05ad\u0005r\u0000\u0000\u05ad\u05ae\u0005m\u0000"+ - "\u0000\u05ae\u05af\u0005b\u0000\u0000\u05af\u06d3\u00053\u0000\u0000\u05b0"+ - "\u05b1\u0005r\u0000\u0000\u05b1\u05b2\u0005m\u0000\u0000\u05b2\u05b3\u0005"+ - "b\u0000\u0000\u05b3\u06d3\u00054\u0000\u0000\u05b4\u05b5\u0005r\u0000"+ - "\u0000\u05b5\u05b6\u0005m\u0000\u0000\u05b6\u05b7\u0005b\u0000\u0000\u05b7"+ - "\u06d3\u00055\u0000\u0000\u05b8\u05b9\u0005r\u0000\u0000\u05b9\u05ba\u0005"+ - "m\u0000\u0000\u05ba\u05bb\u0005b\u0000\u0000\u05bb\u06d3\u00056\u0000"+ - "\u0000\u05bc\u05bd\u0005r\u0000\u0000\u05bd\u05be\u0005m\u0000\u0000\u05be"+ - "\u05bf\u0005b\u0000\u0000\u05bf\u06d3\u00057\u0000\u0000\u05c0\u05c1\u0005"+ - "s\u0000\u0000\u05c1\u05c2\u0005m\u0000\u0000\u05c2\u05c3\u0005b\u0000"+ - "\u0000\u05c3\u06d3\u00050\u0000\u0000\u05c4\u05c5\u0005s\u0000\u0000\u05c5"+ - "\u05c6\u0005m\u0000\u0000\u05c6\u05c7\u0005b\u0000\u0000\u05c7\u06d3\u0005"+ - "1\u0000\u0000\u05c8\u05c9\u0005s\u0000\u0000\u05c9\u05ca\u0005m\u0000"+ - "\u0000\u05ca\u05cb\u0005b\u0000\u0000\u05cb\u06d3\u00052\u0000\u0000\u05cc"+ - "\u05cd\u0005s\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf\u0005"+ - "b\u0000\u0000\u05cf\u06d3\u00053\u0000\u0000\u05d0\u05d1\u0005s\u0000"+ - "\u0000\u05d1\u05d2\u0005m\u0000\u0000\u05d2\u05d3\u0005b\u0000\u0000\u05d3"+ - "\u06d3\u00054\u0000\u0000\u05d4\u05d5\u0005s\u0000\u0000\u05d5\u05d6\u0005"+ - "m\u0000\u0000\u05d6\u05d7\u0005b\u0000\u0000\u05d7\u06d3\u00055\u0000"+ - "\u0000\u05d8\u05d9\u0005s\u0000\u0000\u05d9\u05da\u0005m\u0000\u0000\u05da"+ - "\u05db\u0005b\u0000\u0000\u05db\u06d3\u00056\u0000\u0000\u05dc\u05dd\u0005"+ - "s\u0000\u0000\u05dd\u05de\u0005m\u0000\u0000\u05de\u05df\u0005b\u0000"+ - "\u0000\u05df\u06d3\u00057\u0000\u0000\u05e0\u05e1\u0005s\u0000\u0000\u05e1"+ - "\u05e2\u0005t\u0000\u0000\u05e2\u06d3\u0005p\u0000\u0000\u05e3\u05e4\u0005"+ - "s\u0000\u0000\u05e4\u05e5\u0005t\u0000\u0000\u05e5\u06d3\u0005z\u0000"+ - "\u0000\u05e6\u05e7\u0005t\u0000\u0000\u05e7\u05e8\u0005r\u0000\u0000\u05e8"+ - "\u06d3\u0005b\u0000\u0000\u05e9\u05ea\u0005t\u0000\u0000\u05ea\u05eb\u0005"+ - "s\u0000\u0000\u05eb\u06d3\u0005b\u0000\u0000\u05ec\u05ed\u0005w\u0000"+ - "\u0000\u05ed\u05ee\u0005a\u0000\u0000\u05ee\u06d3\u0005i\u0000\u0000\u05ef"+ - "\u05f0\u0005c\u0000\u0000\u05f0\u05f1\u0005l\u0000\u0000\u05f1\u06d3\u0005"+ - "e\u0000\u0000\u05f2\u05f3\u0005s\u0000\u0000\u05f3\u05f4\u0005e\u0000"+ - "\u0000\u05f4\u06d3\u0005e\u0000\u0000\u05f5\u05f6\u0005t\u0000\u0000\u05f6"+ - "\u05f7\u0005s\u0000\u0000\u05f7\u06d3\u0005y\u0000\u0000\u05f8\u05f9\u0005"+ - "l\u0000\u0000\u05f9\u05fa\u0005b\u0000\u0000\u05fa\u05fb\u0005p\u0000"+ - "\u0000\u05fb\u06d3\u0005l\u0000\u0000\u05fc\u05fd\u0005i\u0000\u0000\u05fd"+ - "\u05fe\u0005n\u0000\u0000\u05fe\u06d3\u0005z\u0000\u0000\u05ff\u0600\u0005"+ - "t\u0000\u0000\u0600\u0601\u0005y\u0000\u0000\u0601\u06d3\u0005s\u0000"+ - "\u0000\u0602\u0603\u0005l\u0000\u0000\u0603\u0604\u0005b\u0000\u0000\u0604"+ - "\u0605\u0005m\u0000\u0000\u0605\u06d3\u0005i\u0000\u0000\u0606\u0607\u0005"+ - "d\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u06d3\u0005z\u0000"+ - "\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005e\u0000\u0000\u060b"+ - "\u06d3\u0005g\u0000\u0000\u060c\u060d\u0005a\u0000\u0000\u060d\u060e\u0005"+ - "s\u0000\u0000\u060e\u06d3\u0005r\u0000\u0000\u060f\u0610\u0005t\u0000"+ - "\u0000\u0610\u0611\u0005a\u0000\u0000\u0611\u06d3\u0005z\u0000\u0000\u0612"+ - "\u0613\u0005l\u0000\u0000\u0613\u0614\u0005b\u0000\u0000\u0614\u0615\u0005"+ - "v\u0000\u0000\u0615\u06d3\u0005c\u0000\u0000\u0616\u0617\u0005t\u0000"+ - "\u0000\u0617\u0618\u0005a\u0000\u0000\u0618\u06d3\u0005b\u0000\u0000\u0619"+ - "\u061a\u0005m\u0000\u0000\u061a\u061b\u0005a\u0000\u0000\u061b\u06d3\u0005"+ - "p\u0000\u0000\u061c\u061d\u0005r\u0000\u0000\u061d\u061e\u0005t\u0000"+ - "\u0000\u061e\u06d3\u0005n\u0000\u0000\u061f\u0620\u0005l\u0000\u0000\u0620"+ - "\u0621\u0005b\u0000\u0000\u0621\u0622\u0005s\u0000\u0000\u0622\u06d3\u0005"+ - "r\u0000\u0000\u0623\u0624\u0005t\u0000\u0000\u0624\u0625\u0005z\u0000"+ - "\u0000\u0625\u06d3\u0005a\u0000\u0000\u0626\u0627\u0005l\u0000\u0000\u0627"+ - "\u0628\u0005b\u0000\u0000\u0628\u0629\u0005v\u0000\u0000\u0629\u06d3\u0005"+ - "s\u0000\u0000\u062a\u062b\u0005t\u0000\u0000\u062b\u062c\u0005b\u0000"+ - "\u0000\u062c\u06d3\u0005a\u0000\u0000\u062d\u062e\u0005l\u0000\u0000\u062e"+ - "\u062f\u0005b\u0000\u0000\u062f\u0630\u0005r\u0000\u0000\u0630\u06d3\u0005"+ - "a\u0000\u0000\u0631\u0632\u0005l\u0000\u0000\u0632\u0633\u0005b\u0000"+ - "\u0000\u0633\u0634\u0005c\u0000\u0000\u0634\u06d3\u0005c\u0000\u0000\u0635"+ - "\u0636\u0005l\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u06d3\u0005"+ - "z\u0000\u0000\u0638\u0639\u0005l\u0000\u0000\u0639\u063a\u0005b\u0000"+ - "\u0000\u063a\u063b\u0005c\u0000\u0000\u063b\u06d3\u0005s\u0000\u0000\u063c"+ - "\u063d\u0005c\u0000\u0000\u063d\u063e\u0005p\u0000\u0000\u063e\u06d3\u0005"+ - "z\u0000\u0000\u063f\u0640\u0005d\u0000\u0000\u0640\u0641\u0005e\u0000"+ - "\u0000\u0641\u06d3\u0005w\u0000\u0000\u0642\u0643\u0005a\u0000\u0000\u0643"+ - "\u0644\u0005s\u0000\u0000\u0644\u06d3\u0005w\u0000\u0000\u0645\u0646\u0005"+ - "l\u0000\u0000\u0646\u0647\u0005b\u0000\u0000\u0647\u0648\u0005n\u0000"+ - "\u0000\u0648\u06d3\u0005e\u0000\u0000\u0649\u064a\u0005p\u0000\u0000\u064a"+ - "\u064b\u0005h\u0000\u0000\u064b\u06d3\u0005z\u0000\u0000\u064c\u064d\u0005"+ - "i\u0000\u0000\u064d\u064e\u0005n\u0000\u0000\u064e\u06d3\u0005w\u0000"+ - "\u0000\u064f\u0650\u0005r\u0000\u0000\u0650\u0651\u0005o\u0000\u0000\u0651"+ - "\u06d3\u0005w\u0000\u0000\u0652\u0653\u0005l\u0000\u0000\u0653\u0654\u0005"+ - "b\u0000\u0000\u0654\u0655\u0005e\u0000\u0000\u0655\u06d3\u0005q\u0000"+ - "\u0000\u0656\u0657\u0005p\u0000\u0000\u0657\u0658\u0005h\u0000\u0000\u0658"+ - "\u06d3\u0005w\u0000\u0000\u0659\u065a\u0005p\u0000\u0000\u065a\u065b\u0005"+ - "l\u0000\u0000\u065b\u06d3\u0005z\u0000\u0000\u065c\u065d\u0005e\u0000"+ - "\u0000\u065d\u065e\u0005o\u0000\u0000\u065e\u06d3\u0005m\u0000\u0000\u065f"+ - "\u0660\u0005a\u0000\u0000\u0660\u0661\u0005d\u0000\u0000\u0661\u0662\u0005"+ - "c\u0000\u0000\u0662\u06d3\u0005q\u0000\u0000\u0663\u0664\u0005a\u0000"+ - "\u0000\u0664\u0665\u0005n\u0000\u0000\u0665\u0666\u0005d\u0000\u0000\u0666"+ - "\u06d3\u0005q\u0000\u0000\u0667\u0668\u0005a\u0000\u0000\u0668\u0669\u0005"+ - "s\u0000\u0000\u0669\u066a\u0005l\u0000\u0000\u066a\u06d3\u0005q\u0000"+ - "\u0000\u066b\u066c\u0005a\u0000\u0000\u066c\u066d\u0005s\u0000\u0000\u066d"+ - "\u066e\u0005r\u0000\u0000\u066e\u06d3\u0005q\u0000\u0000\u066f\u0670\u0005"+ - "b\u0000\u0000\u0670\u0671\u0005i\u0000\u0000\u0671\u0672\u0005t\u0000"+ - "\u0000\u0672\u06d3\u0005q\u0000\u0000\u0673\u0674\u0005c\u0000\u0000\u0674"+ - "\u0675\u0005p\u0000\u0000\u0675\u06d3\u0005q\u0000\u0000\u0676\u0677\u0005"+ - "d\u0000\u0000\u0677\u0678\u0005e\u0000\u0000\u0678\u06d3\u0005q\u0000"+ - "\u0000\u0679\u067a\u0005e\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b"+ - "\u067c\u0005r\u0000\u0000\u067c\u06d3\u0005q\u0000\u0000\u067d\u067e\u0005"+ - "i\u0000\u0000\u067e\u067f\u0005n\u0000\u0000\u067f\u06d3\u0005q\u0000"+ - "\u0000\u0680\u0681\u0005l\u0000\u0000\u0681\u0682\u0005d\u0000\u0000\u0682"+ - "\u06d3\u0005q\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u0685\u0005"+ - "s\u0000\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u06d3\u0005q\u0000"+ - "\u0000\u0687\u0688\u0005o\u0000\u0000\u0688\u0689\u0005r\u0000\u0000\u0689"+ - "\u06d3\u0005q\u0000\u0000\u068a\u068b\u0005r\u0000\u0000\u068b\u068c\u0005"+ - "o\u0000\u0000\u068c\u068d\u0005l\u0000\u0000\u068d\u06d3\u0005q\u0000"+ - "\u0000\u068e\u068f\u0005r\u0000\u0000\u068f\u0690\u0005o\u0000\u0000\u0690"+ - "\u0691\u0005r\u0000\u0000\u0691\u06d3\u0005q\u0000\u0000\u0692\u0693\u0005"+ - "s\u0000\u0000\u0693\u0694\u0005b\u0000\u0000\u0694\u0695\u0005c\u0000"+ - "\u0000\u0695\u06d3\u0005q\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697"+ - "\u0698\u0005t\u0000\u0000\u0698\u06d3\u0005q\u0000\u0000\u0699\u069a\u0005"+ - "s\u0000\u0000\u069a\u069b\u0005x\u0000\u0000\u069b\u06d3\u0005y\u0000"+ - "\u0000\u069c\u069d\u0005s\u0000\u0000\u069d\u069e\u0005t\u0000\u0000\u069e"+ - "\u06d3\u00050\u0000\u0000\u069f\u06a0\u0005s\u0000\u0000\u06a0\u06a1\u0005"+ - "t\u0000\u0000\u06a1\u06d3\u00051\u0000\u0000\u06a2\u06a3\u0005s\u0000"+ - "\u0000\u06a3\u06a4\u0005t\u0000\u0000\u06a4\u06d3\u00052\u0000\u0000\u06a5"+ - "\u06a6\u0005s\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06d3\u0005"+ - "y\u0000\u0000\u06a8\u06a9\u0005t\u0000\u0000\u06a9\u06aa\u0005m\u0000"+ - "\u0000\u06aa\u06d3\u0005a\u0000\u0000\u06ab\u06ac\u0005b\u0000\u0000\u06ac"+ - "\u06ad\u0005s\u0000\u0000\u06ad\u06d3\u0005r\u0000\u0000\u06ae\u06af\u0005"+ - "t\u0000\u0000\u06af\u06b0\u0005a\u0000\u0000\u06b0\u06d3\u0005m\u0000"+ - "\u0000\u06b1\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005s\u0000\u0000\u06b3"+ - "\u06d3\u0005l\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005"+ - "l\u0000\u0000\u06b6\u06d3\u0005a\u0000\u0000\u06b7\u06b8\u0005c\u0000"+ - "\u0000\u06b8\u06b9\u0005l\u0000\u0000\u06b9\u06d3\u0005x\u0000\u0000\u06ba"+ - "\u06bb\u0005c\u0000\u0000\u06bb\u06bc\u0005l\u0000\u0000\u06bc\u06d3\u0005"+ - "y\u0000\u0000\u06bd\u06be\u0005c\u0000\u0000\u06be\u06bf\u0005s\u0000"+ - "\u0000\u06bf\u06d3\u0005h\u0000\u0000\u06c0\u06c1\u0005s\u0000\u0000\u06c1"+ - "\u06c2\u0005e\u0000\u0000\u06c2\u06d3\u0005t\u0000\u0000\u06c3\u06c4\u0005"+ - "t\u0000\u0000\u06c4\u06c5\u0005s\u0000\u0000\u06c5\u06d3\u0005t\u0000"+ - "\u0000\u06c6\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8"+ - "\u06d3\u0005a\u0000\u0000\u06c9\u06ca\u0005t\u0000\u0000\u06ca\u06cb\u0005"+ - "d\u0000\u0000\u06cb\u06d3\u0005d\u0000\u0000\u06cc\u06cd\u0005t\u0000"+ - "\u0000\u06cd\u06ce\u0005i\u0000\u0000\u06ce\u06d3\u0005n\u0000\u0000\u06cf"+ - "\u06d0\u0005t\u0000\u0000\u06d0\u06d1\u0005i\u0000\u0000\u06d1\u06d3\u0005"+ - "i\u0000\u0000\u06d2\u0473\u0001\u0000\u0000\u0000\u06d2\u0476\u0001\u0000"+ - "\u0000\u0000\u06d2\u0479\u0001\u0000\u0000\u0000\u06d2\u047c\u0001\u0000"+ - "\u0000\u0000\u06d2\u047f\u0001\u0000\u0000\u0000\u06d2\u0482\u0001\u0000"+ - "\u0000\u0000\u06d2\u0485\u0001\u0000\u0000\u0000\u06d2\u0488\u0001\u0000"+ - "\u0000\u0000\u06d2\u048b\u0001\u0000\u0000\u0000\u06d2\u048e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0491\u0001\u0000\u0000\u0000\u06d2\u0494\u0001\u0000"+ - "\u0000\u0000\u06d2\u0497\u0001\u0000\u0000\u0000\u06d2\u049a\u0001\u0000"+ - "\u0000\u0000\u06d2\u049d\u0001\u0000\u0000\u0000\u06d2\u04a0\u0001\u0000"+ - "\u0000\u0000\u06d2\u04a3\u0001\u0000\u0000\u0000\u06d2\u04a6\u0001\u0000"+ - "\u0000\u0000\u06d2\u04a9\u0001\u0000\u0000\u0000\u06d2\u04ac\u0001\u0000"+ - "\u0000\u0000\u06d2\u04af\u0001\u0000\u0000\u0000\u06d2\u04b2\u0001\u0000"+ - "\u0000\u0000\u06d2\u04b5\u0001\u0000\u0000\u0000\u06d2\u04b8\u0001\u0000"+ - "\u0000\u0000\u06d2\u04bb\u0001\u0000\u0000\u0000\u06d2\u04be\u0001\u0000"+ - "\u0000\u0000\u06d2\u04c1\u0001\u0000\u0000\u0000\u06d2\u04c4\u0001\u0000"+ - "\u0000\u0000\u06d2\u04c7\u0001\u0000\u0000\u0000\u06d2\u04ca\u0001\u0000"+ - "\u0000\u0000\u06d2\u04cd\u0001\u0000\u0000\u0000\u06d2\u04d0\u0001\u0000"+ - "\u0000\u0000\u06d2\u04d3\u0001\u0000\u0000\u0000\u06d2\u04d6\u0001\u0000"+ - "\u0000\u0000\u06d2\u04d9\u0001\u0000\u0000\u0000\u06d2\u04dc\u0001\u0000"+ - "\u0000\u0000\u06d2\u04df\u0001\u0000\u0000\u0000\u06d2\u04e2\u0001\u0000"+ - "\u0000\u0000\u06d2\u04e5\u0001\u0000\u0000\u0000\u06d2\u04e8\u0001\u0000"+ - "\u0000\u0000\u06d2\u04eb\u0001\u0000\u0000\u0000\u06d2\u04ee\u0001\u0000"+ - "\u0000\u0000\u06d2\u04f1\u0001\u0000\u0000\u0000\u06d2\u04f4\u0001\u0000"+ - "\u0000\u0000\u06d2\u04f7\u0001\u0000\u0000\u0000\u06d2\u04fa\u0001\u0000"+ - "\u0000\u0000\u06d2\u04fd\u0001\u0000\u0000\u0000\u06d2\u0500\u0001\u0000"+ - "\u0000\u0000\u06d2\u0503\u0001\u0000\u0000\u0000\u06d2\u0506\u0001\u0000"+ - "\u0000\u0000\u06d2\u0509\u0001\u0000\u0000\u0000\u06d2\u050c\u0001\u0000"+ - "\u0000\u0000\u06d2\u050f\u0001\u0000\u0000\u0000\u06d2\u0512\u0001\u0000"+ - "\u0000\u0000\u06d2\u0515\u0001\u0000\u0000\u0000\u06d2\u0518\u0001\u0000"+ - "\u0000\u0000\u06d2\u051b\u0001\u0000\u0000\u0000\u06d2\u051e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0521\u0001\u0000\u0000\u0000\u06d2\u0524\u0001\u0000"+ - "\u0000\u0000\u06d2\u0527\u0001\u0000\u0000\u0000\u06d2\u052a\u0001\u0000"+ - "\u0000\u0000\u06d2\u052d\u0001\u0000\u0000\u0000\u06d2\u0530\u0001\u0000"+ - "\u0000\u0000\u06d2\u0533\u0001\u0000\u0000\u0000\u06d2\u0536\u0001\u0000"+ - "\u0000\u0000\u06d2\u0539\u0001\u0000\u0000\u0000\u06d2\u053c\u0001\u0000"+ - "\u0000\u0000\u06d2\u053f\u0001\u0000\u0000\u0000\u06d2\u0542\u0001\u0000"+ - "\u0000\u0000\u06d2\u0545\u0001\u0000\u0000\u0000\u06d2\u0548\u0001\u0000"+ - "\u0000\u0000\u06d2\u054b\u0001\u0000\u0000\u0000\u06d2\u054e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0551\u0001\u0000\u0000\u0000\u06d2\u0555\u0001\u0000"+ - "\u0000\u0000\u06d2\u0559\u0001\u0000\u0000\u0000\u06d2\u055d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0561\u0001\u0000\u0000\u0000\u06d2\u0565\u0001\u0000"+ - "\u0000\u0000\u06d2\u0569\u0001\u0000\u0000\u0000\u06d2\u056d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0571\u0001\u0000\u0000\u0000\u06d2\u0575\u0001\u0000"+ - "\u0000\u0000\u06d2\u0579\u0001\u0000\u0000\u0000\u06d2\u057d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0581\u0001\u0000\u0000\u0000\u06d2\u0585\u0001\u0000"+ - "\u0000\u0000\u06d2\u0589\u0001\u0000\u0000\u0000\u06d2\u058d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0591\u0001\u0000\u0000\u0000\u06d2\u0594\u0001\u0000"+ - "\u0000\u0000\u06d2\u0597\u0001\u0000\u0000\u0000\u06d2\u059a\u0001\u0000"+ - "\u0000\u0000\u06d2\u059d\u0001\u0000\u0000\u0000\u06d2\u05a0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05a4\u0001\u0000\u0000\u0000\u06d2\u05a8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05ac\u0001\u0000\u0000\u0000\u06d2\u05b0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05b4\u0001\u0000\u0000\u0000\u06d2\u05b8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05bc\u0001\u0000\u0000\u0000\u06d2\u05c0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05c4\u0001\u0000\u0000\u0000\u06d2\u05c8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05cc\u0001\u0000\u0000\u0000\u06d2\u05d0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05d4\u0001\u0000\u0000\u0000\u06d2\u05d8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05dc\u0001\u0000\u0000\u0000\u06d2\u05e0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05e3\u0001\u0000\u0000\u0000\u06d2\u05e6\u0001\u0000"+ - "\u0000\u0000\u06d2\u05e9\u0001\u0000\u0000\u0000\u06d2\u05ec\u0001\u0000"+ - "\u0000\u0000\u06d2\u05ef\u0001\u0000\u0000\u0000\u06d2\u05f2\u0001\u0000"+ - "\u0000\u0000\u06d2\u05f5\u0001\u0000\u0000\u0000\u06d2\u05f8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05fc\u0001\u0000\u0000\u0000\u06d2\u05ff\u0001\u0000"+ - "\u0000\u0000\u06d2\u0602\u0001\u0000\u0000\u0000\u06d2\u0606\u0001\u0000"+ - "\u0000\u0000\u06d2\u0609\u0001\u0000\u0000\u0000\u06d2\u060c\u0001\u0000"+ - "\u0000\u0000\u06d2\u060f\u0001\u0000\u0000\u0000\u06d2\u0612\u0001\u0000"+ - "\u0000\u0000\u06d2\u0616\u0001\u0000\u0000\u0000\u06d2\u0619\u0001\u0000"+ - "\u0000\u0000\u06d2\u061c\u0001\u0000\u0000\u0000\u06d2\u061f\u0001\u0000"+ - "\u0000\u0000\u06d2\u0623\u0001\u0000\u0000\u0000\u06d2\u0626\u0001\u0000"+ - "\u0000\u0000\u06d2\u062a\u0001\u0000\u0000\u0000\u06d2\u062d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0631\u0001\u0000\u0000\u0000\u06d2\u0635\u0001\u0000"+ - "\u0000\u0000\u06d2\u0638\u0001\u0000\u0000\u0000\u06d2\u063c\u0001\u0000"+ - "\u0000\u0000\u06d2\u063f\u0001\u0000\u0000\u0000\u06d2\u0642\u0001\u0000"+ - "\u0000\u0000\u06d2\u0645\u0001\u0000\u0000\u0000\u06d2\u0649\u0001\u0000"+ - "\u0000\u0000\u06d2\u064c\u0001\u0000\u0000\u0000\u06d2\u064f\u0001\u0000"+ - "\u0000\u0000\u06d2\u0652\u0001\u0000\u0000\u0000\u06d2\u0656\u0001\u0000"+ - "\u0000\u0000\u06d2\u0659\u0001\u0000\u0000\u0000\u06d2\u065c\u0001\u0000"+ - "\u0000\u0000\u06d2\u065f\u0001\u0000\u0000\u0000\u06d2\u0663\u0001\u0000"+ - "\u0000\u0000\u06d2\u0667\u0001\u0000\u0000\u0000\u06d2\u066b\u0001\u0000"+ - "\u0000\u0000\u06d2\u066f\u0001\u0000\u0000\u0000\u06d2\u0673\u0001\u0000"+ - "\u0000\u0000\u06d2\u0676\u0001\u0000\u0000\u0000\u06d2\u0679\u0001\u0000"+ - "\u0000\u0000\u06d2\u067d\u0001\u0000\u0000\u0000\u06d2\u0680\u0001\u0000"+ - "\u0000\u0000\u06d2\u0683\u0001\u0000\u0000\u0000\u06d2\u0687\u0001\u0000"+ - "\u0000\u0000\u06d2\u068a\u0001\u0000\u0000\u0000\u06d2\u068e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0692\u0001\u0000\u0000\u0000\u06d2\u0696\u0001\u0000"+ - "\u0000\u0000\u06d2\u0699\u0001\u0000\u0000\u0000\u06d2\u069c\u0001\u0000"+ - "\u0000\u0000\u06d2\u069f\u0001\u0000\u0000\u0000\u06d2\u06a2\u0001\u0000"+ - "\u0000\u0000\u06d2\u06a5\u0001\u0000\u0000\u0000\u06d2\u06a8\u0001\u0000"+ - "\u0000\u0000\u06d2\u06ab\u0001\u0000\u0000\u0000\u06d2\u06ae\u0001\u0000"+ - "\u0000\u0000\u06d2\u06b1\u0001\u0000\u0000\u0000\u06d2\u06b4\u0001\u0000"+ - "\u0000\u0000\u06d2\u06b7\u0001\u0000\u0000\u0000\u06d2\u06ba\u0001\u0000"+ - "\u0000\u0000\u06d2\u06bd\u0001\u0000\u0000\u0000\u06d2\u06c0\u0001\u0000"+ - "\u0000\u0000\u06d2\u06c3\u0001\u0000\u0000\u0000\u06d2\u06c6\u0001\u0000"+ - "\u0000\u0000\u06d2\u06c9\u0001\u0000\u0000\u0000\u06d2\u06cc\u0001\u0000"+ - "\u0000\u0000\u06d2\u06cf\u0001\u0000\u0000\u0000\u06d3\u00ee\u0001\u0000"+ - "\u0000\u0000\u06d4\u06d5\u0005#\u0000\u0000\u06d5\u00f0\u0001\u0000\u0000"+ - "\u0000\u06d6\u06d7\u0005:\u0000\u0000\u06d7\u00f2\u0001\u0000\u0000\u0000"+ - "\u06d8\u06d9\u0005,\u0000\u0000\u06d9\u00f4\u0001\u0000\u0000\u0000\u06da"+ - "\u06db\u0005(\u0000\u0000\u06db\u00f6\u0001\u0000\u0000\u0000\u06dc\u06dd"+ - "\u0005)\u0000\u0000\u06dd\u00f8\u0001\u0000\u0000\u0000\u06de\u06df\u0005"+ - "[\u0000\u0000\u06df\u00fa\u0001\u0000\u0000\u0000\u06e0\u06e1\u0005]\u0000"+ - "\u0000\u06e1\u00fc\u0001\u0000\u0000\u0000\u06e2\u06e3\u0005.\u0000\u0000"+ - "\u06e3\u00fe\u0001\u0000\u0000\u0000\u06e4\u06e5\u0005<\u0000\u0000\u06e5"+ - "\u06e6\u0005<\u0000\u0000\u06e6\u0100\u0001\u0000\u0000\u0000\u06e7\u06e8"+ - "\u0005>\u0000\u0000\u06e8\u06e9\u0005>\u0000\u0000\u06e9\u0102\u0001\u0000"+ - "\u0000\u0000\u06ea\u06eb\u0005+\u0000\u0000\u06eb\u0104\u0001\u0000\u0000"+ - "\u0000\u06ec\u06ed\u0005-\u0000\u0000\u06ed\u0106\u0001\u0000\u0000\u0000"+ - "\u06ee\u06ef\u0005<\u0000\u0000\u06ef\u0108\u0001\u0000\u0000\u0000\u06f0"+ - "\u06f1\u0005>\u0000\u0000\u06f1\u010a\u0001\u0000\u0000\u0000\u06f2\u06f3"+ - "\u0005*\u0000\u0000\u06f3\u010c\u0001\u0000\u0000\u0000\u06f4\u06f5\u0005"+ - "/\u0000\u0000\u06f5\u010e\u0001\u0000\u0000\u0000\u06f6\u06f7\u0005{\u0000"+ - "\u0000\u06f7\u06f8\u0006\u0086\u0007\u0000\u06f8\u0110\u0001\u0000\u0000"+ - "\u0000\u06f9\u06fa\u0005}\u0000\u0000\u06fa\u06fb\u0006\u0087\b\u0000"+ - "\u06fb\u0112\u0001\u0000\u0000\u0000\u06fc\u06ff\u0003\u0115\u0089\u0000"+ - "\u06fd\u06ff\u0003\u011d\u008d\u0000\u06fe\u06fc\u0001\u0000\u0000\u0000"+ - "\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff\u0114\u0001\u0000\u0000\u0000"+ - "\u0700\u0704\u0003\u0117\u008a\u0000\u0701\u0704\u0003\u0119\u008b\u0000"+ - "\u0702\u0704\u0003\u011b\u008c\u0000\u0703\u0700\u0001\u0000\u0000\u0000"+ - "\u0703\u0701\u0001\u0000\u0000\u0000\u0703\u0702\u0001\u0000\u0000\u0000"+ - "\u0704\u0116\u0001\u0000\u0000\u0000\u0705\u0709\u0005%\u0000\u0000\u0706"+ - "\u0708\u0003\u0125\u0091\u0000\u0707\u0706\u0001\u0000\u0000\u0000\u0708"+ - "\u070b\u0001\u0000\u0000\u0000\u0709\u0707\u0001\u0000\u0000\u0000\u0709"+ - "\u070a\u0001\u0000\u0000\u0000\u070a\u070c\u0001\u0000\u0000\u0000\u070b"+ - "\u0709\u0001\u0000\u0000\u0000\u070c\u070e\u0005.\u0000\u0000\u070d\u070f"+ - "\u0003\u0125\u0091\u0000\u070e\u070d\u0001\u0000\u0000\u0000\u070f\u0710"+ - "\u0001\u0000\u0000\u0000\u0710\u070e\u0001\u0000\u0000\u0000\u0710\u0711"+ - "\u0001\u0000\u0000\u0000\u0711\u0118\u0001\u0000\u0000\u0000\u0712\u0714"+ - "\u0003\u0127\u0092\u0000\u0713\u0712\u0001\u0000\u0000\u0000\u0714\u0717"+ - "\u0001\u0000\u0000\u0000\u0715\u0713\u0001\u0000\u0000\u0000\u0715\u0716"+ - "\u0001\u0000\u0000\u0000\u0716\u0718\u0001\u0000\u0000\u0000\u0717\u0715"+ - "\u0001\u0000\u0000\u0000\u0718\u071a\u0005.\u0000\u0000\u0719\u071b\u0003"+ - "\u0127\u0092\u0000\u071a\u0719\u0001\u0000\u0000\u0000\u071b\u071c\u0001"+ - "\u0000\u0000\u0000\u071c\u071a\u0001\u0000\u0000\u0000\u071c\u071d\u0001"+ - "\u0000\u0000\u0000\u071d\u011a\u0001\u0000\u0000\u0000\u071e\u0722\u0005"+ - "$\u0000\u0000\u071f\u0721\u0003\u0129\u0093\u0000\u0720\u071f\u0001\u0000"+ - "\u0000\u0000\u0721\u0724\u0001\u0000\u0000\u0000\u0722\u0720\u0001\u0000"+ - "\u0000\u0000\u0722\u0723\u0001\u0000\u0000\u0000\u0723\u0725\u0001\u0000"+ - "\u0000\u0000\u0724\u0722\u0001\u0000\u0000\u0000\u0725\u0727\u0005.\u0000"+ - "\u0000\u0726\u0728\u0003\u0129\u0093\u0000\u0727\u0726\u0001\u0000\u0000"+ - "\u0000\u0728\u0729\u0001\u0000\u0000\u0000\u0729\u0727\u0001\u0000\u0000"+ - "\u0000\u0729\u072a\u0001\u0000\u0000\u0000\u072a\u011c\u0001\u0000\u0000"+ - "\u0000\u072b\u072f\u0003\u0121\u008f\u0000\u072c\u072f\u0003\u0123\u0090"+ - "\u0000\u072d\u072f\u0003\u011f\u008e\u0000\u072e\u072b\u0001\u0000\u0000"+ - "\u0000\u072e\u072c\u0001\u0000\u0000\u0000\u072e\u072d\u0001\u0000\u0000"+ - "\u0000\u072f\u011e\u0001\u0000\u0000\u0000\u0730\u0732\u0005%\u0000\u0000"+ - "\u0731\u0733\u0003\u0125\u0091\u0000\u0732\u0731\u0001\u0000\u0000\u0000"+ - "\u0733\u0734\u0001\u0000\u0000\u0000\u0734\u0732\u0001\u0000\u0000\u0000"+ - "\u0734\u0735\u0001\u0000\u0000\u0000\u0735\u0120\u0001\u0000\u0000\u0000"+ - "\u0736\u0738\u0003\u0127\u0092\u0000\u0737\u0736\u0001\u0000\u0000\u0000"+ - "\u0738\u0739\u0001\u0000\u0000\u0000\u0739\u0737\u0001\u0000\u0000\u0000"+ - "\u0739\u073a\u0001\u0000\u0000\u0000\u073a\u0122\u0001\u0000\u0000\u0000"+ - "\u073b\u073d\u0005$\u0000\u0000\u073c\u073e\u0003\u0129\u0093\u0000\u073d"+ - "\u073c\u0001\u0000\u0000\u0000\u073e\u073f\u0001\u0000\u0000\u0000\u073f"+ - "\u073d\u0001\u0000\u0000\u0000\u073f\u0740\u0001\u0000\u0000\u0000\u0740"+ - "\u0124\u0001\u0000\u0000\u0000\u0741\u0742\u0007\u0004\u0000\u0000\u0742"+ - "\u0126\u0001\u0000\u0000\u0000\u0743\u0744\u0007\u0005\u0000\u0000\u0744"+ - "\u0128\u0001\u0000\u0000\u0000\u0745\u0746\u0007\u0006\u0000\u0000\u0746"+ - "\u012a\u0001\u0000\u0000\u0000\u0747\u074b\u0005\'\u0000\u0000\u0748\u0749"+ - "\u0005\\\u0000\u0000\u0749\u074c\u0007\u0012\u0000\u0000\u074a\u074c\b"+ - "\u000f\u0000\u0000\u074b\u0748\u0001\u0000\u0000\u0000\u074b\u074a\u0001"+ - "\u0000\u0000\u0000\u074c\u074d\u0001\u0000\u0000\u0000\u074d\u074e\u0005"+ - "\'\u0000\u0000\u074e\u012c\u0001\u0000\u0000\u0000\u074f\u0751\u0003\u012f"+ - "\u0096\u0000\u0750\u0752\u0007\u0013\u0000\u0000\u0751\u0750\u0001\u0000"+ - "\u0000\u0000\u0752\u0753\u0001\u0000\u0000\u0000\u0753\u0751\u0001\u0000"+ - "\u0000\u0000\u0753\u0754\u0001\u0000\u0000\u0000\u0754\u012e\u0001\u0000"+ - "\u0000\u0000\u0755\u0759\u0005!\u0000\u0000\u0756\u0758\u0003\u0135\u0099"+ - "\u0000\u0757\u0756\u0001\u0000\u0000\u0000\u0758\u075b\u0001\u0000\u0000"+ - "\u0000\u0759\u0757\u0001\u0000\u0000\u0000\u0759\u075a\u0001\u0000\u0000"+ - "\u0000\u075a\u0130\u0001\u0000\u0000\u0000\u075b\u0759\u0001\u0000\u0000"+ - "\u0000\u075c\u0760\u0003\u0133\u0098\u0000\u075d\u075f\u0003\u0135\u0099"+ - "\u0000\u075e\u075d\u0001\u0000\u0000\u0000\u075f\u0762\u0001\u0000\u0000"+ - "\u0000\u0760\u075e\u0001\u0000\u0000\u0000\u0760\u0761\u0001\u0000\u0000"+ - "\u0000\u0761\u0132\u0001\u0000\u0000\u0000\u0762\u0760\u0001\u0000\u0000"+ - "\u0000\u0763\u0764\u0007\u0007\u0000\u0000\u0764\u0134\u0001\u0000\u0000"+ - "\u0000\u0765\u0766\u0007\b\u0000\u0000\u0766\u0136\u0001\u0000\u0000\u0000"+ - "\u0767\u0768\u0005@\u0000\u0000\u0768\u0769\u0003\u0131\u0097\u0000\u0769"+ - "\u0138\u0001\u0000\u0000\u0000\u076a\u076c\u0007\u0010\u0000\u0000\u076b"+ - "\u076a\u0001\u0000\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076d"+ - "\u076b\u0001\u0000\u0000\u0000\u076d\u076e\u0001\u0000\u0000\u0000\u076e"+ - "\u076f\u0001\u0000\u0000\u0000\u076f\u0770\u0006\u009b\u0005\u0000\u0770"+ - "\u013a\u0001\u0000\u0000\u0000\u0771\u0772\u0005/\u0000\u0000\u0772\u0773"+ - "\u0005/\u0000\u0000\u0773\u0777\u0001\u0000\u0000\u0000\u0774\u0776\b"+ - "\u0011\u0000\u0000\u0775\u0774\u0001\u0000\u0000\u0000\u0776\u0779\u0001"+ - "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ - "\u0000\u0000\u0000\u0778\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001"+ - "\u0000\u0000\u0000\u077a\u077b\u0006\u009c\u0006\u0000\u077b\u013c\u0001"+ - "\u0000\u0000\u0000\u077c\u077d\u0005/\u0000\u0000\u077d\u077e\u0005*\u0000"+ - "\u0000\u077e\u0782\u0001\u0000\u0000\u0000\u077f\u0781\t\u0000\u0000\u0000"+ - "\u0780\u077f\u0001\u0000\u0000\u0000\u0781\u0784\u0001\u0000\u0000\u0000"+ - "\u0782\u0783\u0001\u0000\u0000\u0000\u0782\u0780\u0001\u0000\u0000\u0000"+ - "\u0783\u0785\u0001\u0000\u0000\u0000\u0784\u0782\u0001\u0000\u0000\u0000"+ - "\u0785\u0786\u0005*\u0000\u0000\u0786\u0787\u0005/\u0000\u0000\u0787\u0788"+ - "\u0001\u0000\u0000\u0000\u0788\u0789\u0006\u009d\u0006\u0000\u0789\u013e"+ - "\u0001\u0000\u0000\u0000\u078a\u078c\u0005<\u0000\u0000\u078b\u078d\u0007"+ - "\u0014\u0000\u0000\u078c\u078b\u0001\u0000\u0000\u0000\u078d\u078e\u0001"+ - "\u0000\u0000\u0000\u078e\u078c\u0001\u0000\u0000\u0000\u078e\u078f\u0001"+ - "\u0000\u0000\u0000\u078f\u0790\u0001\u0000\u0000\u0000\u0790\u0791\u0005"+ - ">\u0000\u0000\u0791\u0792\u0006\u009e\t\u0000\u0792\u0140\u0001\u0000"+ - "\u0000\u0000\u0793\u0799\u0005\"\u0000\u0000\u0794\u0795\u0005\\\u0000"+ - "\u0000\u0795\u0798\u0005\"\u0000\u0000\u0796\u0798\b\t\u0000\u0000\u0797"+ - "\u0794\u0001\u0000\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798"+ - "\u079b\u0001\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799"+ - "\u079a\u0001\u0000\u0000\u0000\u079a\u079c\u0001\u0000\u0000\u0000\u079b"+ - "\u0799\u0001\u0000\u0000\u0000\u079c\u079d\u0005\"\u0000\u0000\u079d\u079e"+ - "\u0006\u009f\n\u0000\u079e\u0142\u0001\u0000\u0000\u0000\u079f\u07a1\u0007"+ - "\u0010\u0000\u0000\u07a0\u079f\u0001\u0000\u0000\u0000\u07a1\u07a2\u0001"+ - "\u0000\u0000\u0000\u07a2\u07a0\u0001\u0000\u0000\u0000\u07a2\u07a3\u0001"+ - "\u0000\u0000\u0000\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a5\u0006"+ - "\u00a0\u0005\u0000\u07a5\u0144\u0001\u0000\u0000\u0000\u07a6\u07a7\u0005"+ - "/\u0000\u0000\u07a7\u07a8\u0005/\u0000\u0000\u07a8\u07ac\u0001\u0000\u0000"+ - "\u0000\u07a9\u07ab\b\u0011\u0000\u0000\u07aa\u07a9\u0001\u0000\u0000\u0000"+ - "\u07ab\u07ae\u0001\u0000\u0000\u0000\u07ac\u07aa\u0001\u0000\u0000\u0000"+ - "\u07ac\u07ad\u0001\u0000\u0000\u0000\u07ad\u07af\u0001\u0000\u0000\u0000"+ - "\u07ae\u07ac\u0001\u0000\u0000\u0000\u07af\u07b0\u0006\u00a1\u0006\u0000"+ - "\u07b0\u0146\u0001\u0000\u0000\u0000\u07b1\u07b2\u0005/\u0000\u0000\u07b2"+ - "\u07b3\u0005*\u0000\u0000\u07b3\u07b7\u0001\u0000\u0000\u0000\u07b4\u07b6"+ - "\t\u0000\u0000\u0000\u07b5\u07b4\u0001\u0000\u0000\u0000\u07b6\u07b9\u0001"+ - "\u0000\u0000\u0000\u07b7\u07b8\u0001\u0000\u0000\u0000\u07b7\u07b5\u0001"+ - "\u0000\u0000\u0000\u07b8\u07ba\u0001\u0000\u0000\u0000\u07b9\u07b7\u0001"+ - "\u0000\u0000\u0000\u07ba\u07bb\u0005*\u0000\u0000\u07bb\u07bc\u0005/\u0000"+ - "\u0000\u07bc\u07bd\u0001\u0000\u0000\u0000\u07bd\u07be\u0006\u00a2\u0006"+ - "\u0000\u07be\u0148\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b6\u027c"+ - "\u032d\u0338\u0340\u0370\u03ae\u03b3\u03ba\u03bf\u03c6\u03cb\u03d2\u03d9"+ - "\u03de\u03e5\u03ea\u03ef\u03f6\u03fc\u03fe\u0403\u040a\u040f\u041b\u0428"+ - "\u042a\u042f\u0433\u0435\u0438\u043e\u0441\u0446\u0449\u0450\u045a\u0465"+ - "\u06d2\u06fe\u0703\u0709\u0710\u0715\u071c\u0722\u0729\u072e\u0734\u0739"+ - "\u073f\u074b\u0753\u0759\u0760\u076d\u0777\u0782\u078e\u0797\u0799\u07a2"+ - "\u07ac\u07b7\u000b\u0001\u0000\u0000\u0001C\u0001\u0001Q\u0002\u0001R"+ - "\u0003\u0001l\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0086\u0005"+ - "\u0001\u0087\u0006\u0001\u009e\u0007\u0001\u009f\b"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/gen/KickCLexer.tokens b/gen/KickCLexer.tokens deleted file mode 100644 index 2f4afb435..000000000 --- a/gen/KickCLexer.tokens +++ /dev/null @@ -1,227 +0,0 @@ -TYPEDEFNAME=1 -CURLY_BEGIN=2 -CURLY_END=3 -BRACKET_BEGIN=4 -BRACKET_END=5 -PAR_BEGIN=6 -PAR_END=7 -SEMICOLON=8 -COLON=9 -COMMA=10 -RANGE=11 -PARAM_LIST=12 -CONDITION=13 -DOT=14 -ARROW=15 -PLUS=16 -MINUS=17 -ASTERISK=18 -DIVIDE=19 -MODULO=20 -INC=21 -DEC=22 -AND=23 -BIT_NOT=24 -BIT_XOR=25 -BIT_OR=26 -SHIFT_LEFT=27 -SHIFT_RIGHT=28 -EQUAL=29 -NOT_EQUAL=30 -LESS_THAN=31 -LESS_THAN_EQUAL=32 -GREATER_THAN_EQUAL=33 -GREATER_THAN=34 -LOGIC_AND=35 -LOGIC_OR=36 -ASSIGN=37 -ASSIGN_COMPOUND=38 -TYPEDEF=39 -CONST=40 -EXTERN=41 -EXPORT=42 -ALIGN=43 -INLINE=44 -VOLATILE=45 -STATIC=46 -INTERRUPT=47 -REGISTER=48 -LOCAL_RESERVE=49 -ADDRESS=50 -ADDRESS_ZEROPAGE=51 -ADDRESS_MAINMEM=52 -FAR=53 -NEAR=54 -FORM_SSA=55 -FORM_MA=56 -INTRINSIC=57 -CALLINGCONVENTION=58 -IF=59 -ELSE=60 -WHILE=61 -DO=62 -FOR=63 -SWITCH=64 -RETURN=65 -BREAK=66 -CONTINUE=67 -GOTO=68 -ASM=69 -DEFAULT=70 -CASE=71 -STRUCT=72 -UNION=73 -ENUM=74 -SIZEOF=75 -TYPEID=76 -DEFINED=77 -KICKASM=78 -LOGIC_NOT=79 -SIMPLETYPE=80 -BOOLEAN=81 -KICKASM_BODY=82 -IMPORT=83 -INCLUDE=84 -PRAGMA=85 -DEFINE=86 -DEFINE_CONTINUE=87 -UNDEF=88 -IFDEF=89 -IFNDEF=90 -IFIF=91 -ELIF=92 -IFELSE=93 -ENDIF=94 -ERROR=95 -TOKEN_STRINGIZE=96 -TOKEN_MERGE=97 -NUMBER=98 -NUMFLOAT=99 -BINFLOAT=100 -DECFLOAT=101 -HEXFLOAT=102 -NUMINT=103 -BININTEGER=104 -DECINTEGER=105 -HEXINTEGER=106 -NAME=107 -STRING=108 -CHAR=109 -WS=110 -COMMENT_LINE=111 -COMMENT_BLOCK=112 -ASM_BYTE=113 -ASM_MNEMONIC=114 -ASM_IMM=115 -ASM_COLON=116 -ASM_COMMA=117 -ASM_PAR_BEGIN=118 -ASM_PAR_END=119 -ASM_BRACKET_BEGIN=120 -ASM_BRACKET_END=121 -ASM_DOT=122 -ASM_SHIFT_LEFT=123 -ASM_SHIFT_RIGHT=124 -ASM_PLUS=125 -ASM_MINUS=126 -ASM_LESS_THAN=127 -ASM_GREATER_THAN=128 -ASM_MULTIPLY=129 -ASM_DIVIDE=130 -ASM_CURLY_BEGIN=131 -ASM_CURLY_END=132 -ASM_NUMBER=133 -ASM_NUMFLOAT=134 -ASM_BINFLOAT=135 -ASM_DECFLOAT=136 -ASM_HEXFLOAT=137 -ASM_NUMINT=138 -ASM_BININTEGER=139 -ASM_DECINTEGER=140 -ASM_HEXINTEGER=141 -ASM_CHAR=142 -ASM_MULTI_REL=143 -ASM_MULTI_NAME=144 -ASM_NAME=145 -ASM_TAG=146 -ASM_WS=147 -ASM_COMMENT_LINE=148 -ASM_COMMENT_BLOCK=149 -IMPORT_SYSTEMFILE=150 -IMPORT_LOCALFILE=151 -IMPORT_WS=152 -IMPORT_COMMENT_LINE=153 -IMPORT_COMMENT_BLOCK=154 -';'=8 -'..'=11 -'...'=12 -'?'=13 -'->'=15 -'%'=20 -'++'=21 -'--'=22 -'&'=23 -'~'=24 -'^'=25 -'|'=26 -'=='=29 -'!='=30 -'<='=32 -'>='=33 -'&&'=35 -'||'=36 -'='=37 -'typedef'=39 -'const'=40 -'extern'=41 -'__export'=42 -'__align'=43 -'inline'=44 -'volatile'=45 -'static'=46 -'__interrupt'=47 -'register'=48 -'__zp_reserve'=49 -'__address'=50 -'__zp'=51 -'__mem'=52 -'__far'=53 -'__near'=54 -'__ssa'=55 -'__ma'=56 -'__intrinsic'=57 -'if'=59 -'else'=60 -'while'=61 -'do'=62 -'for'=63 -'switch'=64 -'return'=65 -'break'=66 -'continue'=67 -'goto'=68 -'asm'=69 -'default'=70 -'case'=71 -'struct'=72 -'union'=73 -'enum'=74 -'sizeof'=75 -'typeid'=76 -'defined'=77 -'kickasm'=78 -'!'=79 -'#import'=83 -'#include'=84 -'#pragma'=85 -'#define'=86 -'#undef'=88 -'#ifdef'=89 -'#ifndef'=90 -'#if'=91 -'#elif'=92 -'#else'=93 -'#endif'=94 -'#error'=95 -'.byte'=113 -'#'=115 From f81c5ce04035554a045f3173efcb4228ec59cb7b Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 26 Mar 2023 18:30:09 +0200 Subject: [PATCH 13/50] Adding the fix code segment in far call bank. Added the currentBankLocation to the procedure definition. (cherry picked from commit 0d90caebe8dd528b2a36d1e151f26820e40e70f5) (cherry picked from commit 8cbf1b5b4bd7f62326e454bbff7ab5456647615d) --- .../camelot64/kickc/passes/Pass0GenerateStatementSequence.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index b6cf3dae6..0026ec069 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -588,6 +588,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Sun, 26 Mar 2023 18:30:53 +0200 Subject: [PATCH 14/50] - Inline code can never be banked. (cherry picked from commit 249b7600a9262ea673e63d133db75690af43ca05) --- .../kickc/passes/Pass4CodeGeneration.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 0d3568c70..60b8aa5dd 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -894,20 +894,27 @@ public class Pass4CodeGeneration { } else if (statement instanceof StatementCallExecute) { // TODO: This part seems never to be executed! Old code? StatementCallExecute call = (StatementCallExecute) statement; - Procedure procedure = getScope().getProcedure(call.getProcedure()); - Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. RValue procedureRVal = call.getProcedureRVal(); - // Same as PHI - if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); - } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); - } + // Generate ASM for a call + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); } +// StatementCallExecute call = (StatementCallExecute) statement; +// Procedure procedure = getScope().getProcedure(call.getProcedure()); +// Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. +// RValue procedureRVal = call.getProcedureRVal(); +// // Same as PHI +// if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); +// } else { +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); +// } +// if (!(procedureRVal instanceof ProcedureRef)) { +// asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); +// } } else if (statement instanceof StatementExprSideEffect) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program), program); } else if (statement instanceof StatementReturn) { From b650ba99a95db7645f2299c25ad3669c1923e8c2 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 26 Mar 2023 18:31:47 +0200 Subject: [PATCH 15/50] - Fix far call kernal servicing address! It was wrong! Now it's fixed! (cherry picked from commit e9ddfaeb3ab519cd393f26ca30632c06c59de1fe) --- src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm | 2 +- src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm index d316eb072..667444f52 100644 --- a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm +++ b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm @@ -1,4 +1,4 @@ -jsr $FFE6 +jsr $FF6E .byte <{la1} .byte >{la1} .byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm index d316eb072..667444f52 100644 --- a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm +++ b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm @@ -1,4 +1,4 @@ -jsr $FFE6 +jsr $FF6E .byte <{la1} .byte >{la1} .byte {c1} From 47066115644d07b97c995d54340bc94fcf969dd1 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Mon, 27 Mar 2023 21:42:52 +0200 Subject: [PATCH 16/50] - Mem[x] parameters in a banked function are always allocated in main memory. - Mem[x] return value(s) in banked functions are always allocated in main memory. - Mem[x] intermediate value(s) in banked functions are always placed in the designated data segment. This to accommodate better banking logic for far function calls. (There might be more complexity for other type of variables, but for equinoxe it's working!). (cherry picked from commit 649a187d7e9290b630a951d8968ce5ece6ba2216) --- .../kickc/model/symbols/Procedure.java | 23 +++++++++------- .../camelot64/kickc/model/symbols/Scope.java | 6 ++++- .../Pass0GenerateStatementSequence.java | 3 ++- .../kickc/passes/Pass4CodeGeneration.java | 27 ++++++++++++++++++- 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 49f9854fa..692e7f96a 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -34,8 +34,8 @@ public class Procedure extends Scope { private List comments; /** Reserved zeropage addresses. */ private List reservedZps; - /** The code segment to put the procedure into. */ - private final String codeSegment; + /** The data and code segment to put the procedure into. */ + private String segmentCode; /** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */ private final List constructorRefs; /** Is this procedure declared as a constructor procedure. */ @@ -98,14 +98,15 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, Bank bankLocation) { - super(name, parentScope, dataSegment); + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String segmentCode, String segmentData, CallingConvention callingConvention, Bank bankLocation) { + super(name, parentScope, segmentData); this.procedureType = procedureType; this.declaredInline = false; this.bankLocation = bankLocation; this.interruptType = null; this.comments = new ArrayList<>(); - this.codeSegment = codeSegment; + this.segmentCode = segmentCode; + this.segmentData = segmentData; // The parameter dataSegment was foreseen, but never implemented. this.callingConvention = callingConvention; this.constructorRefs = new ArrayList<>(); this.isConstructor = false; @@ -127,8 +128,12 @@ public class Procedure extends Scope { this.callingConvention = callingConvention; } - public String getCodeSegment() { - return codeSegment; + public String getSegmentCode() { + return segmentCode; + } + + public void setSegmentCode(String segmentCode) { + this.segmentCode = segmentCode; } public List getParameterNames() { @@ -339,13 +344,13 @@ public class Procedure extends Scope { Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && - Objects.equals(codeSegment, procedure.codeSegment) && + Objects.equals(segmentCode, procedure.segmentCode) && Objects.equals(constructorRefs, procedure.constructorRefs) && callingConvention == procedure.callingConvention; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, codeSegment, constructorRefs, isConstructor, callingConvention); + return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, callingConvention); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 77ecbb068..b950128f7 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -26,7 +26,7 @@ public abstract class Scope implements Symbol { private int blockCount = 1; private Scope parentScope; private String fullName; - private String segmentData; + protected String segmentData; public Scope(String name, Scope parentScope, String segmentData) { this.name = name; @@ -45,6 +45,10 @@ public abstract class Scope implements Symbol { return segmentData; } + public void setSegmentData(String segmentData) { + this.segmentData = segmentData; + } + public HashMap getSymbols() { return symbols; } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 0026ec069..792c6849f 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -588,7 +588,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parameters = procedure.getParameters(); + if (variable.isKindPhiVersion()) { + Variable master = variable.getPhiMaster(); + if (master != null) { + if (parameters.contains(master) || master.getLocalName().equals("return")) { + variable.setDataSegment("Data"); + } + } + } + } + } + + // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. + if (variable.isKindIntermediate()) { + if (scope instanceof Procedure) { + Procedure procedure = (Procedure) scope; + variable.setDataSegment(procedure.getSegmentData()); + } + } + setCurrentSegment(variable.getDataSegment(), asm); setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); From 5bd84e7812b33e5a2a4c54deff83b45558177668 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 19:36:11 +0200 Subject: [PATCH 17/50] - Added test cases. - Checked asm outputs. - banking is only implemented for the cx16 for now. --- .../kickc/test/TestProgramsFast.java | 53 +- .../procedure-callingconvention-phi-bank-0.c | 5 +- .../procedure-callingconvention-phi-bank-1.c | 4 + .../procedure-callingconvention-phi-bank-2.c | 4 + .../procedure-callingconvention-phi-bank-3.c | 4 + .../procedure-callingconvention-phi-bank-4.c | 4 + .../procedure-callingconvention-phi-bank-5.c | 12 +- .../procedure-callingconvention-phi-bank.ld | 7 + ...procedure-callingconvention-stack-bank-0.c | 6 +- ...procedure-callingconvention-stack-bank-1.c | 6 +- ...procedure-callingconvention-stack-bank-2.c | 4 + ...procedure-callingconvention-stack-bank-3.c | 4 + ...procedure-callingconvention-stack-bank-4.c | 4 + ...procedure-callingconvention-stack-bank-5.c | 4 + .../procedure-callingconvention-stack-bank.ld | 6 + src/test/ref/asm-culling-jmp.asm | 2 +- src/test/ref/asm-culling-jmp.log | 4 +- src/test/ref/c64dtv-8bppcharstretch.asm | 2 +- src/test/ref/c64dtv-8bppcharstretch.log | 4 +- src/test/ref/c64dtv-8bppchunkystretch.asm | 2 +- src/test/ref/c64dtv-8bppchunkystretch.log | 4 +- ...procedure-callingconvention-phi-bank-0.asm | 28 + ...procedure-callingconvention-phi-bank-0.cfg | 20 + ...procedure-callingconvention-phi-bank-0.log | 275 ++ ...procedure-callingconvention-phi-bank-0.sym | 10 + ...procedure-callingconvention-phi-bank-1.asm | 31 + ...procedure-callingconvention-phi-bank-1.cfg | 20 + ...procedure-callingconvention-phi-bank-1.log | 281 ++ ...procedure-callingconvention-phi-bank-1.sym | 10 + ...procedure-callingconvention-phi-bank-2.asm | 28 + ...procedure-callingconvention-phi-bank-2.cfg | 20 + ...procedure-callingconvention-phi-bank-2.log | 294 ++ ...procedure-callingconvention-phi-bank-2.sym | 10 + ...procedure-callingconvention-phi-bank-3.asm | 28 + ...procedure-callingconvention-phi-bank-3.cfg | 20 + ...procedure-callingconvention-phi-bank-3.log | 294 ++ ...procedure-callingconvention-phi-bank-3.sym | 10 + ...procedure-callingconvention-phi-bank-4.asm | 28 + ...procedure-callingconvention-phi-bank-4.cfg | 20 + ...procedure-callingconvention-phi-bank-4.log | 275 ++ ...procedure-callingconvention-phi-bank-4.sym | 10 + ...procedure-callingconvention-phi-bank-5.asm | 268 ++ ...procedure-callingconvention-phi-bank-5.cfg | 224 ++ ...procedure-callingconvention-phi-bank-5.log | 2642 +++++++++++++++++ ...procedure-callingconvention-phi-bank-5.sym | 171 ++ ...ocedure-callingconvention-stack-bank-0.asm | 45 + ...ocedure-callingconvention-stack-bank-0.cfg | 24 + ...ocedure-callingconvention-stack-bank-0.log | 350 +++ ...ocedure-callingconvention-stack-bank-0.sym | 19 + ...ocedure-callingconvention-stack-bank-1.asm | 45 + ...ocedure-callingconvention-stack-bank-1.cfg | 24 + ...ocedure-callingconvention-stack-bank-1.log | 350 +++ ...ocedure-callingconvention-stack-bank-1.sym | 19 + ...ocedure-callingconvention-stack-bank-2.asm | 74 + ...ocedure-callingconvention-stack-bank-2.cfg | 48 + ...ocedure-callingconvention-stack-bank-2.log | 595 ++++ ...ocedure-callingconvention-stack-bank-2.sym | 32 + ...ocedure-callingconvention-stack-bank-3.asm | 74 + ...ocedure-callingconvention-stack-bank-3.cfg | 79 + ...ocedure-callingconvention-stack-bank-3.log | 644 ++++ ...ocedure-callingconvention-stack-bank-3.sym | 19 + ...ocedure-callingconvention-stack-bank-4.asm | 111 + ...ocedure-callingconvention-stack-bank-4.cfg | 62 + ...ocedure-callingconvention-stack-bank-4.log | 710 +++++ ...ocedure-callingconvention-stack-bank-4.sym | 30 + ...ocedure-callingconvention-stack-bank-5.asm | 50 + ...ocedure-callingconvention-stack-bank-5.cfg | 29 + ...ocedure-callingconvention-stack-bank-5.log | 408 +++ ...ocedure-callingconvention-stack-bank-5.sym | 21 + 69 files changed, 8979 insertions(+), 45 deletions(-) create mode 100644 src/test/kc/procedure-callingconvention-phi-bank.ld create mode 100644 src/test/kc/procedure-callingconvention-stack-bank.ld create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.sym diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index a9aabb89f..1e1da9720 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1496,68 +1496,63 @@ public class TestProgramsFast extends TestPrograms { } @Test - public void testProcedureCallingConventionPhiFarx() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-x.c"); + public void testProcedureCallingConventionPhiBank0() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-0.c"); } @Test - public void testProcedureCallingConventionPhiFar0() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-0.c"); + public void testProcedureCallingConventionPhiBank1() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-1.c"); } @Test - public void testProcedureCallingConventionPhiFar1() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-1.c"); + public void testProcedureCallingConventionPhiBank2() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-2.c"); } @Test - public void testProcedureCallingConventionPhiFar2() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-2.c"); + public void testProcedureCallingConventionPhiBank3() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-3.c"); } @Test - public void testProcedureCallingConventionPhiFar3() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-3.c"); + public void testProcedureCallingConventionPhiBank4() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-4.c"); } @Test - public void testProcedureCallingConventionPhiFar4() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-4.c"); + public void testProcedureCallingConventionPhiBank5() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-5.c"); } @Test - public void testProcedureCallingConventionPhiFar5() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-5.c"); + public void testProcedureCallingConventionStackBank5() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-5.c"); } @Test - public void testProcedureCallingConventionStackFar5() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-5.c"); + public void testProcedureCallingConventionStackBank4() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-4.c"); } @Test - public void testProcedureCallingConventionStackFar4() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-4.c"); + public void testProcedureCallingConventionStackBank3() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-3.c"); } @Test - public void testProcedureCallingConventionStackFar3() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-3.c"); + public void testProcedureCallingConventionStackBank2() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-2.c"); } @Test - public void testProcedureCallingConventionStackFar2() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-2.c"); + public void testProcedureCallingConventionStackBank1() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-1.c"); } @Test - public void testProcedureCallingConventionStackFar1() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-1.c"); - } - - @Test - public void testProcedureCallingConventionStackFar0() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-0.c"); + public void testProcedureCallingConventionStackBank0() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-0.c"); } @Test diff --git a/src/test/kc/procedure-callingconvention-phi-bank-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c index 54243fc55..2ab91f28b 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-0.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-0.c @@ -1,12 +1,15 @@ // Test a procedure with calling convention stack +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { SCREEN[0] = plus('0', 7); } -#pragma code_seg(stage) char __bank(ram,2) plus(char a, char b) { return a+b; } diff --git a/src/test/kc/procedure-callingconvention-phi-bank-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c index 585ab0f82..f534c13e7 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-1.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-1.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention sp +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-phi-bank-2.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c index e56b218aa..790978c7d 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-2.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-2.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention sp +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c index 655f28876..fc48b2e5e 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-3.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-3.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention sp +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c index 0459fcaa0..b6e49a3a1 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention phi +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; #pragma code_seg(stage) diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c index 9e8021010..c8b8aa399 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.c @@ -1,8 +1,12 @@ // Test a far call procedure with a calling convention phi +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; -#pragma code_seg(bank_1) +#pragma code_seg(stage) #pragma bank(ram, 1) char func_bank1_a(char a, char b) { @@ -19,7 +23,7 @@ char func_bank1_d(char a, char b) { return func_bank2_a(a,b); } -#pragma code_seg(bank_2) +#pragma code_seg(platform) #pragma bank(ram, 2) char func_bank2_a(char a, char b) { @@ -47,7 +51,7 @@ char func_bank2_f(char a, char b) { return func_bank1_b(a,b); } -#pragma nobank +#pragma nobank(dummy) char __bank(ram, 1) func_bank1_b(char a, char b) { return a+b; @@ -57,7 +61,7 @@ char __bank(ram, 2) func_bank2_b(char a, char b) { return a+b; } -#pragma nobank +#pragma nobank(dummy) char func_bank1_e(char a, char b) { // this should be a far call, because the call is to bank 1. diff --git a/src/test/kc/procedure-callingconvention-phi-bank.ld b/src/test/kc/procedure-callingconvention-phi-bank.ld new file mode 100644 index 000000000..130604424 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-bank.ld @@ -0,0 +1,7 @@ +.segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + diff --git a/src/test/kc/procedure-callingconvention-stack-bank-0.c b/src/test/kc/procedure-callingconvention-stack-bank-0.c index 3801b0673..d0394b9d1 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-0.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-0.c @@ -1,12 +1,16 @@ // Test a procedure with calling convention stack +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { SCREEN[0] = plus('0', 7); } -#pragma code_seg(test) +#pragma code_seg(stage) char __bank(ram, 2) __stackcall plus(char a, char b) { return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-1.c b/src/test/kc/procedure-callingconvention-stack-bank-1.c index da246a882..c1ac83207 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-1.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-1.c @@ -1,5 +1,9 @@ // Test a procedure with calling convention stack +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { @@ -7,7 +11,7 @@ void main(void) { } #pragma calling(__stackcall) -#pragma code_seg(test) +#pragma code_seg(stage) char __bank(ram,20) plus(char a, char b) { return a+b; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-2.c b/src/test/kc/procedure-callingconvention-stack-bank-2.c index cb8a3bc86..cba3de4b9 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-2.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-2.c @@ -1,6 +1,10 @@ // Test a procedure with calling convention stack // A slightly more complex call +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; char i = 0; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c index 6ab8d136f..129824bb7 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-3.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-3.c @@ -3,6 +3,10 @@ #pragma calling(__stackcall) +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; char val = 0; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-4.c b/src/test/kc/procedure-callingconvention-stack-bank-4.c index 76c66aa26..bb3ebc6e8 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-4.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-4.c @@ -4,6 +4,10 @@ #pragma calling(__stackcall) #pragma struct_model(classic) +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; char idx = 0; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-5.c b/src/test/kc/procedure-callingconvention-stack-bank-5.c index 3bfac0ef3..ce0701c6f 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-5.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-5.c @@ -1,6 +1,10 @@ // Test a procedure with calling convention stack // Recursion that works (no local variables) +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma platform(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-stack-bank.ld b/src/test/kc/procedure-callingconvention-stack-bank.ld new file mode 100644 index 000000000..3e9cecaee --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-bank.ld @@ -0,0 +1,6 @@ +.segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] diff --git a/src/test/ref/asm-culling-jmp.asm b/src/test/ref/asm-culling-jmp.asm index 39c886fa8..152a669fe 100644 --- a/src/test/ref/asm-culling-jmp.asm +++ b/src/test/ref/asm-culling-jmp.asm @@ -12,7 +12,7 @@ main: { // asm jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // *((char*)0x0400) = 'c' diff --git a/src/test/ref/asm-culling-jmp.log b/src/test/ref/asm-culling-jmp.log index 8f295f1ae..9870ae91e 100644 --- a/src/test/ref/asm-culling-jmp.log +++ b/src/test/ref/asm-culling-jmp.log @@ -83,7 +83,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // [1] *((char *) 1024) = 'c' -- _deref_pbuc1=vbuc2 @@ -130,7 +130,7 @@ main: { // asm // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // *((char*)0x0400) = 'c' diff --git a/src/test/ref/c64dtv-8bppcharstretch.asm b/src/test/ref/c64dtv-8bppcharstretch.asm index 13c88352a..8fadfc7eb 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.asm +++ b/src/test/ref/c64dtv-8bppcharstretch.asm @@ -457,7 +457,7 @@ dtvSetCpuBankSegment1: { // asm .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // } rts } diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 4c5a4bc2e..9e674183c 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1872,7 +1872,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 jmp __breturn // dtvSetCpuBankSegment1::@return __breturn: @@ -2714,7 +2714,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // dtvSetCpuBankSegment1::@return // } // [87] return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index 7ebe19652..becb0cb59 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -365,7 +365,7 @@ dtvSetCpuBankSegment1: { // asm .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // } rts } diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index cc100204f..932a1908c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -1260,7 +1260,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 jmp __breturn // dtvSetCpuBankSegment1::@return __breturn: @@ -1881,7 +1881,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // dtvSetCpuBankSegment1::@return // } // [57] return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.asm b/src/test/ref/procedure-callingconvention-phi-bank-0.asm new file mode 100644 index 000000000..2bb668af6 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.asm @@ -0,0 +1,28 @@ +// Test a procedure with calling convention stack +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.cfg b/src/test/ref/procedure-callingconvention-phi-bank-0.cfg new file mode 100644 index 000000000..bfaa7082a --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.log b/src/test/ref/procedure-callingconvention-phi-bank-0.log new file mode 100644 index 000000000..58a2a2fd0 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.log @@ -0,0 +1,275 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + jsr plus + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 24 + + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + jsr plus + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.sym b/src/test/ref/procedure-callingconvention-phi-bank-0.sym new file mode 100644 index 000000000..70d3c4d1f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.asm b/src/test/ref/procedure-callingconvention-phi-bank-1.asm new file mode 100644 index 000000000..ea53aa852 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.asm @@ -0,0 +1,31 @@ +// Test a far call procedure with a calling convention sp +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + jsr $ff6e + .byte plus + .byte 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.cfg b/src/test/ref/procedure-callingconvention-phi-bank-1.cfg new file mode 100644 index 000000000..1701ea88d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.log b/src/test/ref/procedure-callingconvention-phi-bank-1.log new file mode 100644 index 000000000..5484d90f9 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.log @@ -0,0 +1,281 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + plus_from_main: + jsr $ff6e + .byte plus + .byte 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 24 + + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte plus + .byte 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.sym b/src/test/ref/procedure-callingconvention-phi-bank-1.sym new file mode 100644 index 000000000..c79872a57 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.asm b/src/test/ref/procedure-callingconvention-phi-bank-2.asm new file mode 100644 index 000000000..1e4b59461 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.asm @@ -0,0 +1,28 @@ +// Test a far call procedure with a calling convention sp +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.cfg b/src/test/ref/procedure-callingconvention-phi-bank-2.cfg new file mode 100644 index 000000000..1701ea88d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.log b/src/test/ref/procedure-callingconvention-phi-bank-2.log new file mode 100644 index 000000000..9b0d446f2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.log @@ -0,0 +1,294 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare allocation: +MISSING FRAGMENTS + Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [main] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [plus] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 18 + + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.sym b/src/test/ref/procedure-callingconvention-phi-bank-2.sym new file mode 100644 index 000000000..c79872a57 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.asm b/src/test/ref/procedure-callingconvention-phi-bank-3.asm new file mode 100644 index 000000000..14b4c8f88 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.asm @@ -0,0 +1,28 @@ +// Test a far call procedure with a calling convention sp +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.cfg b/src/test/ref/procedure-callingconvention-phi-bank-3.cfg new file mode 100644 index 000000000..1701ea88d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.log b/src/test/ref/procedure-callingconvention-phi-bank-3.log new file mode 100644 index 000000000..edbe990fa --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.log @@ -0,0 +1,294 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare allocation: +MISSING FRAGMENTS + Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [main] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [plus] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 18 + + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.sym b/src/test/ref/procedure-callingconvention-phi-bank-3.sym new file mode 100644 index 000000000..c79872a57 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.asm b/src/test/ref/procedure-callingconvention-phi-bank-4.asm new file mode 100644 index 000000000..e67cb058e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.asm @@ -0,0 +1,28 @@ +// Test a far call procedure with a calling convention phi +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg new file mode 100644 index 000000000..2cc5e64ff --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg @@ -0,0 +1,20 @@ + +__bank(bank) void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#0 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.log b/src/test/ref/procedure-callingconvention-phi-bank-4.log new file mode 100644 index 000000000..80ecb72df --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.log @@ -0,0 +1,275 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#3 = phi( plus/plus::return#0 ) + plus::return#1 = plus::return#3 + return + to:@return + +__bank(bank) void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#2 = plus::return#1 + to:main::@1 +main::@1: scope:[main] from main + plus::return#4 = phi( main/plus::return#2 ) + main::$0 = plus::return#4 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +__bank(bank) void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 +Alias plus::return#2 = plus::return#4 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [8] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [0] plus::return#0 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#0 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#2 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#2 +Constant inlined plus::return#2 = plus::return#0 +Constant inlined main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +__bank(bank) void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#0 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__bank(bank) void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = plus::return#0 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] +Uplift Scope [main] +Uplift Scope [] + +Uplifting [plus] best 60 combination +Uplifting [main] best 60 combination +Uplifting [] best 60 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + jsr plus + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__bank(bank) void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#0 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 24 + + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + jsr plus + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.sym b/src/test/ref/procedure-callingconvention-phi-bank-4.sym new file mode 100644 index 000000000..303e3a74d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +__bank(bank) void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#0 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.asm b/src/test/ref/procedure-callingconvention-phi-bank-5.asm new file mode 100644 index 000000000..f04dd9403 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.asm @@ -0,0 +1,268 @@ +// Test a far call procedure with a calling convention phi +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment Code +main: { + // func_bank1_a('0', 7) + lda #7 + ldx #'0' + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a('0', 7) + // SCREEN[0] = func_bank1_a('0', 7) + // far call + sta SCREEN + // func_bank1_b('0', 7) + lda #7 + ldx #'0' + jsr func_bank1_b + // func_bank1_b('0', 7) + // SCREEN[0] = func_bank1_b('0', 7) + // far call + sta SCREEN + // func_bank1_c('0', 7) + jsr $ff6e + .byte func_bank1_c + .byte 1 + // func_bank1_c('0', 7) + // SCREEN[0] = func_bank1_c('0', 7) + // far call + sta SCREEN + // func_bank1_d('0', 7) + jsr $ff6e + .byte func_bank1_d + .byte 1 + // func_bank1_d('0', 7) + // SCREEN[0] = func_bank1_d('0', 7) + // far call + sta SCREEN + // func_bank1_e('0', 7) + jsr func_bank1_e + // func_bank1_e('0', 7) + // SCREEN[0] = func_bank1_e('0', 7) + // near call + sta SCREEN + // func_bank1_f('0', 7) + jsr func_bank1_f + // func_bank1_f('0', 7) + // SCREEN[0] = func_bank1_f('0', 7) + // near call + sta SCREEN + // func_bank2_a('0', 7) + lda #7 + ldx #'0' + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a('0', 7) + // SCREEN[0] = func_bank2_a('0', 7) + // far call + sta SCREEN + // func_bank2_b('0', 7) + lda #7 + ldx #'0' + jsr func_bank2_b + // func_bank2_b('0', 7) + // SCREEN[0] = func_bank2_b('0', 7) + // far call + sta SCREEN + // func_bank2_c('0', 7) + jsr $ff6e + .byte func_bank2_c + .byte 2 + // func_bank2_c('0', 7) + // SCREEN[0] = func_bank2_c('0', 7) + // far call + sta SCREEN + // func_bank2_d('0', 7) + jsr $ff6e + .byte func_bank2_d + .byte 2 + // func_bank2_d('0', 7) + // SCREEN[0] = func_bank2_d('0', 7) + // far call + sta SCREEN + // func_bank2_e('0', 7) + jsr $ff6e + .byte func_bank2_e + .byte 2 + // func_bank2_e('0', 7) + // SCREEN[0] = func_bank2_e('0', 7) + // far call + sta SCREEN + // func_bank2_f('0', 7) + jsr $ff6e + .byte func_bank2_f + .byte 2 + // func_bank2_f('0', 7) + // SCREEN[0] = func_bank2_f('0', 7) + // far call + sta SCREEN + // } + rts +} +.segment stage +// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) +func_bank1_a: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +.segment platform +// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) +func_bank1_b: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +.segment stage +// __register(A) char func_bank1_c(char a, char b) +func_bank1_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + lda #b + ldx #a + jsr func_bank1_a + // func_bank1_a(a,b) + // } + rts +} +// __register(A) char func_bank1_d(char a, char b) +func_bank1_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // } + rts +} +.segment platform +// __register(A) char func_bank1_e(char a, char b) +func_bank1_e: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // } + rts +} +// __register(A) char func_bank1_f(char a, char b) +func_bank1_f: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // } + rts +} +// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) +func_bank2_a: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) +func_bank2_b: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// __register(A) char func_bank2_c(char a, char b) +func_bank2_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // } + rts +} +// __register(A) char func_bank2_d(char a, char b) +func_bank2_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + lda #b + ldx #a + jsr func_bank2_a + // func_bank2_a(a,b) + // } + rts +} +// __register(A) char func_bank2_e(char a, char b) +func_bank2_e: { + .const a = '0' + .const b = 7 + // func_bank2_b(a,b) + lda #b + ldx #a + jsr func_bank2_b + // func_bank2_b(a,b) + // } + rts +} +// __register(A) char func_bank2_f(char a, char b) +func_bank2_f: { + .const a = '0' + .const b = 7 + // func_bank1_b(a,b) + lda #b + ldx #a + jsr func_bank1_b + // func_bank1_b(a,b) + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg new file mode 100644 index 000000000..39617047b --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg @@ -0,0 +1,224 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call func_bank1_a + [2] func_bank1_a::return#10 = func_bank1_a::return#0 + to:main::@1 +main::@1: scope:[main] from main + [3] main::$0 = func_bank1_a::return#10 + [4] *SCREEN = main::$0 + [5] call func_bank1_b + [6] func_bank1_b::return#3 = func_bank1_b::return#1 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = func_bank1_b::return#3 + [8] *SCREEN = main::$1 + [9] call func_bank1_c + [10] func_bank1_c::return#2 = func_bank1_c::return#0 + to:main::@3 +main::@3: scope:[main] from main::@2 + [11] main::$2 = func_bank1_c::return#2 + [12] *SCREEN = main::$2 + [13] call func_bank1_d + [14] func_bank1_d::return#2 = func_bank1_d::return#0 + to:main::@4 +main::@4: scope:[main] from main::@3 + [15] main::$3 = func_bank1_d::return#2 + [16] *SCREEN = main::$3 + [17] call func_bank1_e + [18] func_bank1_e::return#2 = func_bank1_e::return#0 + to:main::@5 +main::@5: scope:[main] from main::@4 + [19] main::$4 = func_bank1_e::return#2 + [20] *SCREEN = main::$4 + [21] call func_bank1_f + [22] func_bank1_f::return#2 = func_bank1_f::return#0 + to:main::@6 +main::@6: scope:[main] from main::@5 + [23] main::$5 = func_bank1_f::return#2 + [24] *SCREEN = main::$5 + [25] call func_bank2_a + [26] func_bank2_a::return#10 = func_bank2_a::return#1 + to:main::@7 +main::@7: scope:[main] from main::@6 + [27] main::$6 = func_bank2_a::return#10 + [28] *SCREEN = main::$6 + [29] call func_bank2_b + [30] func_bank2_b::return#3 = func_bank2_b::return#1 + to:main::@8 +main::@8: scope:[main] from main::@7 + [31] main::$7 = func_bank2_b::return#3 + [32] *SCREEN = main::$7 + [33] call func_bank2_c + [34] func_bank2_c::return#2 = func_bank2_c::return#0 + to:main::@9 +main::@9: scope:[main] from main::@8 + [35] main::$8 = func_bank2_c::return#2 + [36] *SCREEN = main::$8 + [37] call func_bank2_d + [38] func_bank2_d::return#2 = func_bank2_d::return#0 + to:main::@10 +main::@10: scope:[main] from main::@9 + [39] main::$9 = func_bank2_d::return#2 + [40] *SCREEN = main::$9 + [41] call func_bank2_e + [42] func_bank2_e::return#2 = func_bank2_e::return#0 + to:main::@11 +main::@11: scope:[main] from main::@10 + [43] main::$10 = func_bank2_e::return#2 + [44] *SCREEN = main::$10 + [45] call func_bank2_f + [46] func_bank2_f::return#2 = func_bank2_f::return#0 + to:main::@12 +main::@12: scope:[main] from main::@11 + [47] main::$11 = func_bank2_f::return#2 + [48] *SCREEN = main::$11 + to:main::@return +main::@return: scope:[main] from main::@12 + [49] return + to:@return + +__bank(bank) char func_bank1_a(char a , char b) +func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main + [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) + [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) + [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 + to:func_bank1_a::@return +func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a + [52] return + to:@return + +char func_bank1_b(char a , char b) +func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 + [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) + [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) + [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 + to:func_bank1_b::@return +func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b + [55] return + to:@return + +__bank(bank) char func_bank1_c(char a , char b) +func_bank1_c: scope:[func_bank1_c] from main::@2 + [56] phi() + [57] call func_bank1_a + [58] func_bank1_a::return#2 = func_bank1_a::return#0 + to:func_bank1_c::@1 +func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c + [59] func_bank1_c::return#0 = func_bank1_a::return#2 + to:func_bank1_c::@return +func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 + [60] return + to:@return + +__bank(bank) char func_bank1_d(char a , char b) +func_bank1_d: scope:[func_bank1_d] from main::@3 + [61] phi() + [62] call func_bank2_a + [63] func_bank2_a::return#0 = func_bank2_a::return#1 + to:func_bank1_d::@1 +func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d + [64] func_bank1_d::return#0 = func_bank2_a::return#0 + to:func_bank1_d::@return +func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [65] return + to:@return + +char func_bank1_e(char a , char b) +func_bank1_e: scope:[func_bank1_e] from main::@4 + [66] phi() + [67] call func_bank1_a + [68] func_bank1_a::return#4 = func_bank1_a::return#0 + to:func_bank1_e::@1 +func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e + [69] func_bank1_e::return#0 = func_bank1_a::return#4 + to:func_bank1_e::@return +func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [70] return + to:@return + +char func_bank1_f(char a , char b) +func_bank1_f: scope:[func_bank1_f] from main::@5 + [71] phi() + [72] call func_bank2_a + [73] func_bank2_a::return#4 = func_bank2_a::return#1 + to:func_bank1_f::@1 +func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f + [74] func_bank1_f::return#0 = func_bank2_a::return#4 + to:func_bank1_f::@return +func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 + [75] return + to:@return + +__bank(bank) char func_bank2_a(char a , char b) +func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 + [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) + [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) + [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 + to:func_bank2_a::@return +func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a + [78] return + to:@return + +char func_bank2_b(char a , char b) +func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 + [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) + [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) + [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 + to:func_bank2_b::@return +func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b + [81] return + to:@return + +__bank(bank) char func_bank2_c(char a , char b) +func_bank2_c: scope:[func_bank2_c] from main::@8 + [82] phi() + [83] call func_bank1_a + [84] func_bank1_a::return#3 = func_bank1_a::return#0 + to:func_bank2_c::@1 +func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c + [85] func_bank2_c::return#0 = func_bank1_a::return#3 + to:func_bank2_c::@return +func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 + [86] return + to:@return + +__bank(bank) char func_bank2_d(char a , char b) +func_bank2_d: scope:[func_bank2_d] from main::@9 + [87] phi() + [88] call func_bank2_a + [89] func_bank2_a::return#3 = func_bank2_a::return#1 + to:func_bank2_d::@1 +func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d + [90] func_bank2_d::return#0 = func_bank2_a::return#3 + to:func_bank2_d::@return +func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 + [91] return + to:@return + +__bank(bank) char func_bank2_e(char a , char b) +func_bank2_e: scope:[func_bank2_e] from main::@10 + [92] phi() + [93] call func_bank2_b + [94] func_bank2_b::return#0 = func_bank2_b::return#1 + to:func_bank2_e::@1 +func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e + [95] func_bank2_e::return#0 = func_bank2_b::return#0 + to:func_bank2_e::@return +func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 + [96] return + to:@return + +__bank(bank) char func_bank2_f(char a , char b) +func_bank2_f: scope:[func_bank2_f] from main::@11 + [97] phi() + [98] call func_bank1_b + [99] func_bank1_b::return#0 = func_bank1_b::return#1 + to:func_bank2_f::@1 +func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f + [100] func_bank2_f::return#0 = func_bank1_b::return#0 + to:func_bank2_f::@return +func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 + [101] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.log b/src/test/ref/procedure-callingconvention-phi-bank-5.log new file mode 100644 index 000000000..1e374e133 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.log @@ -0,0 +1,2642 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +__bank(bank) char func_bank1_a(char a , char b) +func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main + func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_a::b#0, func_bank1_e/func_bank1_a::b#2, func_bank2_c/func_bank1_a::b#1, main/func_bank1_a::b#3 ) + func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_a::a#0, func_bank1_e/func_bank1_a::a#2, func_bank2_c/func_bank1_a::a#1, main/func_bank1_a::a#3 ) + func_bank1_a::$0 = func_bank1_a::a#4 + func_bank1_a::b#4 + func_bank1_a::return#0 = func_bank1_a::$0 + to:func_bank1_a::@return +func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a + func_bank1_a::return#6 = phi( func_bank1_a/func_bank1_a::return#0 ) + func_bank1_a::return#1 = func_bank1_a::return#6 + return + to:@return + +__bank(bank) char func_bank1_c(char a , char b) +func_bank1_c: scope:[func_bank1_c] from main::@2 + func_bank1_c::b#1 = phi( main::@2/func_bank1_c::b#0 ) + func_bank1_c::a#1 = phi( main::@2/func_bank1_c::a#0 ) + func_bank1_a::a#0 = func_bank1_c::a#1 + func_bank1_a::b#0 = func_bank1_c::b#1 + call func_bank1_a + func_bank1_a::return#2 = func_bank1_a::return#1 + to:func_bank1_c::@1 +func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c + func_bank1_a::return#7 = phi( func_bank1_c/func_bank1_a::return#2 ) + func_bank1_c::$0 = func_bank1_a::return#7 + func_bank1_c::return#0 = func_bank1_c::$0 + to:func_bank1_c::@return +func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 + func_bank1_c::return#3 = phi( func_bank1_c::@1/func_bank1_c::return#0 ) + func_bank1_c::return#1 = func_bank1_c::return#3 + return + to:@return + +__bank(bank) char func_bank1_d(char a , char b) +func_bank1_d: scope:[func_bank1_d] from main::@3 + func_bank1_d::b#1 = phi( main::@3/func_bank1_d::b#0 ) + func_bank1_d::a#1 = phi( main::@3/func_bank1_d::a#0 ) + func_bank2_a::a#0 = func_bank1_d::a#1 + func_bank2_a::b#0 = func_bank1_d::b#1 + call func_bank2_a + func_bank2_a::return#0 = func_bank2_a::return#2 + to:func_bank1_d::@1 +func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d + func_bank2_a::return#6 = phi( func_bank1_d/func_bank2_a::return#0 ) + func_bank1_d::$0 = func_bank2_a::return#6 + func_bank1_d::return#0 = func_bank1_d::$0 + to:func_bank1_d::@return +func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + func_bank1_d::return#3 = phi( func_bank1_d::@1/func_bank1_d::return#0 ) + func_bank1_d::return#1 = func_bank1_d::return#3 + return + to:@return + +__bank(bank) char func_bank2_a(char a , char b) +func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 + func_bank2_a::b#4 = phi( func_bank1_d/func_bank2_a::b#0, func_bank1_f/func_bank2_a::b#2, func_bank2_d/func_bank2_a::b#1, main::@6/func_bank2_a::b#3 ) + func_bank2_a::a#4 = phi( func_bank1_d/func_bank2_a::a#0, func_bank1_f/func_bank2_a::a#2, func_bank2_d/func_bank2_a::a#1, main::@6/func_bank2_a::a#3 ) + func_bank2_a::$0 = func_bank2_a::a#4 + func_bank2_a::b#4 + func_bank2_a::return#1 = func_bank2_a::$0 + to:func_bank2_a::@return +func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a + func_bank2_a::return#7 = phi( func_bank2_a/func_bank2_a::return#1 ) + func_bank2_a::return#2 = func_bank2_a::return#7 + return + to:@return + +__bank(bank) char func_bank2_c(char a , char b) +func_bank2_c: scope:[func_bank2_c] from main::@8 + func_bank2_c::b#1 = phi( main::@8/func_bank2_c::b#0 ) + func_bank2_c::a#1 = phi( main::@8/func_bank2_c::a#0 ) + func_bank1_a::a#1 = func_bank2_c::a#1 + func_bank1_a::b#1 = func_bank2_c::b#1 + call func_bank1_a + func_bank1_a::return#3 = func_bank1_a::return#1 + to:func_bank2_c::@1 +func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c + func_bank1_a::return#8 = phi( func_bank2_c/func_bank1_a::return#3 ) + func_bank2_c::$0 = func_bank1_a::return#8 + func_bank2_c::return#0 = func_bank2_c::$0 + to:func_bank2_c::@return +func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 + func_bank2_c::return#3 = phi( func_bank2_c::@1/func_bank2_c::return#0 ) + func_bank2_c::return#1 = func_bank2_c::return#3 + return + to:@return + +__bank(bank) char func_bank2_d(char a , char b) +func_bank2_d: scope:[func_bank2_d] from main::@9 + func_bank2_d::b#1 = phi( main::@9/func_bank2_d::b#0 ) + func_bank2_d::a#1 = phi( main::@9/func_bank2_d::a#0 ) + func_bank2_a::a#1 = func_bank2_d::a#1 + func_bank2_a::b#1 = func_bank2_d::b#1 + call func_bank2_a + func_bank2_a::return#3 = func_bank2_a::return#2 + to:func_bank2_d::@1 +func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d + func_bank2_a::return#8 = phi( func_bank2_d/func_bank2_a::return#3 ) + func_bank2_d::$0 = func_bank2_a::return#8 + func_bank2_d::return#0 = func_bank2_d::$0 + to:func_bank2_d::@return +func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 + func_bank2_d::return#3 = phi( func_bank2_d::@1/func_bank2_d::return#0 ) + func_bank2_d::return#1 = func_bank2_d::return#3 + return + to:@return + +__bank(bank) char func_bank2_e(char a , char b) +func_bank2_e: scope:[func_bank2_e] from main::@10 + func_bank2_e::b#1 = phi( main::@10/func_bank2_e::b#0 ) + func_bank2_e::a#1 = phi( main::@10/func_bank2_e::a#0 ) + func_bank2_b::a#0 = func_bank2_e::a#1 + func_bank2_b::b#0 = func_bank2_e::b#1 + call func_bank2_b + func_bank2_b::return#0 = func_bank2_b::return#2 + to:func_bank2_e::@1 +func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e + func_bank2_b::return#4 = phi( func_bank2_e/func_bank2_b::return#0 ) + func_bank2_e::$0 = func_bank2_b::return#4 + func_bank2_e::return#0 = func_bank2_e::$0 + to:func_bank2_e::@return +func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 + func_bank2_e::return#3 = phi( func_bank2_e::@1/func_bank2_e::return#0 ) + func_bank2_e::return#1 = func_bank2_e::return#3 + return + to:@return + +__bank(bank) char func_bank2_f(char a , char b) +func_bank2_f: scope:[func_bank2_f] from main::@11 + func_bank2_f::b#1 = phi( main::@11/func_bank2_f::b#0 ) + func_bank2_f::a#1 = phi( main::@11/func_bank2_f::a#0 ) + func_bank1_b::a#0 = func_bank2_f::a#1 + func_bank1_b::b#0 = func_bank2_f::b#1 + call func_bank1_b + func_bank1_b::return#0 = func_bank1_b::return#2 + to:func_bank2_f::@1 +func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f + func_bank1_b::return#4 = phi( func_bank2_f/func_bank1_b::return#0 ) + func_bank2_f::$0 = func_bank1_b::return#4 + func_bank2_f::return#0 = func_bank2_f::$0 + to:func_bank2_f::@return +func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 + func_bank2_f::return#3 = phi( func_bank2_f::@1/func_bank2_f::return#0 ) + func_bank2_f::return#1 = func_bank2_f::return#3 + return + to:@return + +char func_bank1_b(char a , char b) +func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 + func_bank1_b::b#2 = phi( func_bank2_f/func_bank1_b::b#0, main::@1/func_bank1_b::b#1 ) + func_bank1_b::a#2 = phi( func_bank2_f/func_bank1_b::a#0, main::@1/func_bank1_b::a#1 ) + func_bank1_b::$0 = func_bank1_b::a#2 + func_bank1_b::b#2 + func_bank1_b::return#1 = func_bank1_b::$0 + to:func_bank1_b::@return +func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b + func_bank1_b::return#5 = phi( func_bank1_b/func_bank1_b::return#1 ) + func_bank1_b::return#2 = func_bank1_b::return#5 + return + to:@return + +char func_bank2_b(char a , char b) +func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 + func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_b::b#0, main::@7/func_bank2_b::b#1 ) + func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_b::a#0, main::@7/func_bank2_b::a#1 ) + func_bank2_b::$0 = func_bank2_b::a#2 + func_bank2_b::b#2 + func_bank2_b::return#1 = func_bank2_b::$0 + to:func_bank2_b::@return +func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b + func_bank2_b::return#5 = phi( func_bank2_b/func_bank2_b::return#1 ) + func_bank2_b::return#2 = func_bank2_b::return#5 + return + to:@return + +char func_bank1_e(char a , char b) +func_bank1_e: scope:[func_bank1_e] from main::@4 + func_bank1_e::b#1 = phi( main::@4/func_bank1_e::b#0 ) + func_bank1_e::a#1 = phi( main::@4/func_bank1_e::a#0 ) + func_bank1_a::a#2 = func_bank1_e::a#1 + func_bank1_a::b#2 = func_bank1_e::b#1 + call func_bank1_a + func_bank1_a::return#4 = func_bank1_a::return#1 + to:func_bank1_e::@1 +func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e + func_bank1_a::return#9 = phi( func_bank1_e/func_bank1_a::return#4 ) + func_bank1_e::$0 = func_bank1_a::return#9 + func_bank1_e::return#0 = func_bank1_e::$0 + to:func_bank1_e::@return +func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + func_bank1_e::return#3 = phi( func_bank1_e::@1/func_bank1_e::return#0 ) + func_bank1_e::return#1 = func_bank1_e::return#3 + return + to:@return + +char func_bank1_f(char a , char b) +func_bank1_f: scope:[func_bank1_f] from main::@5 + func_bank1_f::b#1 = phi( main::@5/func_bank1_f::b#0 ) + func_bank1_f::a#1 = phi( main::@5/func_bank1_f::a#0 ) + func_bank2_a::a#2 = func_bank1_f::a#1 + func_bank2_a::b#2 = func_bank1_f::b#1 + call func_bank2_a + func_bank2_a::return#4 = func_bank2_a::return#2 + to:func_bank1_f::@1 +func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f + func_bank2_a::return#9 = phi( func_bank1_f/func_bank2_a::return#4 ) + func_bank1_f::$0 = func_bank2_a::return#9 + func_bank1_f::return#0 = func_bank1_f::$0 + to:func_bank1_f::@return +func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 + func_bank1_f::return#3 = phi( func_bank1_f::@1/func_bank1_f::return#0 ) + func_bank1_f::return#1 = func_bank1_f::return#3 + return + to:@return + +void main() +main: scope:[main] from __start + func_bank1_a::a#3 = '0' + func_bank1_a::b#3 = 7 + call func_bank1_a + func_bank1_a::return#5 = func_bank1_a::return#1 + to:main::@1 +main::@1: scope:[main] from main + func_bank1_a::return#10 = phi( main/func_bank1_a::return#5 ) + main::$0 = func_bank1_a::return#10 + SCREEN[0] = main::$0 + func_bank1_b::a#1 = '0' + func_bank1_b::b#1 = 7 + call func_bank1_b + func_bank1_b::return#3 = func_bank1_b::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + func_bank1_b::return#6 = phi( main::@1/func_bank1_b::return#3 ) + main::$1 = func_bank1_b::return#6 + SCREEN[0] = main::$1 + func_bank1_c::a#0 = '0' + func_bank1_c::b#0 = 7 + call func_bank1_c + func_bank1_c::return#2 = func_bank1_c::return#1 + to:main::@3 +main::@3: scope:[main] from main::@2 + func_bank1_c::return#4 = phi( main::@2/func_bank1_c::return#2 ) + main::$2 = func_bank1_c::return#4 + SCREEN[0] = main::$2 + func_bank1_d::a#0 = '0' + func_bank1_d::b#0 = 7 + call func_bank1_d + func_bank1_d::return#2 = func_bank1_d::return#1 + to:main::@4 +main::@4: scope:[main] from main::@3 + func_bank1_d::return#4 = phi( main::@3/func_bank1_d::return#2 ) + main::$3 = func_bank1_d::return#4 + SCREEN[0] = main::$3 + func_bank1_e::a#0 = '0' + func_bank1_e::b#0 = 7 + call func_bank1_e + func_bank1_e::return#2 = func_bank1_e::return#1 + to:main::@5 +main::@5: scope:[main] from main::@4 + func_bank1_e::return#4 = phi( main::@4/func_bank1_e::return#2 ) + main::$4 = func_bank1_e::return#4 + SCREEN[0] = main::$4 + func_bank1_f::a#0 = '0' + func_bank1_f::b#0 = 7 + call func_bank1_f + func_bank1_f::return#2 = func_bank1_f::return#1 + to:main::@6 +main::@6: scope:[main] from main::@5 + func_bank1_f::return#4 = phi( main::@5/func_bank1_f::return#2 ) + main::$5 = func_bank1_f::return#4 + SCREEN[0] = main::$5 + func_bank2_a::a#3 = '0' + func_bank2_a::b#3 = 7 + call func_bank2_a + func_bank2_a::return#5 = func_bank2_a::return#2 + to:main::@7 +main::@7: scope:[main] from main::@6 + func_bank2_a::return#10 = phi( main::@6/func_bank2_a::return#5 ) + main::$6 = func_bank2_a::return#10 + SCREEN[0] = main::$6 + func_bank2_b::a#1 = '0' + func_bank2_b::b#1 = 7 + call func_bank2_b + func_bank2_b::return#3 = func_bank2_b::return#2 + to:main::@8 +main::@8: scope:[main] from main::@7 + func_bank2_b::return#6 = phi( main::@7/func_bank2_b::return#3 ) + main::$7 = func_bank2_b::return#6 + SCREEN[0] = main::$7 + func_bank2_c::a#0 = '0' + func_bank2_c::b#0 = 7 + call func_bank2_c + func_bank2_c::return#2 = func_bank2_c::return#1 + to:main::@9 +main::@9: scope:[main] from main::@8 + func_bank2_c::return#4 = phi( main::@8/func_bank2_c::return#2 ) + main::$8 = func_bank2_c::return#4 + SCREEN[0] = main::$8 + func_bank2_d::a#0 = '0' + func_bank2_d::b#0 = 7 + call func_bank2_d + func_bank2_d::return#2 = func_bank2_d::return#1 + to:main::@10 +main::@10: scope:[main] from main::@9 + func_bank2_d::return#4 = phi( main::@9/func_bank2_d::return#2 ) + main::$9 = func_bank2_d::return#4 + SCREEN[0] = main::$9 + func_bank2_e::a#0 = '0' + func_bank2_e::b#0 = 7 + call func_bank2_e + func_bank2_e::return#2 = func_bank2_e::return#1 + to:main::@11 +main::@11: scope:[main] from main::@10 + func_bank2_e::return#4 = phi( main::@10/func_bank2_e::return#2 ) + main::$10 = func_bank2_e::return#4 + SCREEN[0] = main::$10 + func_bank2_f::a#0 = '0' + func_bank2_f::b#0 = 7 + call func_bank2_f + func_bank2_f::return#2 = func_bank2_f::return#1 + to:main::@12 +main::@12: scope:[main] from main::@11 + func_bank2_f::return#4 = phi( main::@11/func_bank2_f::return#2 ) + main::$11 = func_bank2_f::return#4 + SCREEN[0] = main::$11 + to:main::@return +main::@return: scope:[main] from main::@12 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::$0 +char func_bank1_a::a +char func_bank1_a::a#0 +char func_bank1_a::a#1 +char func_bank1_a::a#2 +char func_bank1_a::a#3 +char func_bank1_a::a#4 +char func_bank1_a::b +char func_bank1_a::b#0 +char func_bank1_a::b#1 +char func_bank1_a::b#2 +char func_bank1_a::b#3 +char func_bank1_a::b#4 +char func_bank1_a::return +char func_bank1_a::return#0 +char func_bank1_a::return#1 +char func_bank1_a::return#10 +char func_bank1_a::return#2 +char func_bank1_a::return#3 +char func_bank1_a::return#4 +char func_bank1_a::return#5 +char func_bank1_a::return#6 +char func_bank1_a::return#7 +char func_bank1_a::return#8 +char func_bank1_a::return#9 +char func_bank1_b(char a , char b) +char func_bank1_b::$0 +char func_bank1_b::a +char func_bank1_b::a#0 +char func_bank1_b::a#1 +char func_bank1_b::a#2 +char func_bank1_b::b +char func_bank1_b::b#0 +char func_bank1_b::b#1 +char func_bank1_b::b#2 +char func_bank1_b::return +char func_bank1_b::return#0 +char func_bank1_b::return#1 +char func_bank1_b::return#2 +char func_bank1_b::return#3 +char func_bank1_b::return#4 +char func_bank1_b::return#5 +char func_bank1_b::return#6 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::$0 +char func_bank1_c::a +char func_bank1_c::a#0 +char func_bank1_c::a#1 +char func_bank1_c::b +char func_bank1_c::b#0 +char func_bank1_c::b#1 +char func_bank1_c::return +char func_bank1_c::return#0 +char func_bank1_c::return#1 +char func_bank1_c::return#2 +char func_bank1_c::return#3 +char func_bank1_c::return#4 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::$0 +char func_bank1_d::a +char func_bank1_d::a#0 +char func_bank1_d::a#1 +char func_bank1_d::b +char func_bank1_d::b#0 +char func_bank1_d::b#1 +char func_bank1_d::return +char func_bank1_d::return#0 +char func_bank1_d::return#1 +char func_bank1_d::return#2 +char func_bank1_d::return#3 +char func_bank1_d::return#4 +char func_bank1_e(char a , char b) +char func_bank1_e::$0 +char func_bank1_e::a +char func_bank1_e::a#0 +char func_bank1_e::a#1 +char func_bank1_e::b +char func_bank1_e::b#0 +char func_bank1_e::b#1 +char func_bank1_e::return +char func_bank1_e::return#0 +char func_bank1_e::return#1 +char func_bank1_e::return#2 +char func_bank1_e::return#3 +char func_bank1_e::return#4 +char func_bank1_f(char a , char b) +char func_bank1_f::$0 +char func_bank1_f::a +char func_bank1_f::a#0 +char func_bank1_f::a#1 +char func_bank1_f::b +char func_bank1_f::b#0 +char func_bank1_f::b#1 +char func_bank1_f::return +char func_bank1_f::return#0 +char func_bank1_f::return#1 +char func_bank1_f::return#2 +char func_bank1_f::return#3 +char func_bank1_f::return#4 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::$0 +char func_bank2_a::a +char func_bank2_a::a#0 +char func_bank2_a::a#1 +char func_bank2_a::a#2 +char func_bank2_a::a#3 +char func_bank2_a::a#4 +char func_bank2_a::b +char func_bank2_a::b#0 +char func_bank2_a::b#1 +char func_bank2_a::b#2 +char func_bank2_a::b#3 +char func_bank2_a::b#4 +char func_bank2_a::return +char func_bank2_a::return#0 +char func_bank2_a::return#1 +char func_bank2_a::return#10 +char func_bank2_a::return#2 +char func_bank2_a::return#3 +char func_bank2_a::return#4 +char func_bank2_a::return#5 +char func_bank2_a::return#6 +char func_bank2_a::return#7 +char func_bank2_a::return#8 +char func_bank2_a::return#9 +char func_bank2_b(char a , char b) +char func_bank2_b::$0 +char func_bank2_b::a +char func_bank2_b::a#0 +char func_bank2_b::a#1 +char func_bank2_b::a#2 +char func_bank2_b::b +char func_bank2_b::b#0 +char func_bank2_b::b#1 +char func_bank2_b::b#2 +char func_bank2_b::return +char func_bank2_b::return#0 +char func_bank2_b::return#1 +char func_bank2_b::return#2 +char func_bank2_b::return#3 +char func_bank2_b::return#4 +char func_bank2_b::return#5 +char func_bank2_b::return#6 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::$0 +char func_bank2_c::a +char func_bank2_c::a#0 +char func_bank2_c::a#1 +char func_bank2_c::b +char func_bank2_c::b#0 +char func_bank2_c::b#1 +char func_bank2_c::return +char func_bank2_c::return#0 +char func_bank2_c::return#1 +char func_bank2_c::return#2 +char func_bank2_c::return#3 +char func_bank2_c::return#4 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::$0 +char func_bank2_d::a +char func_bank2_d::a#0 +char func_bank2_d::a#1 +char func_bank2_d::b +char func_bank2_d::b#0 +char func_bank2_d::b#1 +char func_bank2_d::return +char func_bank2_d::return#0 +char func_bank2_d::return#1 +char func_bank2_d::return#2 +char func_bank2_d::return#3 +char func_bank2_d::return#4 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::$0 +char func_bank2_e::a +char func_bank2_e::a#0 +char func_bank2_e::a#1 +char func_bank2_e::b +char func_bank2_e::b#0 +char func_bank2_e::b#1 +char func_bank2_e::return +char func_bank2_e::return#0 +char func_bank2_e::return#1 +char func_bank2_e::return#2 +char func_bank2_e::return#3 +char func_bank2_e::return#4 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::$0 +char func_bank2_f::a +char func_bank2_f::a#0 +char func_bank2_f::a#1 +char func_bank2_f::b +char func_bank2_f::b#0 +char func_bank2_f::b#1 +char func_bank2_f::return +char func_bank2_f::return#0 +char func_bank2_f::return#1 +char func_bank2_f::return#2 +char func_bank2_f::return#3 +char func_bank2_f::return#4 +void main() +char main::$0 +char main::$1 +char main::$10 +char main::$11 +char main::$2 +char main::$3 +char main::$4 +char main::$5 +char main::$6 +char main::$7 +char main::$8 +char main::$9 + +Adding number conversion cast (unumber) 7 in func_bank1_a::b#3 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 7 in func_bank1_b::b#1 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$1 +Adding number conversion cast (unumber) 7 in func_bank1_c::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$2 +Adding number conversion cast (unumber) 7 in func_bank1_d::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$3 +Adding number conversion cast (unumber) 7 in func_bank1_e::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$4 +Adding number conversion cast (unumber) 7 in func_bank1_f::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$5 +Adding number conversion cast (unumber) 7 in func_bank2_a::b#3 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$6 +Adding number conversion cast (unumber) 7 in func_bank2_b::b#1 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$7 +Adding number conversion cast (unumber) 7 in func_bank2_c::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$8 +Adding number conversion cast (unumber) 7 in func_bank2_d::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$9 +Adding number conversion cast (unumber) 7 in func_bank2_e::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$10 +Adding number conversion cast (unumber) 7 in func_bank2_f::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$11 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast func_bank1_a::b#3 = (unumber)7 +Inlining cast func_bank1_b::b#1 = (unumber)7 +Inlining cast func_bank1_c::b#0 = (unumber)7 +Inlining cast func_bank1_d::b#0 = (unumber)7 +Inlining cast func_bank1_e::b#0 = (unumber)7 +Inlining cast func_bank1_f::b#0 = (unumber)7 +Inlining cast func_bank2_a::b#3 = (unumber)7 +Inlining cast func_bank2_b::b#1 = (unumber)7 +Inlining cast func_bank2_c::b#0 = (unumber)7 +Inlining cast func_bank2_d::b#0 = (unumber)7 +Inlining cast func_bank2_e::b#0 = (unumber)7 +Inlining cast func_bank2_f::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias func_bank1_a::return#0 = func_bank1_a::$0 func_bank1_a::return#6 func_bank1_a::return#1 +Alias func_bank1_a::return#2 = func_bank1_a::return#7 +Alias func_bank1_c::return#0 = func_bank1_c::$0 func_bank1_c::return#3 func_bank1_c::return#1 +Alias func_bank2_a::return#0 = func_bank2_a::return#6 +Alias func_bank1_d::return#0 = func_bank1_d::$0 func_bank1_d::return#3 func_bank1_d::return#1 +Alias func_bank2_a::return#1 = func_bank2_a::$0 func_bank2_a::return#7 func_bank2_a::return#2 +Alias func_bank1_a::return#3 = func_bank1_a::return#8 +Alias func_bank2_c::return#0 = func_bank2_c::$0 func_bank2_c::return#3 func_bank2_c::return#1 +Alias func_bank2_a::return#3 = func_bank2_a::return#8 +Alias func_bank2_d::return#0 = func_bank2_d::$0 func_bank2_d::return#3 func_bank2_d::return#1 +Alias func_bank2_b::return#0 = func_bank2_b::return#4 +Alias func_bank2_e::return#0 = func_bank2_e::$0 func_bank2_e::return#3 func_bank2_e::return#1 +Alias func_bank1_b::return#0 = func_bank1_b::return#4 +Alias func_bank2_f::return#0 = func_bank2_f::$0 func_bank2_f::return#3 func_bank2_f::return#1 +Alias func_bank1_b::return#1 = func_bank1_b::$0 func_bank1_b::return#5 func_bank1_b::return#2 +Alias func_bank2_b::return#1 = func_bank2_b::$0 func_bank2_b::return#5 func_bank2_b::return#2 +Alias func_bank1_a::return#4 = func_bank1_a::return#9 +Alias func_bank1_e::return#0 = func_bank1_e::$0 func_bank1_e::return#3 func_bank1_e::return#1 +Alias func_bank2_a::return#4 = func_bank2_a::return#9 +Alias func_bank1_f::return#0 = func_bank1_f::$0 func_bank1_f::return#3 func_bank1_f::return#1 +Alias func_bank1_a::return#10 = func_bank1_a::return#5 +Alias func_bank1_b::return#3 = func_bank1_b::return#6 +Alias func_bank1_c::return#2 = func_bank1_c::return#4 +Alias func_bank1_d::return#2 = func_bank1_d::return#4 +Alias func_bank1_e::return#2 = func_bank1_e::return#4 +Alias func_bank1_f::return#2 = func_bank1_f::return#4 +Alias func_bank2_a::return#10 = func_bank2_a::return#5 +Alias func_bank2_b::return#3 = func_bank2_b::return#6 +Alias func_bank2_c::return#2 = func_bank2_c::return#4 +Alias func_bank2_d::return#2 = func_bank2_d::return#4 +Alias func_bank2_e::return#2 = func_bank2_e::return#4 +Alias func_bank2_f::return#2 = func_bank2_f::return#4 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values func_bank1_c::a#1 func_bank1_c::a#0 +Identical Phi Values func_bank1_c::b#1 func_bank1_c::b#0 +Identical Phi Values func_bank1_d::a#1 func_bank1_d::a#0 +Identical Phi Values func_bank1_d::b#1 func_bank1_d::b#0 +Identical Phi Values func_bank2_c::a#1 func_bank2_c::a#0 +Identical Phi Values func_bank2_c::b#1 func_bank2_c::b#0 +Identical Phi Values func_bank2_d::a#1 func_bank2_d::a#0 +Identical Phi Values func_bank2_d::b#1 func_bank2_d::b#0 +Identical Phi Values func_bank2_e::a#1 func_bank2_e::a#0 +Identical Phi Values func_bank2_e::b#1 func_bank2_e::b#0 +Identical Phi Values func_bank2_f::a#1 func_bank2_f::a#0 +Identical Phi Values func_bank2_f::b#1 func_bank2_f::b#0 +Identical Phi Values func_bank1_e::a#1 func_bank1_e::a#0 +Identical Phi Values func_bank1_e::b#1 func_bank1_e::b#0 +Identical Phi Values func_bank1_f::a#1 func_bank1_f::a#0 +Identical Phi Values func_bank1_f::b#1 func_bank1_f::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant func_bank1_a::a#3 = '0' +Constant func_bank1_a::b#3 = 7 +Constant func_bank1_b::a#1 = '0' +Constant func_bank1_b::b#1 = 7 +Constant func_bank1_c::a#0 = '0' +Constant func_bank1_c::b#0 = 7 +Constant func_bank1_d::a#0 = '0' +Constant func_bank1_d::b#0 = 7 +Constant func_bank1_e::a#0 = '0' +Constant func_bank1_e::b#0 = 7 +Constant func_bank1_f::a#0 = '0' +Constant func_bank1_f::b#0 = 7 +Constant func_bank2_a::a#3 = '0' +Constant func_bank2_a::b#3 = 7 +Constant func_bank2_b::a#1 = '0' +Constant func_bank2_b::b#1 = 7 +Constant func_bank2_c::a#0 = '0' +Constant func_bank2_c::b#0 = 7 +Constant func_bank2_d::a#0 = '0' +Constant func_bank2_d::b#0 = 7 +Constant func_bank2_e::a#0 = '0' +Constant func_bank2_e::b#0 = 7 +Constant func_bank2_f::a#0 = '0' +Constant func_bank2_f::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant func_bank1_a::a#0 = func_bank1_c::a#0 +Constant func_bank1_a::b#0 = func_bank1_c::b#0 +Constant func_bank2_a::a#0 = func_bank1_d::a#0 +Constant func_bank2_a::b#0 = func_bank1_d::b#0 +Constant func_bank1_a::a#1 = func_bank2_c::a#0 +Constant func_bank1_a::b#1 = func_bank2_c::b#0 +Constant func_bank2_a::a#1 = func_bank2_d::a#0 +Constant func_bank2_a::b#1 = func_bank2_d::b#0 +Constant func_bank2_b::a#0 = func_bank2_e::a#0 +Constant func_bank2_b::b#0 = func_bank2_e::b#0 +Constant func_bank1_b::a#0 = func_bank2_f::a#0 +Constant func_bank1_b::b#0 = func_bank2_f::b#0 +Constant func_bank1_a::a#2 = func_bank1_e::a#0 +Constant func_bank1_a::b#2 = func_bank1_e::b#0 +Constant func_bank2_a::a#2 = func_bank1_f::a#0 +Constant func_bank2_a::b#2 = func_bank1_f::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [73] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [79] SCREEN[0] = main::$1 +Simplifying expression containing zero SCREEN in [85] SCREEN[0] = main::$2 +Simplifying expression containing zero SCREEN in [91] SCREEN[0] = main::$3 +Simplifying expression containing zero SCREEN in [97] SCREEN[0] = main::$4 +Simplifying expression containing zero SCREEN in [103] SCREEN[0] = main::$5 +Simplifying expression containing zero SCREEN in [109] SCREEN[0] = main::$6 +Simplifying expression containing zero SCREEN in [115] SCREEN[0] = main::$7 +Simplifying expression containing zero SCREEN in [121] SCREEN[0] = main::$8 +Simplifying expression containing zero SCREEN in [127] SCREEN[0] = main::$9 +Simplifying expression containing zero SCREEN in [133] SCREEN[0] = main::$10 +Simplifying expression containing zero SCREEN in [139] SCREEN[0] = main::$11 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Inlining constant with var siblings func_bank1_a::a#3 +Inlining constant with var siblings func_bank1_a::b#3 +Inlining constant with var siblings func_bank1_a::a#0 +Inlining constant with var siblings func_bank1_a::b#0 +Inlining constant with var siblings func_bank1_a::a#1 +Inlining constant with var siblings func_bank1_a::b#1 +Inlining constant with var siblings func_bank1_a::a#2 +Inlining constant with var siblings func_bank1_a::b#2 +Inlining constant with var siblings func_bank2_a::a#3 +Inlining constant with var siblings func_bank2_a::b#3 +Inlining constant with var siblings func_bank2_a::a#0 +Inlining constant with var siblings func_bank2_a::b#0 +Inlining constant with var siblings func_bank2_a::a#1 +Inlining constant with var siblings func_bank2_a::b#1 +Inlining constant with var siblings func_bank2_a::a#2 +Inlining constant with var siblings func_bank2_a::b#2 +Inlining constant with var siblings func_bank1_b::a#1 +Inlining constant with var siblings func_bank1_b::b#1 +Inlining constant with var siblings func_bank1_b::a#0 +Inlining constant with var siblings func_bank1_b::b#0 +Inlining constant with var siblings func_bank2_b::a#1 +Inlining constant with var siblings func_bank2_b::b#1 +Inlining constant with var siblings func_bank2_b::a#0 +Inlining constant with var siblings func_bank2_b::b#0 +Constant inlined func_bank1_a::b#0 = func_bank1_c::b#0 +Constant inlined func_bank1_a::a#1 = func_bank2_c::a#0 +Constant inlined func_bank2_a::b#2 = func_bank1_f::b#0 +Constant inlined func_bank2_a::a#3 = '0' +Constant inlined func_bank1_a::a#0 = func_bank1_c::a#0 +Constant inlined func_bank2_a::b#3 = 7 +Constant inlined func_bank2_a::a#0 = func_bank1_d::a#0 +Constant inlined func_bank1_a::b#3 = 7 +Constant inlined func_bank1_a::b#2 = func_bank1_e::b#0 +Constant inlined func_bank2_a::b#0 = func_bank1_d::b#0 +Constant inlined func_bank2_a::a#1 = func_bank2_d::a#0 +Constant inlined func_bank1_a::a#3 = '0' +Constant inlined func_bank1_a::b#1 = func_bank2_c::b#0 +Constant inlined func_bank1_a::a#2 = func_bank1_e::a#0 +Constant inlined func_bank2_a::b#1 = func_bank2_d::b#0 +Constant inlined func_bank2_a::a#2 = func_bank1_f::a#0 +Constant inlined func_bank2_b::b#0 = func_bank2_e::b#0 +Constant inlined func_bank2_b::a#1 = '0' +Constant inlined func_bank1_b::a#0 = func_bank2_f::a#0 +Constant inlined func_bank2_b::a#0 = func_bank2_e::a#0 +Constant inlined func_bank1_b::b#0 = func_bank2_f::b#0 +Constant inlined func_bank1_b::a#1 = '0' +Constant inlined func_bank1_b::b#1 = 7 +Constant inlined func_bank2_b::b#1 = 7 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of func_bank1_c +Adding NOP phi() at start of func_bank1_d +Adding NOP phi() at start of func_bank1_e +Adding NOP phi() at start of func_bank1_f +Adding NOP phi() at start of func_bank2_c +Adding NOP phi() at start of func_bank2_d +Adding NOP phi() at start of func_bank2_e +Adding NOP phi() at start of func_bank2_f +CALL GRAPH +Calls in [main] to func_bank1_a:1 func_bank1_b:5 func_bank1_c:9 func_bank1_d:13 func_bank1_e:17 func_bank1_f:21 func_bank2_a:25 func_bank2_b:29 func_bank2_c:33 func_bank2_d:37 func_bank2_e:41 func_bank2_f:45 +Calls in [func_bank1_c] to func_bank1_a:57 +Calls in [func_bank1_d] to func_bank2_a:62 +Calls in [func_bank1_e] to func_bank1_a:67 +Calls in [func_bank1_f] to func_bank2_a:72 +Calls in [func_bank2_c] to func_bank1_a:83 +Calls in [func_bank2_d] to func_bank2_a:88 +Calls in [func_bank2_e] to func_bank2_b:93 +Calls in [func_bank2_f] to func_bank1_b:98 + +Created 8 initial phi equivalence classes +Coalesced down to 8 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of func_bank1_c +Adding NOP phi() at start of func_bank1_d +Adding NOP phi() at start of func_bank1_e +Adding NOP phi() at start of func_bank1_f +Adding NOP phi() at start of func_bank2_c +Adding NOP phi() at start of func_bank2_d +Adding NOP phi() at start of func_bank2_e +Adding NOP phi() at start of func_bank2_f + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call func_bank1_a + [2] func_bank1_a::return#10 = func_bank1_a::return#0 + to:main::@1 +main::@1: scope:[main] from main + [3] main::$0 = func_bank1_a::return#10 + [4] *SCREEN = main::$0 + [5] call func_bank1_b + [6] func_bank1_b::return#3 = func_bank1_b::return#1 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = func_bank1_b::return#3 + [8] *SCREEN = main::$1 + [9] call func_bank1_c + [10] func_bank1_c::return#2 = func_bank1_c::return#0 + to:main::@3 +main::@3: scope:[main] from main::@2 + [11] main::$2 = func_bank1_c::return#2 + [12] *SCREEN = main::$2 + [13] call func_bank1_d + [14] func_bank1_d::return#2 = func_bank1_d::return#0 + to:main::@4 +main::@4: scope:[main] from main::@3 + [15] main::$3 = func_bank1_d::return#2 + [16] *SCREEN = main::$3 + [17] call func_bank1_e + [18] func_bank1_e::return#2 = func_bank1_e::return#0 + to:main::@5 +main::@5: scope:[main] from main::@4 + [19] main::$4 = func_bank1_e::return#2 + [20] *SCREEN = main::$4 + [21] call func_bank1_f + [22] func_bank1_f::return#2 = func_bank1_f::return#0 + to:main::@6 +main::@6: scope:[main] from main::@5 + [23] main::$5 = func_bank1_f::return#2 + [24] *SCREEN = main::$5 + [25] call func_bank2_a + [26] func_bank2_a::return#10 = func_bank2_a::return#1 + to:main::@7 +main::@7: scope:[main] from main::@6 + [27] main::$6 = func_bank2_a::return#10 + [28] *SCREEN = main::$6 + [29] call func_bank2_b + [30] func_bank2_b::return#3 = func_bank2_b::return#1 + to:main::@8 +main::@8: scope:[main] from main::@7 + [31] main::$7 = func_bank2_b::return#3 + [32] *SCREEN = main::$7 + [33] call func_bank2_c + [34] func_bank2_c::return#2 = func_bank2_c::return#0 + to:main::@9 +main::@9: scope:[main] from main::@8 + [35] main::$8 = func_bank2_c::return#2 + [36] *SCREEN = main::$8 + [37] call func_bank2_d + [38] func_bank2_d::return#2 = func_bank2_d::return#0 + to:main::@10 +main::@10: scope:[main] from main::@9 + [39] main::$9 = func_bank2_d::return#2 + [40] *SCREEN = main::$9 + [41] call func_bank2_e + [42] func_bank2_e::return#2 = func_bank2_e::return#0 + to:main::@11 +main::@11: scope:[main] from main::@10 + [43] main::$10 = func_bank2_e::return#2 + [44] *SCREEN = main::$10 + [45] call func_bank2_f + [46] func_bank2_f::return#2 = func_bank2_f::return#0 + to:main::@12 +main::@12: scope:[main] from main::@11 + [47] main::$11 = func_bank2_f::return#2 + [48] *SCREEN = main::$11 + to:main::@return +main::@return: scope:[main] from main::@12 + [49] return + to:@return + +__bank(bank) char func_bank1_a(char a , char b) +func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main + [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) + [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) + [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 + to:func_bank1_a::@return +func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a + [52] return + to:@return + +char func_bank1_b(char a , char b) +func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 + [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) + [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) + [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 + to:func_bank1_b::@return +func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b + [55] return + to:@return + +__bank(bank) char func_bank1_c(char a , char b) +func_bank1_c: scope:[func_bank1_c] from main::@2 + [56] phi() + [57] call func_bank1_a + [58] func_bank1_a::return#2 = func_bank1_a::return#0 + to:func_bank1_c::@1 +func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c + [59] func_bank1_c::return#0 = func_bank1_a::return#2 + to:func_bank1_c::@return +func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 + [60] return + to:@return + +__bank(bank) char func_bank1_d(char a , char b) +func_bank1_d: scope:[func_bank1_d] from main::@3 + [61] phi() + [62] call func_bank2_a + [63] func_bank2_a::return#0 = func_bank2_a::return#1 + to:func_bank1_d::@1 +func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d + [64] func_bank1_d::return#0 = func_bank2_a::return#0 + to:func_bank1_d::@return +func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [65] return + to:@return + +char func_bank1_e(char a , char b) +func_bank1_e: scope:[func_bank1_e] from main::@4 + [66] phi() + [67] call func_bank1_a + [68] func_bank1_a::return#4 = func_bank1_a::return#0 + to:func_bank1_e::@1 +func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e + [69] func_bank1_e::return#0 = func_bank1_a::return#4 + to:func_bank1_e::@return +func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [70] return + to:@return + +char func_bank1_f(char a , char b) +func_bank1_f: scope:[func_bank1_f] from main::@5 + [71] phi() + [72] call func_bank2_a + [73] func_bank2_a::return#4 = func_bank2_a::return#1 + to:func_bank1_f::@1 +func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f + [74] func_bank1_f::return#0 = func_bank2_a::return#4 + to:func_bank1_f::@return +func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 + [75] return + to:@return + +__bank(bank) char func_bank2_a(char a , char b) +func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 + [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) + [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) + [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 + to:func_bank2_a::@return +func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a + [78] return + to:@return + +char func_bank2_b(char a , char b) +func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 + [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) + [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) + [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 + to:func_bank2_b::@return +func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b + [81] return + to:@return + +__bank(bank) char func_bank2_c(char a , char b) +func_bank2_c: scope:[func_bank2_c] from main::@8 + [82] phi() + [83] call func_bank1_a + [84] func_bank1_a::return#3 = func_bank1_a::return#0 + to:func_bank2_c::@1 +func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c + [85] func_bank2_c::return#0 = func_bank1_a::return#3 + to:func_bank2_c::@return +func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 + [86] return + to:@return + +__bank(bank) char func_bank2_d(char a , char b) +func_bank2_d: scope:[func_bank2_d] from main::@9 + [87] phi() + [88] call func_bank2_a + [89] func_bank2_a::return#3 = func_bank2_a::return#1 + to:func_bank2_d::@1 +func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d + [90] func_bank2_d::return#0 = func_bank2_a::return#3 + to:func_bank2_d::@return +func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 + [91] return + to:@return + +__bank(bank) char func_bank2_e(char a , char b) +func_bank2_e: scope:[func_bank2_e] from main::@10 + [92] phi() + [93] call func_bank2_b + [94] func_bank2_b::return#0 = func_bank2_b::return#1 + to:func_bank2_e::@1 +func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e + [95] func_bank2_e::return#0 = func_bank2_b::return#0 + to:func_bank2_e::@return +func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 + [96] return + to:@return + +__bank(bank) char func_bank2_f(char a , char b) +func_bank2_f: scope:[func_bank2_f] from main::@11 + [97] phi() + [98] call func_bank1_b + [99] func_bank1_b::return#0 = func_bank1_b::return#1 + to:func_bank2_f::@1 +func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f + [100] func_bank2_f::return#0 = func_bank1_b::return#0 + to:func_bank2_f::@return +func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 + [101] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::a +char func_bank1_a::a#4 // 101.0 +char func_bank1_a::b +char func_bank1_a::b#4 // 101.0 +char func_bank1_a::return +char func_bank1_a::return#0 // 22.66666666666666 +char func_bank1_a::return#10 // 4.0 +char func_bank1_a::return#2 // 22.0 +char func_bank1_a::return#3 // 22.0 +char func_bank1_a::return#4 // 22.0 +char func_bank1_b(char a , char b) +char func_bank1_b::a +char func_bank1_b::a#2 // 101.0 +char func_bank1_b::b +char func_bank1_b::b#2 // 101.0 +char func_bank1_b::return +char func_bank1_b::return#0 // 22.0 +char func_bank1_b::return#1 // 28.5 +char func_bank1_b::return#3 // 4.0 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::a +char func_bank1_c::b +char func_bank1_c::return +char func_bank1_c::return#0 // 4.333333333333333 +char func_bank1_c::return#2 // 4.0 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::a +char func_bank1_d::b +char func_bank1_d::return +char func_bank1_d::return#0 // 4.333333333333333 +char func_bank1_d::return#2 // 4.0 +char func_bank1_e(char a , char b) +char func_bank1_e::a +char func_bank1_e::b +char func_bank1_e::return +char func_bank1_e::return#0 // 4.333333333333333 +char func_bank1_e::return#2 // 4.0 +char func_bank1_f(char a , char b) +char func_bank1_f::a +char func_bank1_f::b +char func_bank1_f::return +char func_bank1_f::return#0 // 4.333333333333333 +char func_bank1_f::return#2 // 4.0 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::a +char func_bank2_a::a#4 // 101.0 +char func_bank2_a::b +char func_bank2_a::b#4 // 101.0 +char func_bank2_a::return +char func_bank2_a::return#0 // 22.0 +char func_bank2_a::return#1 // 22.666666666666664 +char func_bank2_a::return#10 // 4.0 +char func_bank2_a::return#3 // 22.0 +char func_bank2_a::return#4 // 22.0 +char func_bank2_b(char a , char b) +char func_bank2_b::a +char func_bank2_b::a#2 // 101.0 +char func_bank2_b::b +char func_bank2_b::b#2 // 101.0 +char func_bank2_b::return +char func_bank2_b::return#0 // 22.0 +char func_bank2_b::return#1 // 28.5 +char func_bank2_b::return#3 // 4.0 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::a +char func_bank2_c::b +char func_bank2_c::return +char func_bank2_c::return#0 // 4.333333333333333 +char func_bank2_c::return#2 // 4.0 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::a +char func_bank2_d::b +char func_bank2_d::return +char func_bank2_d::return#0 // 4.333333333333333 +char func_bank2_d::return#2 // 4.0 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::a +char func_bank2_e::b +char func_bank2_e::return +char func_bank2_e::return#0 // 4.333333333333333 +char func_bank2_e::return#2 // 4.0 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::a +char func_bank2_f::b +char func_bank2_f::return +char func_bank2_f::return#0 // 4.333333333333333 +char func_bank2_f::return#2 // 4.0 +void main() +char main::$0 // 4.0 +char main::$1 // 4.0 +char main::$10 // 4.0 +char main::$11 // 4.0 +char main::$2 // 4.0 +char main::$3 // 4.0 +char main::$4 // 4.0 +char main::$5 // 4.0 +char main::$6 // 4.0 +char main::$7 // 4.0 +char main::$8 // 4.0 +char main::$9 // 4.0 + +Initial phi equivalence classes +[ func_bank1_a::a#4 ] +[ func_bank1_a::b#4 ] +[ func_bank1_b::a#2 ] +[ func_bank1_b::b#2 ] +[ func_bank2_a::a#4 ] +[ func_bank2_a::b#4 ] +[ func_bank2_b::a#2 ] +[ func_bank2_b::b#2 ] +Added variable func_bank1_a::return#10 to live range equivalence class [ func_bank1_a::return#10 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable func_bank1_b::return#3 to live range equivalence class [ func_bank1_b::return#3 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable func_bank1_c::return#2 to live range equivalence class [ func_bank1_c::return#2 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Added variable func_bank1_d::return#2 to live range equivalence class [ func_bank1_d::return#2 ] +Added variable main::$3 to live range equivalence class [ main::$3 ] +Added variable func_bank1_e::return#2 to live range equivalence class [ func_bank1_e::return#2 ] +Added variable main::$4 to live range equivalence class [ main::$4 ] +Added variable func_bank1_f::return#2 to live range equivalence class [ func_bank1_f::return#2 ] +Added variable main::$5 to live range equivalence class [ main::$5 ] +Added variable func_bank2_a::return#10 to live range equivalence class [ func_bank2_a::return#10 ] +Added variable main::$6 to live range equivalence class [ main::$6 ] +Added variable func_bank2_b::return#3 to live range equivalence class [ func_bank2_b::return#3 ] +Added variable main::$7 to live range equivalence class [ main::$7 ] +Added variable func_bank2_c::return#2 to live range equivalence class [ func_bank2_c::return#2 ] +Added variable main::$8 to live range equivalence class [ main::$8 ] +Added variable func_bank2_d::return#2 to live range equivalence class [ func_bank2_d::return#2 ] +Added variable main::$9 to live range equivalence class [ main::$9 ] +Added variable func_bank2_e::return#2 to live range equivalence class [ func_bank2_e::return#2 ] +Added variable main::$10 to live range equivalence class [ main::$10 ] +Added variable func_bank2_f::return#2 to live range equivalence class [ func_bank2_f::return#2 ] +Added variable main::$11 to live range equivalence class [ main::$11 ] +Added variable func_bank1_a::return#0 to live range equivalence class [ func_bank1_a::return#0 ] +Added variable func_bank1_b::return#1 to live range equivalence class [ func_bank1_b::return#1 ] +Added variable func_bank1_a::return#2 to live range equivalence class [ func_bank1_a::return#2 ] +Added variable func_bank1_c::return#0 to live range equivalence class [ func_bank1_c::return#0 ] +Added variable func_bank2_a::return#0 to live range equivalence class [ func_bank2_a::return#0 ] +Added variable func_bank1_d::return#0 to live range equivalence class [ func_bank1_d::return#0 ] +Added variable func_bank1_a::return#4 to live range equivalence class [ func_bank1_a::return#4 ] +Added variable func_bank1_e::return#0 to live range equivalence class [ func_bank1_e::return#0 ] +Added variable func_bank2_a::return#4 to live range equivalence class [ func_bank2_a::return#4 ] +Added variable func_bank1_f::return#0 to live range equivalence class [ func_bank1_f::return#0 ] +Added variable func_bank2_a::return#1 to live range equivalence class [ func_bank2_a::return#1 ] +Added variable func_bank2_b::return#1 to live range equivalence class [ func_bank2_b::return#1 ] +Added variable func_bank1_a::return#3 to live range equivalence class [ func_bank1_a::return#3 ] +Added variable func_bank2_c::return#0 to live range equivalence class [ func_bank2_c::return#0 ] +Added variable func_bank2_a::return#3 to live range equivalence class [ func_bank2_a::return#3 ] +Added variable func_bank2_d::return#0 to live range equivalence class [ func_bank2_d::return#0 ] +Added variable func_bank2_b::return#0 to live range equivalence class [ func_bank2_b::return#0 ] +Added variable func_bank2_e::return#0 to live range equivalence class [ func_bank2_e::return#0 ] +Added variable func_bank1_b::return#0 to live range equivalence class [ func_bank1_b::return#0 ] +Added variable func_bank2_f::return#0 to live range equivalence class [ func_bank2_f::return#0 ] +Complete equivalence classes +[ func_bank1_a::a#4 ] +[ func_bank1_a::b#4 ] +[ func_bank1_b::a#2 ] +[ func_bank1_b::b#2 ] +[ func_bank2_a::a#4 ] +[ func_bank2_a::b#4 ] +[ func_bank2_b::a#2 ] +[ func_bank2_b::b#2 ] +[ func_bank1_a::return#10 ] +[ main::$0 ] +[ func_bank1_b::return#3 ] +[ main::$1 ] +[ func_bank1_c::return#2 ] +[ main::$2 ] +[ func_bank1_d::return#2 ] +[ main::$3 ] +[ func_bank1_e::return#2 ] +[ main::$4 ] +[ func_bank1_f::return#2 ] +[ main::$5 ] +[ func_bank2_a::return#10 ] +[ main::$6 ] +[ func_bank2_b::return#3 ] +[ main::$7 ] +[ func_bank2_c::return#2 ] +[ main::$8 ] +[ func_bank2_d::return#2 ] +[ main::$9 ] +[ func_bank2_e::return#2 ] +[ main::$10 ] +[ func_bank2_f::return#2 ] +[ main::$11 ] +[ func_bank1_a::return#0 ] +[ func_bank1_b::return#1 ] +[ func_bank1_a::return#2 ] +[ func_bank1_c::return#0 ] +[ func_bank2_a::return#0 ] +[ func_bank1_d::return#0 ] +[ func_bank1_a::return#4 ] +[ func_bank1_e::return#0 ] +[ func_bank2_a::return#4 ] +[ func_bank1_f::return#0 ] +[ func_bank2_a::return#1 ] +[ func_bank2_b::return#1 ] +[ func_bank1_a::return#3 ] +[ func_bank2_c::return#0 ] +[ func_bank2_a::return#3 ] +[ func_bank2_d::return#0 ] +[ func_bank2_b::return#0 ] +[ func_bank2_e::return#0 ] +[ func_bank1_b::return#0 ] +[ func_bank2_f::return#0 ] +Allocated zp[1]:2 [ func_bank1_a::a#4 ] +Allocated zp[1]:3 [ func_bank1_a::b#4 ] +Allocated zp[1]:4 [ func_bank1_b::a#2 ] +Allocated zp[1]:5 [ func_bank1_b::b#2 ] +Allocated zp[1]:6 [ func_bank2_a::a#4 ] +Allocated zp[1]:7 [ func_bank2_a::b#4 ] +Allocated zp[1]:8 [ func_bank2_b::a#2 ] +Allocated zp[1]:9 [ func_bank2_b::b#2 ] +Allocated zp[1]:10 [ func_bank1_b::return#1 ] +Allocated zp[1]:11 [ func_bank2_b::return#1 ] +Allocated zp[1]:12 [ func_bank2_a::return#1 ] +Allocated zp[1]:13 [ func_bank1_a::return#0 ] +Allocated zp[1]:14 [ func_bank1_a::return#2 ] +Allocated zp[1]:15 [ func_bank2_a::return#0 ] +Allocated zp[1]:16 [ func_bank1_a::return#4 ] +Allocated zp[1]:17 [ func_bank2_a::return#4 ] +Allocated zp[1]:18 [ func_bank1_a::return#3 ] +Allocated zp[1]:19 [ func_bank2_a::return#3 ] +Allocated zp[1]:20 [ func_bank2_b::return#0 ] +Allocated zp[1]:21 [ func_bank1_b::return#0 ] +Allocated zp[1]:22 [ func_bank1_c::return#0 ] +Allocated zp[1]:23 [ func_bank1_d::return#0 ] +Allocated zp[1]:24 [ func_bank1_e::return#0 ] +Allocated zp[1]:25 [ func_bank1_f::return#0 ] +Allocated zp[1]:26 [ func_bank2_c::return#0 ] +Allocated zp[1]:27 [ func_bank2_d::return#0 ] +Allocated zp[1]:28 [ func_bank2_e::return#0 ] +Allocated zp[1]:29 [ func_bank2_f::return#0 ] +Allocated zp[1]:30 [ func_bank1_a::return#10 ] +Allocated zp[1]:31 [ main::$0 ] +Allocated zp[1]:32 [ func_bank1_b::return#3 ] +Allocated zp[1]:33 [ main::$1 ] +Allocated zp[1]:34 [ func_bank1_c::return#2 ] +Allocated zp[1]:35 [ main::$2 ] +Allocated zp[1]:36 [ func_bank1_d::return#2 ] +Allocated zp[1]:37 [ main::$3 ] +Allocated zp[1]:38 [ func_bank1_e::return#2 ] +Allocated zp[1]:39 [ main::$4 ] +Allocated zp[1]:40 [ func_bank1_f::return#2 ] +Allocated zp[1]:41 [ main::$5 ] +Allocated zp[1]:42 [ func_bank2_a::return#10 ] +Allocated zp[1]:43 [ main::$6 ] +Allocated zp[1]:44 [ func_bank2_b::return#3 ] +Allocated zp[1]:45 [ main::$7 ] +Allocated zp[1]:46 [ func_bank2_c::return#2 ] +Allocated zp[1]:47 [ main::$8 ] +Allocated zp[1]:48 [ func_bank2_d::return#2 ] +Allocated zp[1]:49 [ main::$9 ] +Allocated zp[1]:50 [ func_bank2_e::return#2 ] +Allocated zp[1]:51 [ main::$10 ] +Allocated zp[1]:52 [ func_bank2_f::return#2 ] +Allocated zp[1]:53 [ main::$11 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 [ func_bank1_a::return#0 ] ( func_bank1_a:1 [ func_bank1_a::return#0 ] { { func_bank1_a::return#0 = func_bank1_a::return#10 } } func_bank1_c:9::func_bank1_a:57 [ func_bank1_a::return#0 ] { { func_bank1_c::return#0 = func_bank1_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#2 } } func_bank1_e:17::func_bank1_a:67 [ func_bank1_a::return#0 ] { { func_bank1_e::return#0 = func_bank1_e::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#4 } } func_bank2_c:33::func_bank1_a:83 [ func_bank1_a::return#0 ] { { func_bank2_c::return#0 = func_bank2_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#3 } } ) always clobbers reg byte a +Statement [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 [ func_bank1_b::return#1 ] ( func_bank1_b:5 [ func_bank1_b::return#1 ] { { func_bank1_b::return#1 = func_bank1_b::return#3 } } func_bank2_f:45::func_bank1_b:98 [ func_bank1_b::return#1 ] { { func_bank2_f::return#0 = func_bank2_f::return#2 } { func_bank1_b::return#0 = func_bank1_b::return#1 } } ) always clobbers reg byte a +Statement [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 [ func_bank2_a::return#1 ] ( func_bank2_a:25 [ func_bank2_a::return#1 ] { { func_bank2_a::return#1 = func_bank2_a::return#10 } } func_bank1_d:13::func_bank2_a:62 [ func_bank2_a::return#1 ] { { func_bank1_d::return#0 = func_bank1_d::return#2 } { func_bank2_a::return#0 = func_bank2_a::return#1 } } func_bank1_f:21::func_bank2_a:72 [ func_bank2_a::return#1 ] { { func_bank1_f::return#0 = func_bank1_f::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#4 } } func_bank2_d:37::func_bank2_a:88 [ func_bank2_a::return#1 ] { { func_bank2_d::return#0 = func_bank2_d::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#3 } } ) always clobbers reg byte a +Statement [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 [ func_bank2_b::return#1 ] ( func_bank2_b:29 [ func_bank2_b::return#1 ] { { func_bank2_b::return#1 = func_bank2_b::return#3 } } func_bank2_e:41::func_bank2_b:93 [ func_bank2_b::return#1 ] { { func_bank2_e::return#0 = func_bank2_e::return#2 } { func_bank2_b::return#0 = func_bank2_b::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ func_bank1_a::a#4 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ func_bank1_a::b#4 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ func_bank1_b::a#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ func_bank1_b::b#2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ func_bank2_a::a#4 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ func_bank2_a::b#4 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ func_bank2_b::a#2 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ func_bank2_b::b#2 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:30 [ func_bank1_a::return#10 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:31 [ main::$0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:32 [ func_bank1_b::return#3 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:33 [ main::$1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ func_bank1_c::return#2 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ main::$2 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ func_bank1_d::return#2 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ main::$3 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ func_bank1_e::return#2 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ main::$4 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ func_bank1_f::return#2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ main::$5 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ func_bank2_a::return#10 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ main::$6 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ func_bank2_b::return#3 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ main::$7 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ func_bank2_c::return#2 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ main::$8 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ func_bank2_d::return#2 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:49 [ main::$9 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:50 [ func_bank2_e::return#2 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:51 [ main::$10 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:52 [ func_bank2_f::return#2 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ main::$11 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:13 [ func_bank1_a::return#0 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ func_bank1_b::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:14 [ func_bank1_a::return#2 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:22 [ func_bank1_c::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:15 [ func_bank2_a::return#0 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:23 [ func_bank1_d::return#0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:16 [ func_bank1_a::return#4 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:24 [ func_bank1_e::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:17 [ func_bank2_a::return#4 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:25 [ func_bank1_f::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ func_bank2_a::return#1 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ func_bank2_b::return#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:18 [ func_bank1_a::return#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:26 [ func_bank2_c::return#0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:19 [ func_bank2_a::return#3 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:27 [ func_bank2_d::return#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:20 [ func_bank2_b::return#0 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:28 [ func_bank2_e::return#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:21 [ func_bank1_b::return#0 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ func_bank2_f::return#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [func_bank1_a] 101: zp[1]:2 [ func_bank1_a::a#4 ] 101: zp[1]:3 [ func_bank1_a::b#4 ] 22.67: zp[1]:13 [ func_bank1_a::return#0 ] 22: zp[1]:14 [ func_bank1_a::return#2 ] 22: zp[1]:16 [ func_bank1_a::return#4 ] 22: zp[1]:18 [ func_bank1_a::return#3 ] 4: zp[1]:30 [ func_bank1_a::return#10 ] +Uplift Scope [func_bank2_a] 101: zp[1]:6 [ func_bank2_a::a#4 ] 101: zp[1]:7 [ func_bank2_a::b#4 ] 22.67: zp[1]:12 [ func_bank2_a::return#1 ] 22: zp[1]:15 [ func_bank2_a::return#0 ] 22: zp[1]:17 [ func_bank2_a::return#4 ] 22: zp[1]:19 [ func_bank2_a::return#3 ] 4: zp[1]:42 [ func_bank2_a::return#10 ] +Uplift Scope [func_bank1_b] 101: zp[1]:4 [ func_bank1_b::a#2 ] 101: zp[1]:5 [ func_bank1_b::b#2 ] 28.5: zp[1]:10 [ func_bank1_b::return#1 ] 22: zp[1]:21 [ func_bank1_b::return#0 ] 4: zp[1]:32 [ func_bank1_b::return#3 ] +Uplift Scope [func_bank2_b] 101: zp[1]:8 [ func_bank2_b::a#2 ] 101: zp[1]:9 [ func_bank2_b::b#2 ] 28.5: zp[1]:11 [ func_bank2_b::return#1 ] 22: zp[1]:20 [ func_bank2_b::return#0 ] 4: zp[1]:44 [ func_bank2_b::return#3 ] +Uplift Scope [main] 4: zp[1]:31 [ main::$0 ] 4: zp[1]:33 [ main::$1 ] 4: zp[1]:35 [ main::$2 ] 4: zp[1]:37 [ main::$3 ] 4: zp[1]:39 [ main::$4 ] 4: zp[1]:41 [ main::$5 ] 4: zp[1]:43 [ main::$6 ] 4: zp[1]:45 [ main::$7 ] 4: zp[1]:47 [ main::$8 ] 4: zp[1]:49 [ main::$9 ] 4: zp[1]:51 [ main::$10 ] 4: zp[1]:53 [ main::$11 ] +Uplift Scope [func_bank1_c] 4.33: zp[1]:22 [ func_bank1_c::return#0 ] 4: zp[1]:34 [ func_bank1_c::return#2 ] +Uplift Scope [func_bank1_d] 4.33: zp[1]:23 [ func_bank1_d::return#0 ] 4: zp[1]:36 [ func_bank1_d::return#2 ] +Uplift Scope [func_bank2_c] 4.33: zp[1]:26 [ func_bank2_c::return#0 ] 4: zp[1]:46 [ func_bank2_c::return#2 ] +Uplift Scope [func_bank2_d] 4.33: zp[1]:27 [ func_bank2_d::return#0 ] 4: zp[1]:48 [ func_bank2_d::return#2 ] +Uplift Scope [func_bank2_e] 4.33: zp[1]:28 [ func_bank2_e::return#0 ] 4: zp[1]:50 [ func_bank2_e::return#2 ] +Uplift Scope [func_bank2_f] 4.33: zp[1]:29 [ func_bank2_f::return#0 ] 4: zp[1]:52 [ func_bank2_f::return#2 ] +Uplift Scope [func_bank1_e] 4.33: zp[1]:24 [ func_bank1_e::return#0 ] 4: zp[1]:38 [ func_bank1_e::return#2 ] +Uplift Scope [func_bank1_f] 4.33: zp[1]:25 [ func_bank1_f::return#0 ] 4: zp[1]:40 [ func_bank1_f::return#2 ] +Uplift Scope [] + +Uplifting [func_bank1_a] best 740 combination reg byte x [ func_bank1_a::a#4 ] reg byte a [ func_bank1_a::b#4 ] reg byte a [ func_bank1_a::return#0 ] reg byte a [ func_bank1_a::return#2 ] zp[1]:16 [ func_bank1_a::return#4 ] zp[1]:18 [ func_bank1_a::return#3 ] zp[1]:30 [ func_bank1_a::return#10 ] +Limited combination testing to 100 combinations of 16384 possible. +Uplifting [func_bank2_a] best 695 combination reg byte x [ func_bank2_a::a#4 ] reg byte a [ func_bank2_a::b#4 ] reg byte a [ func_bank2_a::return#1 ] reg byte a [ func_bank2_a::return#0 ] zp[1]:17 [ func_bank2_a::return#4 ] zp[1]:19 [ func_bank2_a::return#3 ] zp[1]:42 [ func_bank2_a::return#10 ] +Limited combination testing to 100 combinations of 16384 possible. +Uplifting [func_bank1_b] best 668 combination reg byte x [ func_bank1_b::a#2 ] reg byte a [ func_bank1_b::b#2 ] reg byte a [ func_bank1_b::return#1 ] reg byte a [ func_bank1_b::return#0 ] zp[1]:32 [ func_bank1_b::return#3 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [func_bank2_b] best 641 combination reg byte x [ func_bank2_b::a#2 ] reg byte a [ func_bank2_b::b#2 ] reg byte a [ func_bank2_b::return#1 ] reg byte a [ func_bank2_b::return#0 ] zp[1]:44 [ func_bank2_b::return#3 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [main] best 617 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[1]:39 [ main::$4 ] zp[1]:41 [ main::$5 ] zp[1]:43 [ main::$6 ] zp[1]:45 [ main::$7 ] zp[1]:47 [ main::$8 ] zp[1]:49 [ main::$9 ] zp[1]:51 [ main::$10 ] zp[1]:53 [ main::$11 ] +Limited combination testing to 100 combinations of 16777216 possible. +Uplifting [func_bank1_c] best 605 combination reg byte a [ func_bank1_c::return#0 ] reg byte a [ func_bank1_c::return#2 ] +Uplifting [func_bank1_d] best 593 combination reg byte a [ func_bank1_d::return#0 ] reg byte a [ func_bank1_d::return#2 ] +Uplifting [func_bank2_c] best 581 combination reg byte a [ func_bank2_c::return#0 ] reg byte a [ func_bank2_c::return#2 ] +Uplifting [func_bank2_d] best 569 combination reg byte a [ func_bank2_d::return#0 ] reg byte a [ func_bank2_d::return#2 ] +Uplifting [func_bank2_e] best 557 combination reg byte a [ func_bank2_e::return#0 ] reg byte a [ func_bank2_e::return#2 ] +Uplifting [func_bank2_f] best 545 combination reg byte a [ func_bank2_f::return#0 ] reg byte a [ func_bank2_f::return#2 ] +Uplifting [func_bank1_e] best 533 combination reg byte a [ func_bank1_e::return#0 ] reg byte a [ func_bank1_e::return#2 ] +Uplifting [func_bank1_f] best 521 combination reg byte a [ func_bank1_f::return#0 ] reg byte a [ func_bank1_f::return#2 ] +Uplifting [] best 521 combination +Attempting to uplift remaining variables inzp[1]:16 [ func_bank1_a::return#4 ] +Uplifting [func_bank1_a] best 515 combination reg byte a [ func_bank1_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:17 [ func_bank2_a::return#4 ] +Uplifting [func_bank2_a] best 509 combination reg byte a [ func_bank2_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:18 [ func_bank1_a::return#3 ] +Uplifting [func_bank1_a] best 503 combination reg byte a [ func_bank1_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:19 [ func_bank2_a::return#3 ] +Uplifting [func_bank2_a] best 497 combination reg byte a [ func_bank2_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:30 [ func_bank1_a::return#10 ] +Uplifting [func_bank1_a] best 491 combination reg byte a [ func_bank1_a::return#10 ] +Attempting to uplift remaining variables inzp[1]:32 [ func_bank1_b::return#3 ] +Uplifting [func_bank1_b] best 485 combination reg byte a [ func_bank1_b::return#3 ] +Attempting to uplift remaining variables inzp[1]:39 [ main::$4 ] +Uplifting [main] best 479 combination reg byte a [ main::$4 ] +Attempting to uplift remaining variables inzp[1]:41 [ main::$5 ] +Uplifting [main] best 473 combination reg byte a [ main::$5 ] +Attempting to uplift remaining variables inzp[1]:42 [ func_bank2_a::return#10 ] +Uplifting [func_bank2_a] best 467 combination reg byte a [ func_bank2_a::return#10 ] +Attempting to uplift remaining variables inzp[1]:43 [ main::$6 ] +Uplifting [main] best 461 combination reg byte a [ main::$6 ] +Attempting to uplift remaining variables inzp[1]:44 [ func_bank2_b::return#3 ] +Uplifting [func_bank2_b] best 455 combination reg byte a [ func_bank2_b::return#3 ] +Attempting to uplift remaining variables inzp[1]:45 [ main::$7 ] +Uplifting [main] best 449 combination reg byte a [ main::$7 ] +Attempting to uplift remaining variables inzp[1]:47 [ main::$8 ] +Uplifting [main] best 443 combination reg byte a [ main::$8 ] +Attempting to uplift remaining variables inzp[1]:49 [ main::$9 ] +Uplifting [main] best 437 combination reg byte a [ main::$9 ] +Attempting to uplift remaining variables inzp[1]:51 [ main::$10 ] +Uplifting [main] best 431 combination reg byte a [ main::$10 ] +Attempting to uplift remaining variables inzp[1]:53 [ main::$11 ] +Uplifting [main] best 425 combination reg byte a [ main::$11 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call func_bank1_a + // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] + func_bank1_a_from_main: + // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + lda #7 + // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank1_a + .byte 1 + // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + jmp __b1 + // main::@1 + __b1: + // [3] main::$0 = func_bank1_a::return#10 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [5] call func_bank1_b + // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] + func_bank1_b_from___b1: + // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 + lda #7 + // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank1_b + // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = func_bank1_b::return#3 + // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [9] call func_bank1_c + // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize + func_bank1_c_from___b2: + jsr $ff6e + .byte func_bank1_c + .byte 1 + // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + jmp __b3 + // main::@3 + __b3: + // [11] main::$2 = func_bank1_c::return#2 + // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [13] call func_bank1_d + // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize + func_bank1_d_from___b3: + jsr $ff6e + .byte func_bank1_d + .byte 1 + // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + jmp __b4 + // main::@4 + __b4: + // [15] main::$3 = func_bank1_d::return#2 + // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [17] call func_bank1_e + // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] + func_bank1_e_from___b4: + jsr func_bank1_e + // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + jmp __b5 + // main::@5 + __b5: + // [19] main::$4 = func_bank1_e::return#2 + // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // [21] call func_bank1_f + // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] + func_bank1_f_from___b5: + jsr func_bank1_f + // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + jmp __b6 + // main::@6 + __b6: + // [23] main::$5 = func_bank1_f::return#2 + // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // [25] call func_bank2_a + // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] + func_bank2_a_from___b6: + // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + lda #7 + // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank2_a + .byte 2 + // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + jmp __b7 + // main::@7 + __b7: + // [27] main::$6 = func_bank2_a::return#10 + // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [29] call func_bank2_b + // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] + func_bank2_b_from___b7: + // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 + lda #7 + // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank2_b + // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + jmp __b8 + // main::@8 + __b8: + // [31] main::$7 = func_bank2_b::return#3 + // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [33] call func_bank2_c + // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize + func_bank2_c_from___b8: + jsr $ff6e + .byte func_bank2_c + .byte 2 + // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + jmp __b9 + // main::@9 + __b9: + // [35] main::$8 = func_bank2_c::return#2 + // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [37] call func_bank2_d + // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize + func_bank2_d_from___b9: + jsr $ff6e + .byte func_bank2_d + .byte 2 + // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + jmp __b10 + // main::@10 + __b10: + // [39] main::$9 = func_bank2_d::return#2 + // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [41] call func_bank2_e + // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize + func_bank2_e_from___b10: + jsr $ff6e + .byte func_bank2_e + .byte 2 + // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + jmp __b11 + // main::@11 + __b11: + // [43] main::$10 = func_bank2_e::return#2 + // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [45] call func_bank2_f + // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize + func_bank2_f_from___b11: + jsr $ff6e + .byte func_bank2_f + .byte 2 + // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + jmp __b12 + // main::@12 + __b12: + // [47] main::$11 = func_bank2_f::return#2 + // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [49] return + rts +} +.segment stage + // func_bank1_a +// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) +func_bank1_a: { + // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank1_a::@return + __breturn: + // [52] return + rts +} +.segment platform + // func_bank1_b +// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) +func_bank1_b: { + // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank1_b::@return + __breturn: + // [55] return + rts +} +.segment stage + // func_bank1_c +// __register(A) char func_bank1_c(char a, char b) +func_bank1_c: { + .const a = '0' + .const b = 7 + // [57] call func_bank1_a + // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] + func_bank1_a_from_func_bank1_c: + // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_a + // [58] func_bank1_a::return#2 = func_bank1_a::return#0 + jmp __b1 + // func_bank1_c::@1 + __b1: + // [59] func_bank1_c::return#0 = func_bank1_a::return#2 + jmp __breturn + // func_bank1_c::@return + __breturn: + // [60] return + rts +} + // func_bank1_d +// __register(A) char func_bank1_d(char a, char b) +func_bank1_d: { + .const a = '0' + .const b = 7 + // [62] call func_bank2_a + // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] + func_bank2_a_from_func_bank1_d: + // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // [63] func_bank2_a::return#0 = func_bank2_a::return#1 + jmp __b1 + // func_bank1_d::@1 + __b1: + // [64] func_bank1_d::return#0 = func_bank2_a::return#0 + jmp __breturn + // func_bank1_d::@return + __breturn: + // [65] return + rts +} +.segment platform + // func_bank1_e +// __register(A) char func_bank1_e(char a, char b) +func_bank1_e: { + .const a = '0' + .const b = 7 + // [67] call func_bank1_a + // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] + func_bank1_a_from_func_bank1_e: + // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // [68] func_bank1_a::return#4 = func_bank1_a::return#0 + jmp __b1 + // func_bank1_e::@1 + __b1: + // [69] func_bank1_e::return#0 = func_bank1_a::return#4 + jmp __breturn + // func_bank1_e::@return + __breturn: + // [70] return + rts +} + // func_bank1_f +// __register(A) char func_bank1_f(char a, char b) +func_bank1_f: { + .const a = '0' + .const b = 7 + // [72] call func_bank2_a + // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] + func_bank2_a_from_func_bank1_f: + // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // [73] func_bank2_a::return#4 = func_bank2_a::return#1 + jmp __b1 + // func_bank1_f::@1 + __b1: + // [74] func_bank1_f::return#0 = func_bank2_a::return#4 + jmp __breturn + // func_bank1_f::@return + __breturn: + // [75] return + rts +} + // func_bank2_a +// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) +func_bank2_a: { + // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank2_a::@return + __breturn: + // [78] return + rts +} + // func_bank2_b +// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) +func_bank2_b: { + // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank2_b::@return + __breturn: + // [81] return + rts +} + // func_bank2_c +// __register(A) char func_bank2_c(char a, char b) +func_bank2_c: { + .const a = '0' + .const b = 7 + // [83] call func_bank1_a + // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] + func_bank1_a_from_func_bank2_c: + // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // [84] func_bank1_a::return#3 = func_bank1_a::return#0 + jmp __b1 + // func_bank2_c::@1 + __b1: + // [85] func_bank2_c::return#0 = func_bank1_a::return#3 + jmp __breturn + // func_bank2_c::@return + __breturn: + // [86] return + rts +} + // func_bank2_d +// __register(A) char func_bank2_d(char a, char b) +func_bank2_d: { + .const a = '0' + .const b = 7 + // [88] call func_bank2_a + // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] + func_bank2_a_from_func_bank2_d: + // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_a + // [89] func_bank2_a::return#3 = func_bank2_a::return#1 + jmp __b1 + // func_bank2_d::@1 + __b1: + // [90] func_bank2_d::return#0 = func_bank2_a::return#3 + jmp __breturn + // func_bank2_d::@return + __breturn: + // [91] return + rts +} + // func_bank2_e +// __register(A) char func_bank2_e(char a, char b) +func_bank2_e: { + .const a = '0' + .const b = 7 + // [93] call func_bank2_b + // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] + func_bank2_b_from_func_bank2_e: + // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 + lda #b + // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_b + // [94] func_bank2_b::return#0 = func_bank2_b::return#1 + jmp __b1 + // func_bank2_e::@1 + __b1: + // [95] func_bank2_e::return#0 = func_bank2_b::return#0 + jmp __breturn + // func_bank2_e::@return + __breturn: + // [96] return + rts +} + // func_bank2_f +// __register(A) char func_bank2_f(char a, char b) +func_bank2_f: { + .const a = '0' + .const b = 7 + // [98] call func_bank1_b + // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] + func_bank1_b_from_func_bank2_f: + // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 + lda #b + // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_b + // [99] func_bank1_b::return#0 = func_bank1_b::return#1 + jmp __b1 + // func_bank2_f::@1 + __b1: + // [100] func_bank2_f::return#0 = func_bank1_b::return#0 + jmp __breturn + // func_bank2_f::@return + __breturn: + // [101] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __b6 +Removing instruction jmp __b7 +Removing instruction jmp __b8 +Removing instruction jmp __b9 +Removing instruction jmp __b10 +Removing instruction jmp __b11 +Removing instruction jmp __b12 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction func_bank1_a_from_main: +Removing instruction __b1: +Removing instruction func_bank1_b_from___b1: +Removing instruction __b2: +Removing instruction func_bank1_c_from___b2: +Removing instruction __b3: +Removing instruction func_bank1_d_from___b3: +Removing instruction __b4: +Removing instruction func_bank1_e_from___b4: +Removing instruction __b5: +Removing instruction func_bank1_f_from___b5: +Removing instruction __b6: +Removing instruction func_bank2_a_from___b6: +Removing instruction __b7: +Removing instruction func_bank2_b_from___b7: +Removing instruction __b8: +Removing instruction func_bank2_c_from___b8: +Removing instruction __b9: +Removing instruction func_bank2_d_from___b9: +Removing instruction __b10: +Removing instruction func_bank2_e_from___b10: +Removing instruction __b11: +Removing instruction func_bank2_f_from___b11: +Removing instruction __b12: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction func_bank1_a_from_func_bank1_c: +Removing instruction __b1: +Removing instruction func_bank2_a_from_func_bank1_d: +Removing instruction __b1: +Removing instruction func_bank1_a_from_func_bank1_e: +Removing instruction __b1: +Removing instruction func_bank2_a_from_func_bank1_f: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction func_bank1_a_from_func_bank2_c: +Removing instruction __b1: +Removing instruction func_bank2_a_from_func_bank2_d: +Removing instruction __b1: +Removing instruction func_bank2_b_from_func_bank2_e: +Removing instruction __b1: +Removing instruction func_bank1_b_from_func_bank2_f: +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::a +char func_bank1_a::a#4 // reg byte x 101.0 +char func_bank1_a::b +char func_bank1_a::b#4 // reg byte a 101.0 +char func_bank1_a::return +char func_bank1_a::return#0 // reg byte a 22.66666666666666 +char func_bank1_a::return#10 // reg byte a 4.0 +char func_bank1_a::return#2 // reg byte a 22.0 +char func_bank1_a::return#3 // reg byte a 22.0 +char func_bank1_a::return#4 // reg byte a 22.0 +char func_bank1_b(char a , char b) +char func_bank1_b::a +char func_bank1_b::a#2 // reg byte x 101.0 +char func_bank1_b::b +char func_bank1_b::b#2 // reg byte a 101.0 +char func_bank1_b::return +char func_bank1_b::return#0 // reg byte a 22.0 +char func_bank1_b::return#1 // reg byte a 28.5 +char func_bank1_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::a +__constant char func_bank1_c::a#0 = '0' // a +char func_bank1_c::b +__constant char func_bank1_c::b#0 = 7 // b +char func_bank1_c::return +char func_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::a +__constant char func_bank1_d::a#0 = '0' // a +char func_bank1_d::b +__constant char func_bank1_d::b#0 = 7 // b +char func_bank1_d::return +char func_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_bank1_d::return#2 // reg byte a 4.0 +char func_bank1_e(char a , char b) +char func_bank1_e::a +__constant char func_bank1_e::a#0 = '0' // a +char func_bank1_e::b +__constant char func_bank1_e::b#0 = 7 // b +char func_bank1_e::return +char func_bank1_e::return#0 // reg byte a 4.333333333333333 +char func_bank1_e::return#2 // reg byte a 4.0 +char func_bank1_f(char a , char b) +char func_bank1_f::a +__constant char func_bank1_f::a#0 = '0' // a +char func_bank1_f::b +__constant char func_bank1_f::b#0 = 7 // b +char func_bank1_f::return +char func_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::a +char func_bank2_a::a#4 // reg byte x 101.0 +char func_bank2_a::b +char func_bank2_a::b#4 // reg byte a 101.0 +char func_bank2_a::return +char func_bank2_a::return#0 // reg byte a 22.0 +char func_bank2_a::return#1 // reg byte a 22.666666666666664 +char func_bank2_a::return#10 // reg byte a 4.0 +char func_bank2_a::return#3 // reg byte a 22.0 +char func_bank2_a::return#4 // reg byte a 22.0 +char func_bank2_b(char a , char b) +char func_bank2_b::a +char func_bank2_b::a#2 // reg byte x 101.0 +char func_bank2_b::b +char func_bank2_b::b#2 // reg byte a 101.0 +char func_bank2_b::return +char func_bank2_b::return#0 // reg byte a 22.0 +char func_bank2_b::return#1 // reg byte a 28.5 +char func_bank2_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::a +__constant char func_bank2_c::a#0 = '0' // a +char func_bank2_c::b +__constant char func_bank2_c::b#0 = 7 // b +char func_bank2_c::return +char func_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::a +__constant char func_bank2_d::a#0 = '0' // a +char func_bank2_d::b +__constant char func_bank2_d::b#0 = 7 // b +char func_bank2_d::return +char func_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::a +__constant char func_bank2_e::a#0 = '0' // a +char func_bank2_e::b +__constant char func_bank2_e::b#0 = 7 // b +char func_bank2_e::return +char func_bank2_e::return#0 // reg byte a 4.333333333333333 +char func_bank2_e::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::a +__constant char func_bank2_f::a#0 = '0' // a +char func_bank2_f::b +__constant char func_bank2_f::b#0 = 7 // b +char func_bank2_f::return +char func_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_bank2_f::return#2 // reg byte a 4.0 +void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 +char main::$10 // reg byte a 4.0 +char main::$11 // reg byte a 4.0 +char main::$2 // reg byte a 4.0 +char main::$3 // reg byte a 4.0 +char main::$4 // reg byte a 4.0 +char main::$5 // reg byte a 4.0 +char main::$6 // reg byte a 4.0 +char main::$7 // reg byte a 4.0 +char main::$8 // reg byte a 4.0 +char main::$9 // reg byte a 4.0 + +reg byte x [ func_bank1_a::a#4 ] +reg byte a [ func_bank1_a::b#4 ] +reg byte x [ func_bank1_b::a#2 ] +reg byte a [ func_bank1_b::b#2 ] +reg byte x [ func_bank2_a::a#4 ] +reg byte a [ func_bank2_a::b#4 ] +reg byte x [ func_bank2_b::a#2 ] +reg byte a [ func_bank2_b::b#2 ] +reg byte a [ func_bank1_a::return#10 ] +reg byte a [ main::$0 ] +reg byte a [ func_bank1_b::return#3 ] +reg byte a [ main::$1 ] +reg byte a [ func_bank1_c::return#2 ] +reg byte a [ main::$2 ] +reg byte a [ func_bank1_d::return#2 ] +reg byte a [ main::$3 ] +reg byte a [ func_bank1_e::return#2 ] +reg byte a [ main::$4 ] +reg byte a [ func_bank1_f::return#2 ] +reg byte a [ main::$5 ] +reg byte a [ func_bank2_a::return#10 ] +reg byte a [ main::$6 ] +reg byte a [ func_bank2_b::return#3 ] +reg byte a [ main::$7 ] +reg byte a [ func_bank2_c::return#2 ] +reg byte a [ main::$8 ] +reg byte a [ func_bank2_d::return#2 ] +reg byte a [ main::$9 ] +reg byte a [ func_bank2_e::return#2 ] +reg byte a [ main::$10 ] +reg byte a [ func_bank2_f::return#2 ] +reg byte a [ main::$11 ] +reg byte a [ func_bank1_a::return#0 ] +reg byte a [ func_bank1_b::return#1 ] +reg byte a [ func_bank1_a::return#2 ] +reg byte a [ func_bank1_c::return#0 ] +reg byte a [ func_bank2_a::return#0 ] +reg byte a [ func_bank1_d::return#0 ] +reg byte a [ func_bank1_a::return#4 ] +reg byte a [ func_bank1_e::return#0 ] +reg byte a [ func_bank2_a::return#4 ] +reg byte a [ func_bank1_f::return#0 ] +reg byte a [ func_bank2_a::return#1 ] +reg byte a [ func_bank2_b::return#1 ] +reg byte a [ func_bank1_a::return#3 ] +reg byte a [ func_bank2_c::return#0 ] +reg byte a [ func_bank2_a::return#3 ] +reg byte a [ func_bank2_d::return#0 ] +reg byte a [ func_bank2_b::return#0 ] +reg byte a [ func_bank2_e::return#0 ] +reg byte a [ func_bank1_b::return#0 ] +reg byte a [ func_bank2_f::return#0 ] + + +FINAL ASSEMBLER +Score: 326 + + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // func_bank1_a('0', 7) + // [1] call func_bank1_a + // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] + // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + lda #7 + // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a('0', 7) + // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + // main::@1 + // [3] main::$0 = func_bank1_a::return#10 + // SCREEN[0] = func_bank1_a('0', 7) + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_b('0', 7) + // [5] call func_bank1_b + // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] + // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 + lda #7 + // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank1_b + // func_bank1_b('0', 7) + // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + // main::@2 + // [7] main::$1 = func_bank1_b::return#3 + // SCREEN[0] = func_bank1_b('0', 7) + // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_c('0', 7) + // [9] call func_bank1_c + // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank1_c + .byte 1 + // func_bank1_c('0', 7) + // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + // main::@3 + // [11] main::$2 = func_bank1_c::return#2 + // SCREEN[0] = func_bank1_c('0', 7) + // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_d('0', 7) + // [13] call func_bank1_d + // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank1_d + .byte 1 + // func_bank1_d('0', 7) + // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + // main::@4 + // [15] main::$3 = func_bank1_d::return#2 + // SCREEN[0] = func_bank1_d('0', 7) + // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_e('0', 7) + // [17] call func_bank1_e + // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] + jsr func_bank1_e + // func_bank1_e('0', 7) + // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + // main::@5 + // [19] main::$4 = func_bank1_e::return#2 + // SCREEN[0] = func_bank1_e('0', 7) + // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // func_bank1_f('0', 7) + // [21] call func_bank1_f + // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] + jsr func_bank1_f + // func_bank1_f('0', 7) + // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + // main::@6 + // [23] main::$5 = func_bank1_f::return#2 + // SCREEN[0] = func_bank1_f('0', 7) + // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // func_bank2_a('0', 7) + // [25] call func_bank2_a + // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] + // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + lda #7 + // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a('0', 7) + // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + // main::@7 + // [27] main::$6 = func_bank2_a::return#10 + // SCREEN[0] = func_bank2_a('0', 7) + // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_b('0', 7) + // [29] call func_bank2_b + // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] + // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 + lda #7 + // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank2_b + // func_bank2_b('0', 7) + // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + // main::@8 + // [31] main::$7 = func_bank2_b::return#3 + // SCREEN[0] = func_bank2_b('0', 7) + // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_c('0', 7) + // [33] call func_bank2_c + // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_c + .byte 2 + // func_bank2_c('0', 7) + // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + // main::@9 + // [35] main::$8 = func_bank2_c::return#2 + // SCREEN[0] = func_bank2_c('0', 7) + // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_d('0', 7) + // [37] call func_bank2_d + // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_d + .byte 2 + // func_bank2_d('0', 7) + // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + // main::@10 + // [39] main::$9 = func_bank2_d::return#2 + // SCREEN[0] = func_bank2_d('0', 7) + // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_e('0', 7) + // [41] call func_bank2_e + // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_e + .byte 2 + // func_bank2_e('0', 7) + // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + // main::@11 + // [43] main::$10 = func_bank2_e::return#2 + // SCREEN[0] = func_bank2_e('0', 7) + // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_f('0', 7) + // [45] call func_bank2_f + // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_f + .byte 2 + // func_bank2_f('0', 7) + // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + // main::@12 + // [47] main::$11 = func_bank2_f::return#2 + // SCREEN[0] = func_bank2_f('0', 7) + // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // main::@return + // } + // [49] return + rts +} +.segment stage + // func_bank1_a +// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) +func_bank1_a: { + // a+b + // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank1_a::@return + // } + // [52] return + rts +} +.segment platform + // func_bank1_b +// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) +func_bank1_b: { + // a+b + // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank1_b::@return + // } + // [55] return + rts +} +.segment stage + // func_bank1_c +// __register(A) char func_bank1_c(char a, char b) +func_bank1_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + // [57] call func_bank1_a + // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] + // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_a + // func_bank1_a(a,b) + // [58] func_bank1_a::return#2 = func_bank1_a::return#0 + // func_bank1_c::@1 + // [59] func_bank1_c::return#0 = func_bank1_a::return#2 + // func_bank1_c::@return + // } + // [60] return + rts +} + // func_bank1_d +// __register(A) char func_bank1_d(char a, char b) +func_bank1_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + // [62] call func_bank2_a + // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] + // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // [63] func_bank2_a::return#0 = func_bank2_a::return#1 + // func_bank1_d::@1 + // [64] func_bank1_d::return#0 = func_bank2_a::return#0 + // func_bank1_d::@return + // } + // [65] return + rts +} +.segment platform + // func_bank1_e +// __register(A) char func_bank1_e(char a, char b) +func_bank1_e: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + // [67] call func_bank1_a + // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] + // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // [68] func_bank1_a::return#4 = func_bank1_a::return#0 + // func_bank1_e::@1 + // [69] func_bank1_e::return#0 = func_bank1_a::return#4 + // func_bank1_e::@return + // } + // [70] return + rts +} + // func_bank1_f +// __register(A) char func_bank1_f(char a, char b) +func_bank1_f: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + // [72] call func_bank2_a + // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] + // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // [73] func_bank2_a::return#4 = func_bank2_a::return#1 + // func_bank1_f::@1 + // [74] func_bank1_f::return#0 = func_bank2_a::return#4 + // func_bank1_f::@return + // } + // [75] return + rts +} + // func_bank2_a +// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) +func_bank2_a: { + // a+b + // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank2_a::@return + // } + // [78] return + rts +} + // func_bank2_b +// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) +func_bank2_b: { + // a+b + // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank2_b::@return + // } + // [81] return + rts +} + // func_bank2_c +// __register(A) char func_bank2_c(char a, char b) +func_bank2_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + // [83] call func_bank1_a + // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] + // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // [84] func_bank1_a::return#3 = func_bank1_a::return#0 + // func_bank2_c::@1 + // [85] func_bank2_c::return#0 = func_bank1_a::return#3 + // func_bank2_c::@return + // } + // [86] return + rts +} + // func_bank2_d +// __register(A) char func_bank2_d(char a, char b) +func_bank2_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + // [88] call func_bank2_a + // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] + // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_a + // func_bank2_a(a,b) + // [89] func_bank2_a::return#3 = func_bank2_a::return#1 + // func_bank2_d::@1 + // [90] func_bank2_d::return#0 = func_bank2_a::return#3 + // func_bank2_d::@return + // } + // [91] return + rts +} + // func_bank2_e +// __register(A) char func_bank2_e(char a, char b) +func_bank2_e: { + .const a = '0' + .const b = 7 + // func_bank2_b(a,b) + // [93] call func_bank2_b + // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] + // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 + lda #b + // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_b + // func_bank2_b(a,b) + // [94] func_bank2_b::return#0 = func_bank2_b::return#1 + // func_bank2_e::@1 + // [95] func_bank2_e::return#0 = func_bank2_b::return#0 + // func_bank2_e::@return + // } + // [96] return + rts +} + // func_bank2_f +// __register(A) char func_bank2_f(char a, char b) +func_bank2_f: { + .const a = '0' + .const b = 7 + // func_bank1_b(a,b) + // [98] call func_bank1_b + // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] + // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 + lda #b + // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_b + // func_bank1_b(a,b) + // [99] func_bank1_b::return#0 = func_bank1_b::return#1 + // func_bank2_f::@1 + // [100] func_bank2_f::return#0 = func_bank1_b::return#0 + // func_bank2_f::@return + // } + // [101] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.sym b/src/test/ref/procedure-callingconvention-phi-bank-5.sym new file mode 100644 index 000000000..c0905901f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.sym @@ -0,0 +1,171 @@ +__constant char * const SCREEN = (char *) 1024 +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::a +char func_bank1_a::a#4 // reg byte x 101.0 +char func_bank1_a::b +char func_bank1_a::b#4 // reg byte a 101.0 +char func_bank1_a::return +char func_bank1_a::return#0 // reg byte a 22.66666666666666 +char func_bank1_a::return#10 // reg byte a 4.0 +char func_bank1_a::return#2 // reg byte a 22.0 +char func_bank1_a::return#3 // reg byte a 22.0 +char func_bank1_a::return#4 // reg byte a 22.0 +char func_bank1_b(char a , char b) +char func_bank1_b::a +char func_bank1_b::a#2 // reg byte x 101.0 +char func_bank1_b::b +char func_bank1_b::b#2 // reg byte a 101.0 +char func_bank1_b::return +char func_bank1_b::return#0 // reg byte a 22.0 +char func_bank1_b::return#1 // reg byte a 28.5 +char func_bank1_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::a +__constant char func_bank1_c::a#0 = '0' // a +char func_bank1_c::b +__constant char func_bank1_c::b#0 = 7 // b +char func_bank1_c::return +char func_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::a +__constant char func_bank1_d::a#0 = '0' // a +char func_bank1_d::b +__constant char func_bank1_d::b#0 = 7 // b +char func_bank1_d::return +char func_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_bank1_d::return#2 // reg byte a 4.0 +char func_bank1_e(char a , char b) +char func_bank1_e::a +__constant char func_bank1_e::a#0 = '0' // a +char func_bank1_e::b +__constant char func_bank1_e::b#0 = 7 // b +char func_bank1_e::return +char func_bank1_e::return#0 // reg byte a 4.333333333333333 +char func_bank1_e::return#2 // reg byte a 4.0 +char func_bank1_f(char a , char b) +char func_bank1_f::a +__constant char func_bank1_f::a#0 = '0' // a +char func_bank1_f::b +__constant char func_bank1_f::b#0 = 7 // b +char func_bank1_f::return +char func_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::a +char func_bank2_a::a#4 // reg byte x 101.0 +char func_bank2_a::b +char func_bank2_a::b#4 // reg byte a 101.0 +char func_bank2_a::return +char func_bank2_a::return#0 // reg byte a 22.0 +char func_bank2_a::return#1 // reg byte a 22.666666666666664 +char func_bank2_a::return#10 // reg byte a 4.0 +char func_bank2_a::return#3 // reg byte a 22.0 +char func_bank2_a::return#4 // reg byte a 22.0 +char func_bank2_b(char a , char b) +char func_bank2_b::a +char func_bank2_b::a#2 // reg byte x 101.0 +char func_bank2_b::b +char func_bank2_b::b#2 // reg byte a 101.0 +char func_bank2_b::return +char func_bank2_b::return#0 // reg byte a 22.0 +char func_bank2_b::return#1 // reg byte a 28.5 +char func_bank2_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::a +__constant char func_bank2_c::a#0 = '0' // a +char func_bank2_c::b +__constant char func_bank2_c::b#0 = 7 // b +char func_bank2_c::return +char func_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::a +__constant char func_bank2_d::a#0 = '0' // a +char func_bank2_d::b +__constant char func_bank2_d::b#0 = 7 // b +char func_bank2_d::return +char func_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::a +__constant char func_bank2_e::a#0 = '0' // a +char func_bank2_e::b +__constant char func_bank2_e::b#0 = 7 // b +char func_bank2_e::return +char func_bank2_e::return#0 // reg byte a 4.333333333333333 +char func_bank2_e::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::a +__constant char func_bank2_f::a#0 = '0' // a +char func_bank2_f::b +__constant char func_bank2_f::b#0 = 7 // b +char func_bank2_f::return +char func_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_bank2_f::return#2 // reg byte a 4.0 +void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 +char main::$10 // reg byte a 4.0 +char main::$11 // reg byte a 4.0 +char main::$2 // reg byte a 4.0 +char main::$3 // reg byte a 4.0 +char main::$4 // reg byte a 4.0 +char main::$5 // reg byte a 4.0 +char main::$6 // reg byte a 4.0 +char main::$7 // reg byte a 4.0 +char main::$8 // reg byte a 4.0 +char main::$9 // reg byte a 4.0 + +reg byte x [ func_bank1_a::a#4 ] +reg byte a [ func_bank1_a::b#4 ] +reg byte x [ func_bank1_b::a#2 ] +reg byte a [ func_bank1_b::b#2 ] +reg byte x [ func_bank2_a::a#4 ] +reg byte a [ func_bank2_a::b#4 ] +reg byte x [ func_bank2_b::a#2 ] +reg byte a [ func_bank2_b::b#2 ] +reg byte a [ func_bank1_a::return#10 ] +reg byte a [ main::$0 ] +reg byte a [ func_bank1_b::return#3 ] +reg byte a [ main::$1 ] +reg byte a [ func_bank1_c::return#2 ] +reg byte a [ main::$2 ] +reg byte a [ func_bank1_d::return#2 ] +reg byte a [ main::$3 ] +reg byte a [ func_bank1_e::return#2 ] +reg byte a [ main::$4 ] +reg byte a [ func_bank1_f::return#2 ] +reg byte a [ main::$5 ] +reg byte a [ func_bank2_a::return#10 ] +reg byte a [ main::$6 ] +reg byte a [ func_bank2_b::return#3 ] +reg byte a [ main::$7 ] +reg byte a [ func_bank2_c::return#2 ] +reg byte a [ main::$8 ] +reg byte a [ func_bank2_d::return#2 ] +reg byte a [ main::$9 ] +reg byte a [ func_bank2_e::return#2 ] +reg byte a [ main::$10 ] +reg byte a [ func_bank2_f::return#2 ] +reg byte a [ main::$11 ] +reg byte a [ func_bank1_a::return#0 ] +reg byte a [ func_bank1_b::return#1 ] +reg byte a [ func_bank1_a::return#2 ] +reg byte a [ func_bank1_c::return#0 ] +reg byte a [ func_bank2_a::return#0 ] +reg byte a [ func_bank1_d::return#0 ] +reg byte a [ func_bank1_a::return#4 ] +reg byte a [ func_bank1_e::return#0 ] +reg byte a [ func_bank2_a::return#4 ] +reg byte a [ func_bank1_f::return#0 ] +reg byte a [ func_bank2_a::return#1 ] +reg byte a [ func_bank2_b::return#1 ] +reg byte a [ func_bank1_a::return#3 ] +reg byte a [ func_bank2_c::return#0 ] +reg byte a [ func_bank2_a::return#3 ] +reg byte a [ func_bank2_d::return#0 ] +reg byte a [ func_bank2_b::return#0 ] +reg byte a [ func_bank2_e::return#0 ] +reg byte a [ func_bank1_b::return#0 ] +reg byte a [ func_bank2_f::return#0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.asm b/src/test/ref/procedure-callingconvention-stack-bank-0.asm new file mode 100644 index 000000000..ec687e5fb --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + jsr plus + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.cfg b/src/test/ref/procedure-callingconvention-stack-bank-0.cfg new file mode 100644 index 000000000..e23f2647e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.cfg @@ -0,0 +1,24 @@ + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.log b/src/test/ref/procedure-callingconvention-stack-bank-0.log new file mode 100644 index 000000000..de9b614ed --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.log @@ -0,0 +1,350 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Uplifting [main] best 73 combination reg byte a [ main::$0 ] +Uplifting [] best 73 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 67 + + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.sym b/src/test/ref/procedure-callingconvention-stack-bank-0.sym new file mode 100644 index 000000000..30874c0fd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.asm b/src/test/ref/procedure-callingconvention-stack-bank-1.asm new file mode 100644 index 000000000..ec687e5fb --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + jsr plus + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.cfg b/src/test/ref/procedure-callingconvention-stack-bank-1.cfg new file mode 100644 index 000000000..e23f2647e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.cfg @@ -0,0 +1,24 @@ + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.log b/src/test/ref/procedure-callingconvention-stack-bank-1.log new file mode 100644 index 000000000..de9b614ed --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.log @@ -0,0 +1,350 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Uplifting [main] best 73 combination reg byte a [ main::$0 ] +Uplifting [] best 73 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 67 + + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.sym b/src/test/ref/procedure-callingconvention-stack-bank-1.sym new file mode 100644 index 000000000..30874c0fd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.asm b/src/test/ref/procedure-callingconvention-stack-bank-2.asm new file mode 100644 index 000000000..10a9f97c1 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.asm @@ -0,0 +1,74 @@ +// Test a procedure with calling convention stack +// A slightly more complex call +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code +__start: { + // char i = 0 + lda #0 + sta.z i + jsr main + rts +} +.segment stage +// this should give a pragma error during compile, as test is not declared yet. +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + inc.z i + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + .label a = 3 + lda #0 + sta.z a + __b1: + // char v = a+1 + ldx.z a + inx + // char w = plus('0', v) + lda #'0' + pha + txa + pha + jsr plus + pla + pla + // w+a + clc + adc.z a + // SCREEN[i] = w+a + ldy.z i + sta SCREEN,y + // for(char a:0..1) + inc.z a + lda #2 + cmp.z a + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.cfg b/src/test/ref/procedure-callingconvention-stack-bank-2.cfg new file mode 100644 index 000000000..ff4b58982 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.cfg @@ -0,0 +1,48 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.log b/src/test/ref/procedure-callingconvention-stack-bank-2.log new file mode 100644 index 000000000..4a6f3d67b --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.log @@ -0,0 +1,595 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Converting variable modified inside __stackcall procedure plus() to load/store i +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Inlined call call __init +Eliminating unused variable with no statement main::$0 +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::w = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = main::v + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start::@1 + main::a#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) + main::v#0 = main::a#2 + 1 + stackpush(char) = '0' + stackpush(char) = main::v#0 + callexecute plus + sideeffect stackpullpadding(1) + main::w#0 = stackpull(char) + main::$2 = main::w#0 + main::a#2 + SCREEN[i] = main::$2 + main::a#1 = main::a#2 + rangenext(0,1) + main::$3 = main::a#1 != rangelast(0,1) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + i = ++ i + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@2 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i +void main() +char main::$2 +bool main::$3 +char main::a +char main::a#0 +char main::a#1 +char main::a#2 +char main::v +char main::v#0 +char main::w +char main::w#0 +__stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::a#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ +Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 +Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::a#0 +Constant inlined main::a#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to plus:17 + +Created 1 initial phi equivalence classes +Coalesced [25] main::a#3 = main::a#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label __start::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus + +VARIABLE REGISTER WEIGHTS +void __start() +__loadstore char i // 105.24999999999999 +void main() +char main::$2 // 202.0 +char main::a +char main::a#1 // 151.5 +char main::a#2 // 44.888888888888886 +char main::v +char main::v#0 // 101.0 +char main::w +char main::w#0 // 202.0 +__stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 667.3333333333334 +char plus::b +char plus::b#0 // 1001.0 +char plus::return +char plus::return#0 // 2002.0 + +Initial phi equivalence classes +[ main::a#2 main::a#1 ] +Added variable i to live range equivalence class [ i ] +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::v#0 to live range equivalence class [ main::v#0 ] +Added variable main::w#0 to live range equivalence class [ main::w#0 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Complete equivalence classes +[ main::a#2 main::a#1 ] +[ i ] +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::v#0 ] +[ main::w#0 ] +[ main::$2 ] +Allocated zp[1]:2 [ plus::return#0 ] +Allocated zp[1]:3 [ plus::b#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::w#0 ] +Allocated zp[1]:6 [ main::$2 ] +Allocated zp[1]:7 [ main::a#2 main::a#1 ] +Allocated zp[1]:8 [ i ] +Allocated zp[1]:9 [ main::v#0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , +Potential registers zp[1]:8 [ i ] : zp[1]:8 , +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] +Uplift Scope [] 105.25: zp[1]:8 [ i ] +Uplift Scope [__start] + +Uplifting [plus] best 945 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] +Uplifting [main] best 785 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] +Uplifting [] best 785 combination zp[1]:8 [ i ] +Uplifting [__start] best 785 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Uplifting [plus] best 785 combination zp[1]:4 [ plus::a#0 ] +Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] +Uplifting [main] best 785 combination zp[1]:7 [ main::a#2 main::a#1 ] +Attempting to uplift remaining variables inzp[1]:8 [ i ] +Uplifting [] best 785 combination zp[1]:8 [ i ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] +Allocated (was zp[1]:8) zp[1]:4 [ i ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} +.segment stage + // plus +// this should give a pragma error during compile, as test is not declared yet. +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + jmp __b1 + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [23] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction main_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] + + +FINAL ASSEMBLER +Score: 656 + + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char i = 0 + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + jsr main + // __start::@return + // [4] return + rts +} +.segment stage + // plus +// this should give a pragma error during compile, as test is not declared yet. +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // return a+b; + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // char v = a+1 + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // char w = plus('0', v) + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // w+a + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // SCREEN[i] = w+a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // for(char a:0..1) + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1 + // main::@return + // } + // [23] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.sym b/src/test/ref/procedure-callingconvention-stack-bank-2.sym new file mode 100644 index 000000000..0e71cf52f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.sym @@ -0,0 +1,32 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.asm b/src/test/ref/procedure-callingconvention-stack-bank-3.asm new file mode 100644 index 000000000..57944cb6c --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.asm @@ -0,0 +1,74 @@ +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .label SCREEN = $400 + .label val = 2 +.segment Code +__start: { + // char val = 0 + lda #0 + sta.z val + jsr main + rts +} +printother: { + ldx #0 + __b1: + // (SCREEN+40)[i]++; + inc SCREEN+$28,x + // for(char i:0..5) + inx + cpx #6 + bne __b1 + // } + rts +} +incval: { + // val++; + inc.z val + // } + rts +} +printval: { + // SCREEN[0] = val + lda.z val + sta SCREEN + // } + rts +} +ival: { + // incval() + jsr incval + // } + rts +} +pval: { + // printval() + jsr printval + // } + rts +} +.segment stage +main: { + ldy #0 + __b1: + // pval() + jsr pval + // printother() + jsr printother + // ival() + jsr ival + // for(char i:0..5) + iny + cpy #6 + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.cfg b/src/test/ref/procedure-callingconvention-stack-bank-3.cfg new file mode 100644 index 000000000..01f3d9e0f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.cfg @@ -0,0 +1,79 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.log b/src/test/ref/procedure-callingconvention-stack-bank-3.log new file mode 100644 index 000000000..6c840b6f9 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.log @@ -0,0 +1,644 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Converting variable modified inside __stackcall procedure main() to load/store val +Inlined call call __init +Calling convention __stackcall adding prepare/execute/finalize for call pval +Calling convention __stackcall adding prepare/execute/finalize for call printother +Calling convention __stackcall adding prepare/execute/finalize for call ival +Calling convention __stackcall adding prepare/execute/finalize for call printval +Calling convention __stackcall adding prepare/execute/finalize for call incval +Calling convention __stackcall adding prepare/execute/finalize for call main + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) + callexecute pval + callexecute printother + callexecute ival + main::i#1 = main::i#2 + rangenext(0,5) + main::$3 = main::i#1 != rangelast(0,5) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__stackcall void pval() +pval: scope:[pval] from + callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + return + to:@return + +__stackcall void ival() +ival: scope:[ival] from + callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + return + to:@return + +__stackcall void printval() +printval: scope:[printval] from + SCREEN[0] = val + to:printval::@return +printval::@return: scope:[printval] from printval + return + to:@return + +__stackcall void incval() +incval: scope:[incval] from + val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + return + to:@return + +__stackcall void printother() +printother: scope:[printother] from + printother::i#0 = 0 + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) + (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + printother::i#1 = printother::i#2 + rangenext(0,5) + printother::$1 = printother::i#1 != rangelast(0,5) + if(printother::$1) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +bool main::$3 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +__stackcall void printother() +bool printother::$1 +char printother::i +char printother::i#0 +char printother::i#1 +char printother::i#2 +__stackcall void printval() +__stackcall void pval() +__loadstore char val + +Adding number conversion cast (unumber) 0 in SCREEN[0] = val +Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 +Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Constant printother::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ +Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 +Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ +Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 +Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val +Successful SSA optimization PassNSimplifyExpressionWithZero +Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 +Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 6 +Simplifying constant integer cast 6 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 6 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings printother::i#0 +Constant inlined main::i#0 = 0 +Constant inlined printother::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [ival] to incval:17 +Calls in [pval] to printval:20 +Calls in [main] to pval:24 printother:25 ival:26 + +Created 2 initial phi equivalence classes +Coalesced [11] printother::i#3 = printother::i#1 +Coalesced [30] main::i#3 = main::i#1 +Coalesced down to 2 phi equivalence classes +Culled Empty Block label printother::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval + +VARIABLE REGISTER WEIGHTS +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // 151.5 +char main::i#2 // 50.5 +__stackcall void printother() +char printother::i +char printother::i#1 // 15001.5 +char printother::i#2 // 20002.0 +__stackcall void printval() +__stackcall void pval() +__loadstore char val // 1579.2105263157896 + +Initial phi equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +Added variable val to live range equivalence class [ val ] +Complete equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +[ val ] +Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] +Allocated zp[1]:3 [ val ] +Allocated zp[1]:4 [ main::i#2 main::i#1 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ val ] : zp[1]:3 , + +REGISTER UPLIFT SCOPES +Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] +Uplift Scope [] 1,579.21: zp[1]:3 [ val ] +Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] +Uplift Scope [pval] +Uplift Scope [ival] +Uplift Scope [printval] +Uplift Scope [incval] +Uplift Scope [__start] + +Uplifting [printother] best 815 combination reg byte x [ printother::i#2 printother::i#1 ] +Uplifting [] best 815 combination zp[1]:3 [ val ] +Uplifting [main] best 725 combination reg byte y [ main::i#2 main::i#1 ] +Uplifting [pval] best 725 combination +Uplifting [ival] best 725 combination +Uplifting [printval] best 725 combination +Uplifting [incval] best 725 combination +Uplifting [__start] best 725 combination +Attempting to uplift remaining variables inzp[1]:3 [ val ] +Uplifting [] best 725 combination zp[1]:3 [ val ] +Allocated (was zp[1]:3) zp[1]:2 [ val ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + __b1_from_printother: + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + __b1_from___b1: + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + jmp __b1 + // printother::@1 + __b1: + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1_from___b1 + jmp __breturn + // printother::@return + __breturn: + // [10] return + rts +} + // incval +incval: { + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + jmp __breturn + // incval::@return + __breturn: + // [12] return + rts +} + // printval +printval: { + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + jmp __breturn + // printval::@return + __breturn: + // [14] return + rts +} + // ival +ival: { + // [16] callexecute incval -- call_vprc1 + jsr incval + jmp __breturn + // ival::@return + __breturn: + // [17] return + rts +} + // pval +pval: { + // [19] callexecute printval -- call_vprc1 + jsr printval + jmp __breturn + // pval::@return + __breturn: + // [20] return + rts +} +.segment stage + // main +main: { + // [22] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b1 + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [23] callexecute pval -- call_vprc1 + jsr pval + // [24] callexecute printother -- call_vprc1 + jsr printother + // [25] callexecute ival -- call_vprc1 + jsr ival + // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #6 + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [28] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction __b1_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b1_from_printother: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // reg byte y 151.5 +char main::i#2 // reg byte y 50.5 +__stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__stackcall void printval() +__stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +reg byte y [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] + + +FINAL ASSEMBLER +Score: 497 + + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + // __start::__init1 + // char val = 0 + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + // printother::@1 + __b1: + // (SCREEN+40)[i]++; + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // for(char i:0..5) + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1 + // printother::@return + // } + // [10] return + rts +} + // incval +incval: { + // val++; + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + // incval::@return + // } + // [12] return + rts +} + // printval +printval: { + // SCREEN[0] = val + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + // printval::@return + // } + // [14] return + rts +} + // ival +ival: { + // incval() + // [16] callexecute incval -- call_vprc1 + jsr incval + // ival::@return + // } + // [17] return + rts +} + // pval +pval: { + // printval() + // [19] callexecute printval -- call_vprc1 + jsr printval + // pval::@return + // } + // [20] return + rts +} +.segment stage + // main +main: { + // [22] phi from main to main::@1 [phi:main->main::@1] + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // pval() + // [23] callexecute pval -- call_vprc1 + jsr pval + // printother() + // [24] callexecute printother -- call_vprc1 + jsr printother + // ival() + // [25] callexecute ival -- call_vprc1 + jsr ival + // for(char i:0..5) + // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #6 + bne __b1 + // main::@return + // } + // [28] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.sym b/src/test/ref/procedure-callingconvention-stack-bank-3.sym new file mode 100644 index 000000000..4eeb8472d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // reg byte y 151.5 +char main::i#2 // reg byte y 50.5 +__stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__stackcall void printval() +__stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +reg byte y [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.asm b/src/test/ref/procedure-callingconvention-stack-bank-4.asm new file mode 100644 index 000000000..f5f8d94ab --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.asm @@ -0,0 +1,111 @@ +// Test a procedure with calling convention stack +// Returning and passing struct values +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code +__start: { + // char idx = 0 + lda #0 + sta.z idx + jsr main + rts +} +.segment stage +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + inc.z idx + // SCREEN[idx++] = p.y + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + inc.z idx + // } + rts +} +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + txa + lsr + // struct Point p = { i, i/2 } + stx.z p + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // } + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + rts +} +main: { + .label p = 2 + .label i = 5 + lda #0 + sta.z i + __b1: + // for(char i=0;i<5;i++) + lda.z i + cmp #5 + bcc __b2 + // } + rts + __b2: + // struct Point p = get(i) + lda.z i + pha + pha + jsr get + pla + sta.z p + pla + sta.z p+1 + // print(p) + pha + lda.z p + pha + jsr print + pla + pla + // for(char i=0;i<5;i++) + inc.z i + jmp __b1 +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.cfg b/src/test/ref/procedure-callingconvention-stack-bank-4.cfg new file mode 100644 index 000000000..df3d4fa35 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.cfg @@ -0,0 +1,62 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.log b/src/test/ref/procedure-callingconvention-stack-bank-4.log new file mode 100644 index 000000000..4d3cfc93f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.log @@ -0,0 +1,710 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Converting variable modified inside __stackcall procedure main() to load/store idx +Adding parameter assignment in __stackcall procedure get::i = param(get::i) +Adding parameter assignment in __stackcall procedure print::p = param(print::p) +Inlined call call __init +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) +Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) +Calling convention __stackcall adding prepare/execute/finalize for call main +Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) +Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) +Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return +Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) +Calling convention STACK_CALL adding stack push stackpush(char) = main::i +Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p +Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} +Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@2 + main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) + main::$0 = main::i#2 < 5 + if(main::$0) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#3 = phi( main::@1/main::i#2 ) + stackpush(char) = main::i#3 + sideeffect stackpushpadding(1) + callexecute get + main::p = stackpull(struct Point) + stackpush(struct Point) = main::p + callexecute print + sideeffect stackpullpadding(2) + main::i#1 = ++ main::i#3 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +__stackcall struct Point get(char i) +get: scope:[get] from + get::i#0 = stackidx(char,get::OFFSET_STACK_I) + get::$0 = get::i#0 / 2 + *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 + *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + return + to:@return + +__stackcall void print(struct Point p) +print: scope:[print] from + print::p = stackidx(struct Point,print::OFFSET_STACK_P) + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) + idx = ++ idx + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char OFFSET_STRUCT_POINT_X = 0 +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *)$400 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__stackcall struct Point get(char i) +number get::$0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 +__loadstore struct Point get::p +__loadstore struct Point get::return +__loadstore char idx +__stackcall void main() +bool main::$0 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +__loadstore struct Point main::p +__stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p + +Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 +Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 +Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in get::$0 = get::i#0 / 2 +Alias main::i#2 = main::i#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 +Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_STRUCT_POINT_X +Successful SSA optimization PassNEliminateUnusedVars +Rewriting division to use shift [12] get::$0 = get::i#0 / 2 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::i#0 +Constant inlined main::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to get:24 print:27 + +Created 1 initial phi equivalence classes +Coalesced [30] main::i#4 = main::i#1 +Coalesced down to 1 phi equivalence classes +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 + +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get + +VARIABLE REGISTER WEIGHTS +void __start() +__stackcall struct Point get(char i) +char get::$0 // 1001.0 +char get::i +char get::i#0 // 1501.5 +__loadstore struct Point get::p +__loadstore struct Point get::return // 47.666666666666664 +__loadstore char idx // 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // 202.0 +char main::i#2 // 44.888888888888886 +__loadstore struct Point main::p // 202.0 +__stackcall void print(struct Point p) +__loadstore struct Point print::p // 333.6666666666667 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Added variable idx to live range equivalence class [ idx ] +Added variable print::p to live range equivalence class [ print::p ] +Added variable get::i#0 to live range equivalence class [ get::i#0 ] +Added variable get::$0 to live range equivalence class [ get::$0 ] +Added variable main::p to live range equivalence class [ main::p ] +Added variable get::return to live range equivalence class [ get::return ] +Added variable get::p to live range equivalence class [ get::p ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ idx ] +[ print::p ] +[ get::i#0 ] +[ get::$0 ] +[ main::p ] +[ get::return ] +[ get::p ] +Allocated zp[1]:2 [ get::i#0 ] +Allocated zp[1]:3 [ get::$0 ] +Allocated zp[2]:4 [ print::p ] +Allocated zp[1]:6 [ idx ] +Allocated zp[1]:7 [ main::i#2 main::i#1 ] +Allocated zp[2]:8 [ main::p ] +Allocated zp[2]:10 [ get::return ] +Allocated zp[2]:12 [ get::p ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , +Potential registers zp[1]:6 [ idx ] : zp[1]:6 , +Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , +Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , +Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , +Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , + +REGISTER UPLIFT SCOPES +Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] +Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] +Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] +Uplift Scope [] 316.21: zp[1]:6 [ idx ] +Uplift Scope [Point] +Uplift Scope [__start] + +Uplifting [get] best 993 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] +Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] +Uplifting [print] best 993 combination zp[2]:4 [ print::p ] +Uplifting [] best 993 combination zp[1]:6 [ idx ] +Uplifting [Point] best 993 combination +Uplifting [__start] best 993 combination +Attempting to uplift remaining variables inzp[1]:6 [ idx ] +Uplifting [] best 993 combination zp[1]:6 [ idx ] +Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] +Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] +Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] +Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] +Allocated (was zp[1]:6) zp[1]:4 [ idx ] +Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] +Allocated (was zp[2]:10) zp[2]:6 [ get::return ] +Allocated (was zp[2]:12) zp[2]:8 [ get::p ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} +.segment stage + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + jmp __breturn + // print::@return + __breturn: + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + jmp __breturn + // get::@return + __breturn: + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // main::@1 + __b1: + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [21] return + rts + // main::@2 + __b2: + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get -- call_vprc1 + jsr get + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + lda.z p+1 + pha + lda.z p + pha + // [27] callexecute print -- call_vprc1 + jsr print + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z p+1 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1_from___init1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] + + +FINAL ASSEMBLER +Score: 861 + + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char idx = 0 + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} +.segment stage + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // SCREEN[idx++] = p.y + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // print::@return + // } + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // struct Point p = { i, i/2 } + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // get::@return + // } + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // main::@1 + __b1: + // for(char i=0;i<5;i++) + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + // main::@return + // } + // [21] return + rts + // main::@2 + __b2: + // struct Point p = get(i) + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get -- call_vprc1 + jsr get + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // print(p) + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + pha + lda.z p + pha + // [27] callexecute print -- call_vprc1 + jsr print + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // for(char i=0;i<5;i++) + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.sym b/src/test/ref/procedure-callingconvention-stack-bank-4.sym new file mode 100644 index 000000000..0c4dcbeba --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.sym @@ -0,0 +1,30 @@ +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.asm b/src/test/ref/procedure-callingconvention-stack-bank-5.asm new file mode 100644 index 000000000..7a7f95bc0 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.asm @@ -0,0 +1,50 @@ +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + cmp #0 + beq __b1 + // n-1 + sec + sbc #1 + // char c = pow2(n-1) + pha + jsr pow2 + pla + // return c+c; + asl + jmp __breturn + __b1: + lda #1 + __breturn: + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + rts +} +main: { + // pow2(6) + lda #6 + pha + jsr pow2 + pla + // *SCREEN = pow2(6) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.cfg b/src/test/ref/procedure-callingconvention-stack-bank-5.cfg new file mode 100644 index 000000000..17c2baaed --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.cfg @@ -0,0 +1,29 @@ + +__stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.log b/src/test/ref/procedure-callingconvention-stack-bank-5.log new file mode 100644 index 000000000..e3d77a25a --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.log @@ -0,0 +1,408 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Warning! Unknown #pragma platform +Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) +Eliminating unused variable with no statement pow2::$2 +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) +Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) +Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) +Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = 6 +Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = 6 + callexecute pow2 + main::$0 = stackpull(char) + *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__stackcall char pow2(char n) +pow2: scope:[pow2] from + pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + pow2::$0 = pow2::n#0 == 0 + if(pow2::$0) goto pow2::@1 + to:pow2::@2 +pow2::@1: scope:[pow2] from pow2 + pow2::return#0 = 1 + to:pow2::@return +pow2::@2: scope:[pow2] from pow2 + pow2::n#1 = phi( pow2/pow2::n#0 ) + pow2::$1 = pow2::n#1 - 1 + stackpush(char) = pow2::$1 + callexecute pow2 + pow2::c#0 = stackpull(char) + pow2::$3 = pow2::c#0 + pow2::c#0 + pow2::return#1 = pow2::$3 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 + pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) + stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__stackcall char pow2(char n) +bool pow2::$0 +number pow2::$1 +char pow2::$3 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 +char pow2::n +char pow2::n#0 +char pow2::n#1 +char pow2::return +char pow2::return#0 +char pow2::return#1 +char pow2::return#2 + +Adding number conversion cast (unumber) 6 in stackpush(char) = 6 +Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 +Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 +Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 +Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)6 +Inlining cast pow2::return#0 = (unumber)1 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 6 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 +Alias pow2::n#0 = pow2::n#1 +Alias pow2::return#1 = pow2::$3 +Successful SSA optimization Pass2AliasElimination +Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantIdentification +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Inlining constant with var siblings pow2::return#0 +Constant inlined pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of pow2::@1 +CALL GRAPH +Calls in [pow2] to pow2:4 +Calls in [main] to pow2:13 + +Created 1 initial phi equivalence classes +Coalesced [7] pow2::return#3 = pow2::return#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label pow2::@1 +Renumbering block pow2::@2 to pow2::@1 + +FINAL CONTROL FLOW GRAPH + +__stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__stackcall char pow2(char n) +char pow2::$1 // 22.0 +char pow2::c +char pow2::c#0 // 33.0 +char pow2::n +char pow2::n#0 // 16.5 +char pow2::return +char pow2::return#1 // 22.0 +char pow2::return#2 // 22.0 + +Initial phi equivalence classes +[ pow2::return#2 pow2::return#1 ] +Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] +Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] +Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ pow2::return#2 pow2::return#1 ] +[ pow2::n#0 ] +[ pow2::$1 ] +[ pow2::c#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] +Allocated zp[1]:3 [ pow2::c#0 ] +Allocated zp[1]:4 [ pow2::$1 ] +Allocated zp[1]:5 [ pow2::n#0 ] +Allocated zp[1]:6 [ main::$0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x +Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a +Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a +Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x +Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] +Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] +Uplift Scope [] + +Uplifting [pow2] best 87 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [main] best 81 combination reg byte a [ main::$0 ] +Uplifting [] best 81 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __breturn_from_pow2 + jmp __b1 + // pow2::@1 + __b1: + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 -- call_vprc1 + jsr pow2 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + __breturn_from___b1: + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __breturn_from_pow2: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + jmp __breturn + // pow2::@return + __breturn: + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 -- call_vprc1 + jsr pow2 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [14] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Removing instruction __breturn_from___b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Relabelling long label __breturn_from_pow2 to __b1 +Succesful ASM optimization Pass5RelabelLongLabels + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 72 + + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __b1 + // pow2::@1 + // n-1 + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // char c = pow2(n-1) + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 -- call_vprc1 + jsr pow2 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // return c+c; + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __b1: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + // pow2::@return + __breturn: + // } + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // pow2(6) + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 -- call_vprc1 + jsr pow2 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // *SCREEN = pow2(6) + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [14] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.sym b/src/test/ref/procedure-callingconvention-stack-bank-5.sym new file mode 100644 index 000000000..b914904e4 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.sym @@ -0,0 +1,21 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] From b13262beb87faa5651b3c17af1ca783b78485a4b Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 20:11:09 +0200 Subject: [PATCH 18/50] - Added test cases. - Merged remaining code change that is not in master remote. --- src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 805daac86..e3eac7744 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -137,7 +137,7 @@ public class Procedure extends Scope { } public void setCodeSegment(String codeSegment) { - this.codeSegment = codeSegment; + this.segmentCode = segmentCode; } public List getParameterNames() { From bdc4e28d0a9d8f063504b0b9e76f29738292a619 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 23:31:56 +0200 Subject: [PATCH 19/50] - Fixed test cases going in error. - Optimized test cases and documented them properly. - Remove obscolete ref data. --- .../procedure-callingconvention-phi-bank-0.c | 2 +- .../procedure-callingconvention-phi-bank-1.c | 2 +- .../procedure-callingconvention-phi-bank-2.c | 4 +- .../procedure-callingconvention-phi-bank-3.c | 7 +- .../procedure-callingconvention-phi-bank-4.c | 4 +- ...procedure-callingconvention-stack-bank-3.c | 13 +- ...procedure-callingconvention-phi-bank-0.asm | 2 +- ...procedure-callingconvention-phi-bank-0.log | 4 +- ...procedure-callingconvention-phi-bank-1.asm | 2 +- ...procedure-callingconvention-phi-bank-1.log | 4 +- ...procedure-callingconvention-phi-bank-2.asm | 8 +- ...procedure-callingconvention-phi-bank-2.log | 47 +- ...procedure-callingconvention-phi-bank-3.asm | 8 +- ...procedure-callingconvention-phi-bank-3.log | 47 +- ...procedure-callingconvention-phi-bank-4.asm | 5 +- ...procedure-callingconvention-phi-bank-4.cfg | 2 +- ...procedure-callingconvention-phi-bank-4.log | 24 +- ...procedure-callingconvention-phi-bank-4.sym | 2 +- .../procedure-callingconvention-phi-far-0.asm | 27 - .../procedure-callingconvention-phi-far-0.cfg | 20 - .../procedure-callingconvention-phi-far-0.log | 292 ---- .../procedure-callingconvention-phi-far-0.sym | 10 - ...ocedure-callingconvention-stack-bank-3.asm | 5 +- ...ocedure-callingconvention-stack-bank-3.log | 10 +- ...rocedure-callingconvention-stack-far-0.asm | 45 - ...rocedure-callingconvention-stack-far-0.cfg | 24 - ...rocedure-callingconvention-stack-far-0.log | 469 ----- ...rocedure-callingconvention-stack-far-0.sym | 19 - ...rocedure-callingconvention-stack-far-1.asm | 45 - ...rocedure-callingconvention-stack-far-1.cfg | 24 - ...rocedure-callingconvention-stack-far-1.log | 469 ----- ...rocedure-callingconvention-stack-far-1.sym | 19 - ...rocedure-callingconvention-stack-far-2.asm | 72 - ...rocedure-callingconvention-stack-far-2.cfg | 48 - ...rocedure-callingconvention-stack-far-2.log | 851 --------- ...rocedure-callingconvention-stack-far-2.sym | 32 - ...rocedure-callingconvention-stack-far-3.asm | 68 - ...rocedure-callingconvention-stack-far-3.cfg | 39 - ...rocedure-callingconvention-stack-far-3.log | 1527 ----------------- ...rocedure-callingconvention-stack-far-3.sym | 25 - ...rocedure-callingconvention-stack-far-4.asm | 76 - ...rocedure-callingconvention-stack-far-4.cfg | 79 - ...rocedure-callingconvention-stack-far-4.log | 924 ---------- ...rocedure-callingconvention-stack-far-4.sym | 19 - ...rocedure-callingconvention-stack-far-5.asm | 110 -- ...rocedure-callingconvention-stack-far-5.cfg | 62 - ...rocedure-callingconvention-stack-far-5.log | 845 --------- ...rocedure-callingconvention-stack-far-5.sym | 30 - ...rocedure-callingconvention-stack-far-6.asm | 51 - ...rocedure-callingconvention-stack-far-6.cfg | 29 - ...rocedure-callingconvention-stack-far-6.log | 1060 ------------ ...rocedure-callingconvention-stack-far-6.sym | 21 - 52 files changed, 107 insertions(+), 7526 deletions(-) delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.cfg delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.log delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.sym diff --git a/src/test/kc/procedure-callingconvention-phi-bank-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c index 2ab91f28b..bee484e0f 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-0.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-0.c @@ -1,4 +1,4 @@ -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") diff --git a/src/test/kc/procedure-callingconvention-phi-bank-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c index f534c13e7..bb4b31031 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-1.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-1.c @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") diff --git a/src/test/kc/procedure-callingconvention-phi-bank-2.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c index 790978c7d..5f2053c4b 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-2.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-2.c @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") @@ -11,7 +11,7 @@ void main(void) { } #pragma code_seg(stage) -#pragma bank(rubbish, 1) +#pragma bank(rom, 1) // test rom bank char plus(char a, char b) { return a+b; diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c index fc48b2e5e..0dc59a663 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-3.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-3.c @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") @@ -11,8 +11,11 @@ void main(void) { } #pragma code_seg(stage) -#pragma bank(stage, 2) +#pragma bank(rom, 2) // Test rom fragment char plus(char a, char b) { return a+b; } + +#pragma nobank(dummy) + diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c index b6e49a3a1..7075f3b6c 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -7,13 +7,13 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(stage) -#pragma bank(stage, 20) +#pragma bank(ram, 20) char plus(char a, char b) { return a+b; } -#pragma nobank +#pragma nobank(dummy) void main(void) { SCREEN[0] = plus('0', 7); diff --git a/src/test/kc/procedure-callingconvention-stack-bank-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c index 129824bb7..97313f42e 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-3.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-3.c @@ -19,28 +19,33 @@ void main(void) { } } -#pragma code_seg(test) -#pragma code_seg(test2) -#pragma code_seg(test3) -#pragma code_seg(Code) +#pragma code_seg(stage) void __bank(ram, 20) pval() { printval(); } +#pragma code_seg(platform) + void __bank(ram, 21) ival() { incval(); } +#pragma code_seg(stage) + void __bank(ram, 20) printval() { SCREEN[0] = val; } + +#pragma code_seg(platform) + void __bank(ram, 21) incval() { val++; } #pragma nobank +#pragma code_seg(Code) void printother() { for(char i:0..5) { diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.asm b/src/test/ref/procedure-callingconvention-phi-bank-0.asm index 2bb668af6..4a72f9f2b 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.asm @@ -1,4 +1,4 @@ -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.log b/src/test/ref/procedure-callingconvention-phi-bank-0.log index 58a2a2fd0..a8f414328 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.log @@ -157,7 +157,7 @@ Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -231,7 +231,7 @@ FINAL ASSEMBLER Score: 24 // File Comments -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.asm b/src/test/ref/procedure-callingconvention-phi-bank-1.asm index ea53aa852..2a8a6ff0a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.asm @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.log b/src/test/ref/procedure-callingconvention-phi-bank-1.log index 5484d90f9..f7e169609 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.log @@ -157,7 +157,7 @@ Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -234,7 +234,7 @@ FINAL ASSEMBLER Score: 24 // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.asm b/src/test/ref/procedure-callingconvention-phi-bank-2.asm index 1e4b59461..25216b2f4 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.asm @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] @@ -12,13 +12,17 @@ .segment stage main: { // plus('0', 7) - .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 1 // SCREEN[0] = plus('0', 7) lda #plus.return sta SCREEN // } rts } +// test rom bank // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.log b/src/test/ref/procedure-callingconvention-phi-bank-2.log index 9b0d446f2..adb898ed6 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.log @@ -143,14 +143,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: REGISTER UPLIFT POTENTIAL REGISTERS -Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare allocation: -MISSING FRAGMENTS - Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -158,25 +151,13 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: -Uplifting [main] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: -Uplifting [plus] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: -Uplifting [] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -193,9 +174,12 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize plus_from_main: - .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 1 jmp __b1 // main::@1 __b1: @@ -209,6 +193,7 @@ main: { rts } // plus +// test rom bank // char plus(char a, char b) plus: { .const a = '0' @@ -247,10 +232,10 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 18 +Score: 24 // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -268,8 +253,11 @@ Score: 18 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] - .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + jsr $ff6e + .byte plus + .byte 1 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -281,6 +269,7 @@ main: { rts } // plus +// test rom bank // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.asm b/src/test/ref/procedure-callingconvention-phi-bank-3.asm index 14b4c8f88..ee036ece3 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.asm @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] @@ -12,13 +12,17 @@ .segment stage main: { // plus('0', 7) - .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 2 // SCREEN[0] = plus('0', 7) lda #plus.return sta SCREEN // } rts } +// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.log b/src/test/ref/procedure-callingconvention-phi-bank-3.log index edbe990fa..f970e5bd6 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.log @@ -143,14 +143,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: REGISTER UPLIFT POTENTIAL REGISTERS -Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare allocation: -MISSING FRAGMENTS - Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -158,25 +151,13 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: -Uplifting [main] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: -Uplifting [plus] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: -Uplifting [] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -193,9 +174,12 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize plus_from_main: - .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 2 jmp __b1 // main::@1 __b1: @@ -209,6 +193,7 @@ main: { rts } // plus +// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' @@ -247,10 +232,10 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 18 +Score: 24 // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -268,8 +253,11 @@ Score: 18 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] - .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + jsr $ff6e + .byte plus + .byte 2 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -281,6 +269,7 @@ main: { rts } // plus +// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.asm b/src/test/ref/procedure-callingconvention-phi-bank-4.asm index e67cb058e..e9d93e257 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.asm @@ -12,7 +12,10 @@ .segment stage main: { // plus('0', 7) - jsr plus + jsr $ff6e + .byte plus + .byte $14 // SCREEN[0] = plus('0', 7) lda #plus.return sta SCREEN diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg index 2cc5e64ff..ce60f7fc8 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg @@ -1,5 +1,5 @@ -__bank(bank) void main() +void main() main: scope:[main] from [0] phi() [1] call plus diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.log b/src/test/ref/procedure-callingconvention-phi-bank-4.log index 80ecb72df..f7da854a2 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.log @@ -15,7 +15,7 @@ plus::@return: scope:[plus] from plus return to:@return -__bank(bank) void main() +void main() main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 @@ -44,7 +44,7 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() -__bank(bank) void main() +void main() char main::$0 __bank(bank) char plus(char a , char b) char plus::$0 @@ -113,7 +113,7 @@ Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH -__bank(bank) void main() +void main() main: scope:[main] from [0] phi() [1] call plus @@ -135,7 +135,7 @@ plus::@return: scope:[plus] from plus VARIABLE REGISTER WEIGHTS -__bank(bank) void main() +void main() __bank(bank) char plus(char a , char b) char plus::a char plus::b @@ -174,9 +174,12 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize plus_from_main: - jsr plus + jsr $ff6e + .byte plus + .byte $14 jmp __b1 // main::@1 __b1: @@ -216,7 +219,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 -__bank(bank) void main() +void main() __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a @@ -249,8 +252,11 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] - jsr plus + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte plus + .byte $14 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.sym b/src/test/ref/procedure-callingconvention-phi-bank-4.sym index 303e3a74d..b274ece82 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.sym +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.sym @@ -1,5 +1,5 @@ __constant char * const SCREEN = (char *) 1024 -__bank(bank) void main() +void main() __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.asm b/src/test/ref/procedure-callingconvention-phi-far-0.asm deleted file mode 100644 index e29b814ba..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.asm +++ /dev/null @@ -1,27 +0,0 @@ -// Test a procedure with calling convention stack - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-phi-far-0.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) - .label SCREEN = $400 -.segment Code -main: { - // plus('0', 7) - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.cfg b/src/test/ref/procedure-callingconvention-phi-far-0.cfg deleted file mode 100644 index 5d2b8863d..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.cfg +++ /dev/null @@ -1,20 +0,0 @@ - -void main() -main: scope:[main] from - [0] phi() - [1] call plus - to:main::@1 -main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 - to:main::@return -main::@return: scope:[main] from main::@1 - [3] return - to:@return - -__far(bank) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - to:plus::@return -plus::@return: scope:[plus] from plus - [5] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.log b/src/test/ref/procedure-callingconvention-phi-far-0.log deleted file mode 100644 index 6d817cb05..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.log +++ /dev/null @@ -1,292 +0,0 @@ -Far call main::$0 = call plus('0', 7) - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#0 = plus::return#2 - to:main::@1 -main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -void main() -char main::$0 -__far(bank) char plus(char a , char b) -char plus::$0 -char plus::a -char plus::a#0 -char plus::a#1 -char plus::b -char plus::b#0 -char plus::b#1 -char plus::return -char plus::return#0 -char plus::return#1 -char plus::return#2 -char plus::return#3 -char plus::return#4 - -Adding number conversion cast (unumber) 7 in plus::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast plus::b#0 = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant plus::a#0 = '0' -Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of main -Adding NOP phi() at start of plus -CALL GRAPH -Calls in [main] to plus:1 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Adding NOP phi() at start of main -Adding NOP phi() at start of plus - -FINAL CONTROL FLOW GRAPH - -void main() -main: scope:[main] from - [0] phi() - [1] call plus - to:main::@1 -main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 - to:main::@return -main::@return: scope:[main] from main::@1 - [3] return - to:@return - -__far(bank) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - to:plus::@return -plus::@return: scope:[plus] from plus - [5] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -__far(bank) char plus(char a , char b) -char plus::a -char plus::b -char plus::return - -Initial phi equivalence classes -Complete equivalence classes -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -REGISTER UPLIFT POTENTIAL REGISTERS -Potential register analysis [1] call plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a - -REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [] - -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -Uplifting [main] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -Uplifting [plus] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -Uplifting [] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-phi-far-0.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) - // Global Constants & labels - .label SCREEN = $400 -.segment Code - // main -main: { - // [1] call plus - // [4] phi from main to plus [phi:main->plus] - plus_from_main: - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - jmp __b1 - // main::@1 - __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - jmp __breturn - // plus::@return - __breturn: - // [5] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction plus_from_main: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void main() -__far(bank) char plus(char a , char b) -char plus::a -__constant char plus::a#0 = '0' // a -char plus::b -__constant char plus::b#0 = 7 // b -char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return - - - -FINAL ASSEMBLER -Score: 18 - - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-phi-far-0.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) - // Global Constants & labels - .label SCREEN = $400 -.segment Code - // main -main: { - // plus('0', 7) - // [1] call plus - // [4] phi from main to plus [phi:main->plus] - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // main::@1 - // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - // main::@return - // } - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - // plus::@return - // [5] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.sym b/src/test/ref/procedure-callingconvention-phi-far-0.sym deleted file mode 100644 index 5e731dc09..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.sym +++ /dev/null @@ -1,10 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -void main() -__far(bank) char plus(char a , char b) -char plus::a -__constant char plus::a#0 = '0' // a -char plus::b -__constant char plus::b#0 = 7 // b -char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.asm b/src/test/ref/procedure-callingconvention-stack-bank-3.asm index 57944cb6c..b16c0e558 100644 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.asm +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.asm @@ -30,12 +30,14 @@ printother: { // } rts } +.segment platform incval: { // val++; inc.z val // } rts } +.segment stage printval: { // SCREEN[0] = val lda.z val @@ -43,19 +45,20 @@ printval: { // } rts } +.segment platform ival: { // incval() jsr incval // } rts } +.segment stage pval: { // printval() jsr printval // } rts } -.segment stage main: { ldy #0 __b1: diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.log b/src/test/ref/procedure-callingconvention-stack-bank-3.log index 6c840b6f9..3037f5b3b 100644 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.log +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.log @@ -381,6 +381,7 @@ printother: { // [10] return rts } +.segment platform // incval incval: { // [11] val = ++ val -- vbuz1=_inc_vbuz1 @@ -391,6 +392,7 @@ incval: { // [12] return rts } +.segment stage // printval printval: { // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 @@ -402,6 +404,7 @@ printval: { // [14] return rts } +.segment platform // ival ival: { // [16] callexecute incval -- call_vprc1 @@ -412,6 +415,7 @@ ival: { // [17] return rts } +.segment stage // pval pval: { // [19] callexecute printval -- call_vprc1 @@ -422,7 +426,6 @@ pval: { // [20] return rts } -.segment stage // main main: { // [22] phi from main to main::@1 [phi:main->main::@1] @@ -569,6 +572,7 @@ printother: { // [10] return rts } +.segment platform // incval incval: { // val++; @@ -579,6 +583,7 @@ incval: { // [12] return rts } +.segment stage // printval printval: { // SCREEN[0] = val @@ -590,6 +595,7 @@ printval: { // [14] return rts } +.segment platform // ival ival: { // incval() @@ -600,6 +606,7 @@ ival: { // [17] return rts } +.segment stage // pval pval: { // printval() @@ -610,7 +617,6 @@ pval: { // [20] return rts } -.segment stage // main main: { // [22] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.asm b/src/test/ref/procedure-callingconvention-stack-far-0.asm deleted file mode 100644 index cae85630e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-0.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) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.cfg b/src/test/ref/procedure-callingconvention-stack-far-0.cfg deleted file mode 100644 index 620247dbd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.log b/src/test/ref/procedure-callingconvention-stack-far-0.log deleted file mode 100644 index 3187874dc..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.log +++ /dev/null @@ -1,469 +0,0 @@ -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Far call main::$0 = call plus('0', 7) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__far(bank) __stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__far(bank) __stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [main] best 67 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [] best 67 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-0.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 61 - - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-0.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.sym b/src/test/ref/procedure-callingconvention-stack-far-0.sym deleted file mode 100644 index 058bfd4d2..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.asm b/src/test/ref/procedure-callingconvention-stack-far-1.asm deleted file mode 100644 index 4d95b1c93..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-1.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) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.cfg b/src/test/ref/procedure-callingconvention-stack-far-1.cfg deleted file mode 100644 index 620247dbd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.log b/src/test/ref/procedure-callingconvention-stack-far-1.log deleted file mode 100644 index c579e2fab..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.log +++ /dev/null @@ -1,469 +0,0 @@ -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Far call main::$0 = call plus('0', 7) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__far(bank) __stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__far(bank) __stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [main] best 67 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [] best 67 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-1.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 61 - - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-1.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.sym b/src/test/ref/procedure-callingconvention-stack-far-1.sym deleted file mode 100644 index 058bfd4d2..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.asm b/src/test/ref/procedure-callingconvention-stack-far-2.asm deleted file mode 100644 index 8f742ce8a..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.asm +++ /dev/null @@ -1,72 +0,0 @@ -// Test a procedure with calling convention stack -// A slightly more complex call - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-2.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(__start) - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code -__start: { - // char i = 0 - lda #0 - sta.z i - jsr main - rts -} -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - inc.z i - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - .label a = 3 - lda #0 - sta.z a - __b1: - // char v = a+1 - ldx.z a - inx - // char w = plus('0', v) - lda #'0' - pha - txa - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // w+a - clc - adc.z a - // SCREEN[i] = w+a - ldy.z i - sta SCREEN,y - // for(char a:0..1) - inc.z a - lda #2 - cmp.z a - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.cfg b/src/test/ref/procedure-callingconvention-stack-far-2.cfg deleted file mode 100644 index 0bd994142..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.cfg +++ /dev/null @@ -1,48 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.log b/src/test/ref/procedure-callingconvention-stack-far-2.log deleted file mode 100644 index 1153c5e07..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.log +++ /dev/null @@ -1,851 +0,0 @@ -Converting variable modified inside __stackcall procedure plus() to load/store i -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Inlined call call __init -Far call main::w = call plus('0', main::v) -Eliminating unused variable with no statement main::$0 -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::w = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = main::v - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start::@1 - main::a#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) - main::v#0 = main::a#2 + 1 - stackpush(char) = '0' - stackpush(char) = main::v#0 - callexecute plus - sideeffect stackpullpadding(1) - main::w#0 = stackpull(char) - main::$2 = main::w#0 + main::a#2 - SCREEN[i] = main::$2 - main::a#1 = main::a#2 + rangenext(0,1) - main::$3 = main::a#1 != rangelast(0,1) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - i = ++ i - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - call main - to:__start::@2 -__start::@2: scope:[__start] from __start::@1 - to:__start::@return -__start::@return: scope:[__start] from __start::@2 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i -void main() -char main::$2 -bool main::$3 -char main::a -char main::a#0 -char main::a#1 -char main::a#2 -char main::v -char main::v#0 -char main::w -char main::w#0 -__far(bank) __stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::a#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ -Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 -Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::a#0 -Constant inlined main::a#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of __start::@2 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to plus:17 - -Created 1 initial phi equivalence classes -Coalesced [25] main::a#3 = main::a#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label __start::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus - -VARIABLE REGISTER WEIGHTS -void __start() -__loadstore char i // 105.24999999999999 -void main() -char main::$2 // 202.0 -char main::a -char main::a#1 // 151.5 -char main::a#2 // 44.888888888888886 -char main::v -char main::v#0 // 101.0 -char main::w -char main::w#0 // 202.0 -__far(bank) __stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 667.3333333333334 -char plus::b -char plus::b#0 // 1001.0 -char plus::return -char plus::return#0 // 2002.0 - -Initial phi equivalence classes -[ main::a#2 main::a#1 ] -Added variable i to live range equivalence class [ i ] -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::v#0 to live range equivalence class [ main::v#0 ] -Added variable main::w#0 to live range equivalence class [ main::w#0 ] -Added variable main::$2 to live range equivalence class [ main::$2 ] -Complete equivalence classes -[ main::a#2 main::a#1 ] -[ i ] -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::v#0 ] -[ main::w#0 ] -[ main::$2 ] -Allocated zp[1]:2 [ plus::return#0 ] -Allocated zp[1]:3 [ plus::b#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::w#0 ] -Allocated zp[1]:6 [ main::$2 ] -Allocated zp[1]:7 [ main::a#2 main::a#1 ] -Allocated zp[1]:8 [ i ] -Allocated zp[1]:9 [ main::v#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , -Potential registers zp[1]:8 [ i ] : zp[1]:8 , -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] -Uplift Scope [] 105.25: zp[1]:8 [ i ] -Uplift Scope [__start] - -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [plus] best 885 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [main] best 725 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [] best 725 combination zp[1]:8 [ i ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [__start] best 725 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [plus] best 725 combination zp[1]:4 [ plus::a#0 ] -Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [main] best 725 combination zp[1]:7 [ main::a#2 main::a#1 ] -Attempting to uplift remaining variables inzp[1]:8 [ i ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [] best 725 combination zp[1]:8 [ i ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] -Allocated (was zp[1]:8) zp[1]:4 [ i ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-2.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(__start) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - jmp __b1 - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [23] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction main_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] - - -FINAL ASSEMBLER -Score: 596 - - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-2.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(__start) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char i = 0 - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [4] return - rts -} - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // return a+b; - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // char v = a+1 - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // char w = plus('0', v) - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // w+a - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // SCREEN[i] = w+a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // for(char a:0..1) - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1 - // main::@return - // } - // [23] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.sym b/src/test/ref/procedure-callingconvention-stack-far-2.sym deleted file mode 100644 index d5bda0530..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.sym +++ /dev/null @@ -1,32 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.asm b/src/test/ref/procedure-callingconvention-stack-far-3.asm deleted file mode 100644 index 3db9a00f2..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.asm +++ /dev/null @@ -1,68 +0,0 @@ -// Test a procedure with calling convention stack -// Recursive fibonacci - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.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) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char fib(__zp(2) char n) -fib: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label __4 = 3 - .label n = 2 - // return n; - tsx - lda STACK_BASE+OFFSET_STACK_N,x - sta.z n - // if (n == 0 || n == 1) - beq __b1 - lda #1 - cmp.z n - beq __b1 - // n-1 - lda.z n - sec - sbc #1 - // fib(n-1) - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - sta.z __4 - // n-2 - lda.z n - sec - sbc #2 - // fib(n-2) - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // return (fib(n-1) + fib(n-2)); - clc - adc.z __4 - __breturn: - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - rts - __b1: - lda.z n - jmp __breturn -} -main: { - // fib(5) - lda #5 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // *SCREEN = fib(5) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.cfg b/src/test/ref/procedure-callingconvention-stack-far-3.cfg deleted file mode 100644 index 0fda6c96f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.cfg +++ /dev/null @@ -1,39 +0,0 @@ - -__far(bank) __stackcall char fib(char n) -fib: scope:[fib] from - [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) - [1] if(fib::n#0==0) goto fib::@1 - to:fib::@3 -fib::@3: scope:[fib] from fib - [2] if(fib::n#0==1) goto fib::@1 - to:fib::@2 -fib::@2: scope:[fib] from fib::@3 - [3] fib::$3 = fib::n#0 - 1 - [4] stackpush(char) = fib::$3 - [5] callexecute fib - [6] fib::$4 = stackpull(char) - [7] fib::$5 = fib::n#0 - 2 - [8] stackpush(char) = fib::$5 - [9] callexecute fib - [10] fib::$6 = stackpull(char) - [11] fib::return#1 = fib::$4 + fib::$6 - to:fib::@return -fib::@return: scope:[fib] from fib::@1 fib::@2 - [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) - [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 - [14] return - to:@return -fib::@1: scope:[fib] from fib fib::@3 - [15] fib::return#3 = fib::n#0 - to:fib::@return - -void main() -main: scope:[main] from - [16] stackpush(char) = 5 - [17] callexecute fib - [18] main::$0 = stackpull(char) - [19] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [20] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.log b/src/test/ref/procedure-callingconvention-stack-far-3.log deleted file mode 100644 index c23c61551..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.log +++ /dev/null @@ -1,1527 +0,0 @@ -Adding parameter assignment in __stackcall procedure fib::n = param(fib::n) -Far call main::$0 = call fib(5) -Far call fib::$4 = call fib(fib::$3) -Far call fib::$6 = call fib(fib::$5) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call fib(5) -Calling convention __stackcall adding prepare/execute/finalize for fib::$4 = call fib(fib::$3) -Calling convention __stackcall adding prepare/execute/finalize for fib::$6 = call fib(fib::$5) -Calling convention STACK_CALL replacing param(fib::n) with stackidx(char,fib::OFFSET_STACK_N) -Calling convention STACK_CALL adding stack return stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack pull fib::$4 = stackpull(char) -Calling convention STACK_CALL adding stack pull fib::$6 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = 5 -Calling convention STACK_CALL adding stack push stackpush(char) = fib::$3 -Calling convention STACK_CALL adding stack push stackpush(char) = fib::$5 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = 5 - callexecute fib - main::$0 = stackpull(char) - *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char fib(char n) -fib: scope:[fib] from - fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) - fib::$0 = fib::n#0 == 0 - fib::$1 = fib::n#0 == 1 - fib::$2 = fib::$0 || fib::$1 - if(fib::$2) goto fib::@1 - to:fib::@2 -fib::@1: scope:[fib] from fib - fib::n#1 = phi( fib/fib::n#0 ) - fib::return#0 = fib::n#1 - to:fib::@return -fib::@2: scope:[fib] from fib - fib::n#2 = phi( fib/fib::n#0 ) - fib::$3 = fib::n#2 - 1 - stackpush(char) = fib::$3 - callexecute fib - fib::$4 = stackpull(char) - fib::$5 = fib::n#2 - 2 - stackpush(char) = fib::$5 - callexecute fib - fib::$6 = stackpull(char) - fib::$7 = fib::$4 + fib::$6 - fib::return#1 = fib::$7 - to:fib::@return -fib::@return: scope:[fib] from fib::@1 fib::@2 - fib::return#2 = phi( fib::@1/fib::return#0, fib::@2/fib::return#1 ) - stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall char fib(char n) -bool fib::$0 -bool fib::$1 -bool fib::$2 -number fib::$3 -char fib::$4 -number fib::$5 -char fib::$6 -char fib::$7 -__constant char fib::OFFSET_STACK_N = 0 -__constant char fib::OFFSET_STACK_RETURN_0 = 0 -char fib::n -char fib::n#0 -char fib::n#1 -char fib::n#2 -char fib::return -char fib::return#0 -char fib::return#1 -char fib::return#2 -void main() -char main::$0 - -Adding number conversion cast (unumber) 5 in stackpush(char) = 5 -Adding number conversion cast (unumber) 0 in fib::$0 = fib::n#0 == 0 -Adding number conversion cast (unumber) 1 in fib::$1 = fib::n#0 == 1 -Adding number conversion cast (unumber) 1 in fib::$3 = fib::n#2 - 1 -Adding number conversion cast (unumber) fib::$3 in fib::$3 = fib::n#2 - (unumber)1 -Adding number conversion cast (unumber) 2 in fib::$5 = fib::n#2 - 2 -Adding number conversion cast (unumber) fib::$5 in fib::$5 = fib::n#2 - (unumber)2 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)5 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 5 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in fib::$3 = fib::n#2 - 1 -Inferred type updated to char in fib::$5 = fib::n#2 - 2 -Alias fib::n#0 = fib::n#1 fib::return#0 fib::n#2 -Alias fib::return#1 = fib::$7 -Successful SSA optimization Pass2AliasElimination -Rewriting || if()-condition to two if()s [8] fib::$2 = fib::$0 || fib::$1 -Successful SSA optimization Pass2ConditionalAndOrRewriting -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Simple Condition fib::$0 [8] if(fib::n#0==0) goto fib::@1 -Simple Condition fib::$1 [21] if(fib::n#0==1) goto fib::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -CALL GRAPH -Calls in [fib] to fib:5 fib:9 -Calls in [main] to fib:18 - -Created 1 initial phi equivalence classes -Coalesced [12] fib::return#4 = fib::return#1 -Not coalescing [16] fib::return#3 = fib::n#0 -Coalesced down to 2 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char fib(char n) -fib: scope:[fib] from - [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) - [1] if(fib::n#0==0) goto fib::@1 - to:fib::@3 -fib::@3: scope:[fib] from fib - [2] if(fib::n#0==1) goto fib::@1 - to:fib::@2 -fib::@2: scope:[fib] from fib::@3 - [3] fib::$3 = fib::n#0 - 1 - [4] stackpush(char) = fib::$3 - [5] callexecute fib - [6] fib::$4 = stackpull(char) - [7] fib::$5 = fib::n#0 - 2 - [8] stackpush(char) = fib::$5 - [9] callexecute fib - [10] fib::$6 = stackpull(char) - [11] fib::return#1 = fib::$4 + fib::$6 - to:fib::@return -fib::@return: scope:[fib] from fib::@1 fib::@2 - [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) - [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 - [14] return - to:@return -fib::@1: scope:[fib] from fib fib::@3 - [15] fib::return#3 = fib::n#0 - to:fib::@return - -void main() -main: scope:[main] from - [16] stackpush(char) = 5 - [17] callexecute fib - [18] main::$0 = stackpull(char) - [19] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [20] return - to:@return - - -VARIABLE REGISTER WEIGHTS -__far(bank) __stackcall char fib(char n) -char fib::$3 // 22.0 -char fib::$4 // 1.375 -char fib::$5 // 22.0 -char fib::$6 // 22.0 -char fib::n -char fib::n#0 // 5.5 -char fib::return -char fib::return#1 // 22.0 -char fib::return#2 // 33.0 -char fib::return#3 // 22.0 -void main() -char main::$0 // 4.0 - -Initial phi equivalence classes -[ fib::return#2 fib::return#3 fib::return#1 ] -Added variable fib::n#0 to live range equivalence class [ fib::n#0 ] -Added variable fib::$3 to live range equivalence class [ fib::$3 ] -Added variable fib::$4 to live range equivalence class [ fib::$4 ] -Added variable fib::$5 to live range equivalence class [ fib::$5 ] -Added variable fib::$6 to live range equivalence class [ fib::$6 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ fib::return#2 fib::return#3 fib::return#1 ] -[ fib::n#0 ] -[ fib::$3 ] -[ fib::$4 ] -[ fib::$5 ] -[ fib::$6 ] -[ main::$0 ] -Allocated zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] -Allocated zp[1]:3 [ fib::$3 ] -Allocated zp[1]:4 [ fib::$5 ] -Allocated zp[1]:5 [ fib::$6 ] -Allocated zp[1]:6 [ fib::n#0 ] -Allocated zp[1]:7 [ main::$0 ] -Allocated zp[1]:8 [ fib::$4 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:8 [ fib::$4 ] -Removing always clobbered register reg byte x as potential for zp[1]:8 [ fib::$4 ] -Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte a as potential for zp[1]:6 [ fib::n#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:6 [ fib::n#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:6 [ fib::n#0 ] -Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:8 [ fib::$4 ] -Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a -Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a -Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x -Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x -Statement [1] if(fib::n#0==0) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Statement [2] if(fib::n#0==1) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a -Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a -Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x -Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ fib::n#0 ] : zp[1]:6 , -Potential registers zp[1]:3 [ fib::$3 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ fib::$4 ] : zp[1]:8 , -Potential registers zp[1]:4 [ fib::$5 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ fib::$6 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:7 [ main::$0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [fib] 77: zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] 22: zp[1]:3 [ fib::$3 ] 22: zp[1]:4 [ fib::$5 ] 22: zp[1]:5 [ fib::$6 ] 5.5: zp[1]:6 [ fib::n#0 ] 1.38: zp[1]:8 [ fib::$4 ] -Uplift Scope [main] 4: zp[1]:7 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [fib] best 113 combination reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] reg byte a [ fib::$3 ] reg byte a [ fib::$5 ] reg byte a [ fib::$6 ] zp[1]:6 [ fib::n#0 ] zp[1]:8 [ fib::$4 ] -Limited combination testing to 100 combinations of 256 possible. -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [main] best 107 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [] best 107 combination -Attempting to uplift remaining variables inzp[1]:6 [ fib::n#0 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [fib] best 107 combination zp[1]:6 [ fib::n#0 ] -Attempting to uplift remaining variables inzp[1]:8 [ fib::$4 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [fib] best 107 combination zp[1]:8 [ fib::$4 ] -Allocated (was zp[1]:6) zp[1]:2 [ fib::n#0 ] -Allocated (was zp[1]:8) zp[1]:3 [ fib::$4 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Recursive fibonacci - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // fib -// __register(A) char fib(__zp(2) char n) -fib: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label __4 = 3 - .label n = 2 - // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - sta.z n - // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 - lda.z n - beq __b1 - jmp __b3 - // fib::@3 - __b3: - // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp.z n - beq __b1 - jmp __b2 - // fib::@2 - __b2: - // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 - lda.z n - sec - sbc #1 - // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa - pha - // [5] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ - pla - sta.z __4 - // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 - lda.z n - sec - sbc #2 - // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa - pha - // [9] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z __4 - // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] - __breturn_from___b1: - __breturn_from___b2: - // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy - jmp __breturn - // fib::@return - __breturn: - // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [14] return - rts - // fib::@1 - __b1: - // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 - lda.z n - jmp __breturn_from___b1 -} - // main -main: { - // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 - lda #5 - pha - // [17] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [20] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda.z n -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __breturn_from___b1 with __breturn -Removing instruction __breturn_from___b1: -Removing instruction __breturn_from___b2: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __b3: -Removing instruction __b2: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -__far(bank) __stackcall char fib(char n) -char fib::$3 // reg byte a 22.0 -char fib::$4 // zp[1]:3 1.375 -char fib::$5 // reg byte a 22.0 -char fib::$6 // reg byte a 22.0 -__constant char fib::OFFSET_STACK_N = 0 -__constant char fib::OFFSET_STACK_RETURN_0 = 0 -char fib::n -char fib::n#0 // n zp[1]:2 5.5 -char fib::return -char fib::return#1 // reg byte a 22.0 -char fib::return#2 // reg byte a 33.0 -char fib::return#3 // reg byte a 22.0 -void main() -char main::$0 // reg byte a 4.0 - -reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] -zp[1]:2 [ fib::n#0 ] -reg byte a [ fib::$3 ] -zp[1]:3 [ fib::$4 ] -reg byte a [ fib::$5 ] -reg byte a [ fib::$6 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 92 - - // File Comments -// Test a procedure with calling convention stack -// Recursive fibonacci - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // fib -// __register(A) char fib(__zp(2) char n) -fib: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label __4 = 3 - .label n = 2 - // return n; - // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - sta.z n - // if (n == 0 || n == 1) - // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 - beq __b1 - // fib::@3 - // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp.z n - beq __b1 - // fib::@2 - // n-1 - // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 - lda.z n - sec - sbc #1 - // fib(n-1) - // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa - pha - // [5] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ - pla - sta.z __4 - // n-2 - // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 - lda.z n - sec - sbc #2 - // fib(n-2) - // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa - pha - // [9] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // return (fib(n-1) + fib(n-2)); - // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z __4 - // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] - // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy - // fib::@return - __breturn: - // } - // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [14] return - rts - // fib::@1 - __b1: - // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 - lda.z n - jmp __breturn -} - // main -main: { - // fib(5) - // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 - lda #5 - pha - // [17] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // *SCREEN = fib(5) - // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [20] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.sym b/src/test/ref/procedure-callingconvention-stack-far-3.sym deleted file mode 100644 index 29b0c2f60..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.sym +++ /dev/null @@ -1,25 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -__far(bank) __stackcall char fib(char n) -char fib::$3 // reg byte a 22.0 -char fib::$4 // zp[1]:3 1.375 -char fib::$5 // reg byte a 22.0 -char fib::$6 // reg byte a 22.0 -__constant char fib::OFFSET_STACK_N = 0 -__constant char fib::OFFSET_STACK_RETURN_0 = 0 -char fib::n -char fib::n#0 // n zp[1]:2 5.5 -char fib::return -char fib::return#1 // reg byte a 22.0 -char fib::return#2 // reg byte a 33.0 -char fib::return#3 // reg byte a 22.0 -void main() -char main::$0 // reg byte a 4.0 - -reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] -zp[1]:2 [ fib::n#0 ] -reg byte a [ fib::$3 ] -zp[1]:3 [ fib::$4 ] -reg byte a [ fib::$5 ] -reg byte a [ fib::$6 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.asm b/src/test/ref/procedure-callingconvention-stack-far-4.asm deleted file mode 100644 index 2c82f4133..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.asm +++ /dev/null @@ -1,76 +0,0 @@ -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-4.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(__start) - .label SCREEN = $400 - .label val = 2 -.segment Code -__start: { - // char val = 0 - lda #0 - sta.z val - jsr main - rts -} -printother: { - ldx #0 - __b1: - // (SCREEN+40)[i]++; - inc SCREEN+$28,x - // for(char i:0..5) - inx - cpx #6 - bne __b1 - // } - rts -} -incval: { - // val++; - inc.z val - // } - rts -} -printval: { - // SCREEN[0] = val - lda.z val - sta SCREEN - // } - rts -} -ival: { - // incval() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // } - rts -} -pval: { - // printval() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // } - rts -} -main: { - .label i = 3 - lda #0 - sta.z i - __b1: - // pval() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // printother() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // ival() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // for(char i:0..5) - inc.z i - lda #6 - cmp.z i - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.cfg b/src/test/ref/procedure-callingconvention-stack-far-4.cfg deleted file mode 100644 index 07de02cc3..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.cfg +++ /dev/null @@ -1,79 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__far(bank) __stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__far(bank) __stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__far(bank) __stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__far(bank) __stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.log b/src/test/ref/procedure-callingconvention-stack-far-4.log deleted file mode 100644 index 677d0e3cf..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.log +++ /dev/null @@ -1,924 +0,0 @@ -Converting variable modified inside __stackcall procedure main() to load/store val -Inlined call call __init -Far call main::$0 = call pval -Far call main::$1 = call printother -Far call main::$2 = call ival -Far call pval::$0 = call printval -Far call ival::$0 = call incval -Calling convention __stackcall adding prepare/execute/finalize for call pval -Calling convention __stackcall adding prepare/execute/finalize for call printother -Calling convention __stackcall adding prepare/execute/finalize for call ival -Calling convention __stackcall adding prepare/execute/finalize for call printval -Calling convention __stackcall adding prepare/execute/finalize for call incval -Calling convention __stackcall adding prepare/execute/finalize for call main - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) - callexecute pval - callexecute printother - callexecute ival - main::i#1 = main::i#2 + rangenext(0,5) - main::$3 = main::i#1 != rangelast(0,5) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) __stackcall void pval() -pval: scope:[pval] from - callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - return - to:@return - -__far(bank) __stackcall void ival() -ival: scope:[ival] from - callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - return - to:@return - -__far(bank) __stackcall void printval() -printval: scope:[printval] from - SCREEN[0] = val - to:printval::@return -printval::@return: scope:[printval] from printval - return - to:@return - -__far(bank) __stackcall void incval() -incval: scope:[incval] from - val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - return - to:@return - -__far(bank) __stackcall void printother() -printother: scope:[printother] from - printother::i#0 = 0 - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) - (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - printother::i#1 = printother::i#2 + rangenext(0,5) - printother::$1 = printother::i#1 != rangelast(0,5) - if(printother::$1) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -bool main::$3 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -__far(bank) __stackcall void printother() -bool printother::$1 -char printother::i -char printother::i#0 -char printother::i#1 -char printother::i#2 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val - -Adding number conversion cast (unumber) 0 in SCREEN[0] = val -Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 -Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Constant printother::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ -Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 -Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ -Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 -Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val -Successful SSA optimization PassNSimplifyExpressionWithZero -Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 -Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 6 -Simplifying constant integer cast 6 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 6 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::i#0 -Inlining constant with var siblings printother::i#0 -Constant inlined main::i#0 = 0 -Constant inlined printother::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [ival] to incval:17 -Calls in [pval] to printval:20 -Calls in [main] to pval:24 printother:25 ival:26 - -Created 2 initial phi equivalence classes -Coalesced [11] printother::i#3 = printother::i#1 -Coalesced [30] main::i#3 = main::i#1 -Coalesced down to 2 phi equivalence classes -Culled Empty Block label printother::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__far(bank) __stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__far(bank) __stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__far(bank) __stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__far(bank) __stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval - -VARIABLE REGISTER WEIGHTS -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // 151.5 -char main::i#2 // 50.5 -__far(bank) __stackcall void printother() -char printother::i -char printother::i#1 // 15001.5 -char printother::i#2 // 20002.0 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val // 1579.2105263157896 - -Initial phi equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -Added variable val to live range equivalence class [ val ] -Complete equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -[ val ] -Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] -Allocated zp[1]:3 [ val ] -Allocated zp[1]:4 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , -Potential registers zp[1]:3 [ val ] : zp[1]:3 , - -REGISTER UPLIFT SCOPES -Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] -Uplift Scope [] 1,579.21: zp[1]:3 [ val ] -Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] -Uplift Scope [pval] -Uplift Scope [ival] -Uplift Scope [printval] -Uplift Scope [incval] -Uplift Scope [__start] - -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [printother] best 623 combination reg byte x [ printother::i#2 printother::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [] best 623 combination zp[1]:3 [ val ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [pval] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [ival] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [printval] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [incval] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [__start] best 623 combination -Attempting to uplift remaining variables inzp[1]:3 [ val ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [] best 623 combination zp[1]:3 [ val ] -Attempting to uplift remaining variables inzp[1]:4 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] -Allocated (was zp[1]:3) zp[1]:2 [ val ] -Allocated (was zp[1]:4) zp[1]:3 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-4.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(__start) - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - __b1_from_printother: - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - __b1_from___b1: - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - jmp __b1 - // printother::@1 - __b1: - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1_from___b1 - jmp __breturn - // printother::@return - __breturn: - // [10] return - rts -} - // incval -incval: { - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - jmp __breturn - // incval::@return - __breturn: - // [12] return - rts -} - // printval -printval: { - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - jmp __breturn - // printval::@return - __breturn: - // [14] return - rts -} - // ival -ival: { - // [16] callexecute incval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - jmp __breturn - // ival::@return - __breturn: - // [17] return - rts -} - // pval -pval: { - // [19] callexecute printval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - jmp __breturn - // pval::@return - __breturn: - // [20] return - rts -} - // main -main: { - .label i = 3 - // [22] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [23] callexecute pval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [24] callexecute printother - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [25] callexecute ival - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [28] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction __b1_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __b1_from_printother: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:3 151.5 -char main::i#2 // i zp[1]:3 50.5 -__far(bank) __stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -zp[1]:3 [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] - - -FINAL ASSEMBLER -Score: 395 - - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-4.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(__start) - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - // __start::__init1 - // char val = 0 - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - // printother::@1 - __b1: - // (SCREEN+40)[i]++; - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // for(char i:0..5) - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1 - // printother::@return - // } - // [10] return - rts -} - // incval -incval: { - // val++; - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - // incval::@return - // } - // [12] return - rts -} - // printval -printval: { - // SCREEN[0] = val - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - // printval::@return - // } - // [14] return - rts -} - // ival -ival: { - // incval() - // [16] callexecute incval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // ival::@return - // } - // [17] return - rts -} - // pval -pval: { - // printval() - // [19] callexecute printval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // pval::@return - // } - // [20] return - rts -} - // main -main: { - .label i = 3 - // [22] phi from main to main::@1 [phi:main->main::@1] - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // pval() - // [23] callexecute pval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // printother() - // [24] callexecute printother - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // ival() - // [25] callexecute ival - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // for(char i:0..5) - // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1 - // main::@return - // } - // [28] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.sym b/src/test/ref/procedure-callingconvention-stack-far-4.sym deleted file mode 100644 index 0081a2b70..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:3 151.5 -char main::i#2 // i zp[1]:3 50.5 -__far(bank) __stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -zp[1]:3 [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.asm b/src/test/ref/procedure-callingconvention-stack-far-5.asm deleted file mode 100644 index 31f8416e8..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.asm +++ /dev/null @@ -1,110 +0,0 @@ -// Test a procedure with calling convention stack -// Returning and passing struct values - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-5.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(__start) - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code -__start: { - // char idx = 0 - lda #0 - sta.z idx - jsr main - rts -} -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - inc.z idx - // SCREEN[idx++] = p.y - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - inc.z idx - // } - rts -} -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - txa - lsr - // struct Point p = { i, i/2 } - stx.z p - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // } - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - rts -} -main: { - .label p = 2 - .label i = 5 - lda #0 - sta.z i - __b1: - // for(char i=0;i<5;i++) - lda.z i - cmp #5 - bcc __b2 - // } - rts - __b2: - // struct Point p = get(i) - lda.z i - pha - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - sta.z p - pla - sta.z p+1 - // print(p) - pha - lda.z p - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // for(char i=0;i<5;i++) - inc.z i - jmp __b1 -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.cfg b/src/test/ref/procedure-callingconvention-stack-far-5.cfg deleted file mode 100644 index 0e44c7ff7..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.cfg +++ /dev/null @@ -1,62 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__far(bank) __stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.log b/src/test/ref/procedure-callingconvention-stack-far-5.log deleted file mode 100644 index f6cd22af4..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.log +++ /dev/null @@ -1,845 +0,0 @@ -Converting variable modified inside __stackcall procedure main() to load/store idx -Adding parameter assignment in __stackcall procedure get::i = param(get::i) -Adding parameter assignment in __stackcall procedure print::p = param(print::p) -Inlined call call __init -Far call main::p = call get(main::i) -Far call main::$2 = call print(main::p) -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) -Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) -Calling convention __stackcall adding prepare/execute/finalize for call main -Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) -Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) -Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) -Calling convention STACK_CALL adding stack push stackpush(char) = main::i -Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p -Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} -Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@2 - main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) - main::$0 = main::i#2 < 5 - if(main::$0) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - main::i#3 = phi( main::@1/main::i#2 ) - stackpush(char) = main::i#3 - sideeffect stackpushpadding(1) - callexecute get - main::p = stackpull(struct Point) - stackpush(struct Point) = main::p - callexecute print - sideeffect stackpullpadding(2) - main::i#1 = ++ main::i#3 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) __stackcall struct Point get(char i) -get: scope:[get] from - get::i#0 = stackidx(char,get::OFFSET_STACK_I) - get::$0 = get::i#0 / 2 - *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 - *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - return - to:@return - -__far(bank) __stackcall void print(struct Point p) -print: scope:[print] from - print::p = stackidx(struct Point,print::OFFSET_STACK_P) - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) - idx = ++ idx - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char OFFSET_STRUCT_POINT_X = 0 -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *)$400 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall struct Point get(char i) -number get::$0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 -__loadstore struct Point get::p -__loadstore struct Point get::return -__loadstore char idx -__stackcall void main() -bool main::$0 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -char main::i#3 -__loadstore struct Point main::p -__far(bank) __stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p - -Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 -Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 -Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in get::$0 = get::i#0 / 2 -Alias main::i#2 = main::i#3 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 -Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) -Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused constant OFFSET_STRUCT_POINT_X -Successful SSA optimization PassNEliminateUnusedVars -Rewriting division to use shift [12] get::$0 = get::i#0 / 2 -Successful SSA optimization Pass2MultiplyToShiftRewriting -Inlining constant with var siblings main::i#0 -Constant inlined main::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to get:24 print:27 - -Created 1 initial phi equivalence classes -Coalesced [30] main::i#4 = main::i#1 -Coalesced down to 1 phi equivalence classes -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__far(bank) __stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 - -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get - -VARIABLE REGISTER WEIGHTS -void __start() -__far(bank) __stackcall struct Point get(char i) -char get::$0 // 1001.0 -char get::i -char get::i#0 // 1501.5 -__loadstore struct Point get::p -__loadstore struct Point get::return // 47.666666666666664 -__loadstore char idx // 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // 202.0 -char main::i#2 // 44.888888888888886 -__loadstore struct Point main::p // 202.0 -__far(bank) __stackcall void print(struct Point p) -__loadstore struct Point print::p // 333.6666666666667 - -Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Added variable idx to live range equivalence class [ idx ] -Added variable print::p to live range equivalence class [ print::p ] -Added variable get::i#0 to live range equivalence class [ get::i#0 ] -Added variable get::$0 to live range equivalence class [ get::$0 ] -Added variable main::p to live range equivalence class [ main::p ] -Added variable get::return to live range equivalence class [ get::return ] -Added variable get::p to live range equivalence class [ get::p ] -Complete equivalence classes -[ main::i#2 main::i#1 ] -[ idx ] -[ print::p ] -[ get::i#0 ] -[ get::$0 ] -[ main::p ] -[ get::return ] -[ get::p ] -Allocated zp[1]:2 [ get::i#0 ] -Allocated zp[1]:3 [ get::$0 ] -Allocated zp[2]:4 [ print::p ] -Allocated zp[1]:6 [ idx ] -Allocated zp[1]:7 [ main::i#2 main::i#1 ] -Allocated zp[2]:8 [ main::p ] -Allocated zp[2]:10 [ get::return ] -Allocated zp[2]:12 [ get::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , -Potential registers zp[1]:6 [ idx ] : zp[1]:6 , -Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , -Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , -Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , -Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , - -REGISTER UPLIFT SCOPES -Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] -Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] -Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] -Uplift Scope [] 316.21: zp[1]:6 [ idx ] -Uplift Scope [Point] -Uplift Scope [__start] - -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [get] best 873 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [print] best 873 combination zp[2]:4 [ print::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [] best 873 combination zp[1]:6 [ idx ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [Point] best 873 combination -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [__start] best 873 combination -Attempting to uplift remaining variables inzp[1]:6 [ idx ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [] best 873 combination zp[1]:6 [ idx ] -Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] -Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] -Allocated (was zp[1]:6) zp[1]:4 [ idx ] -Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] -Allocated (was zp[2]:10) zp[2]:6 [ get::return ] -Allocated (was zp[2]:12) zp[2]:8 [ get::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-5.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(__start) - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - jmp __breturn - // print::@return - __breturn: - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - jmp __breturn - // get::@return - __breturn: - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // main::@1 - __b1: - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - jmp __breturn - // main::@return - __breturn: - // [21] return - rts - // main::@2 - __b2: - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - lda.z p+1 - pha - lda.z p - pha - // [27] callexecute print - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - __b1_from___b2: - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda.z p+1 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b1_from___init1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__far(bank) __stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] - - -FINAL ASSEMBLER -Score: 741 - - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-5.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(__start) - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char idx = 0 - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // SCREEN[idx++] = p.y - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // print::@return - // } - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // struct Point p = { i, i/2 } - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // get::@return - // } - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // main::@1 - __b1: - // for(char i=0;i<5;i++) - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - // main::@return - // } - // [21] return - rts - // main::@2 - __b2: - // struct Point p = get(i) - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // print(p) - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - pha - lda.z p - pha - // [27] callexecute print - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // for(char i=0;i<5;i++) - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.sym b/src/test/ref/procedure-callingconvention-stack-far-5.sym deleted file mode 100644 index 71c714767..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.sym +++ /dev/null @@ -1,30 +0,0 @@ -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__far(bank) __stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.asm b/src/test/ref/procedure-callingconvention-stack-far-6.asm deleted file mode 100644 index f5a07a3d3..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.asm +++ /dev/null @@ -1,51 +0,0 @@ -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-6.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) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - cmp #0 - beq __b1 - // n-1 - sec - sbc #1 - // char c = pow2(n-1) - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // return c+c; - asl - jmp __breturn - __b1: - lda #1 - __breturn: - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - rts -} -main: { - // pow2(6) - lda #6 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // *SCREEN = pow2(6) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.cfg b/src/test/ref/procedure-callingconvention-stack-far-6.cfg deleted file mode 100644 index 23570a74e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.cfg +++ /dev/null @@ -1,29 +0,0 @@ - -__far(bank) __stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.log b/src/test/ref/procedure-callingconvention-stack-far-6.log deleted file mode 100644 index d5fc76baf..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.log +++ /dev/null @@ -1,1060 +0,0 @@ -Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) -Far call main::$0 = call pow2(6) -Far call pow2::c = call pow2(pow2::$1) -Eliminating unused variable with no statement pow2::$2 -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) -Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) -Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) -Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = 6 -Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = 6 - callexecute pow2 - main::$0 = stackpull(char) - *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char pow2(char n) -pow2: scope:[pow2] from - pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - pow2::$0 = pow2::n#0 == 0 - if(pow2::$0) goto pow2::@1 - to:pow2::@2 -pow2::@1: scope:[pow2] from pow2 - pow2::return#0 = 1 - to:pow2::@return -pow2::@2: scope:[pow2] from pow2 - pow2::n#1 = phi( pow2/pow2::n#0 ) - pow2::$1 = pow2::n#1 - 1 - stackpush(char) = pow2::$1 - callexecute pow2 - pow2::c#0 = stackpull(char) - pow2::$3 = pow2::c#0 + pow2::c#0 - pow2::return#1 = pow2::$3 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 - pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) - stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__far(bank) __stackcall char pow2(char n) -bool pow2::$0 -number pow2::$1 -char pow2::$3 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 -char pow2::n -char pow2::n#0 -char pow2::n#1 -char pow2::return -char pow2::return#0 -char pow2::return#1 -char pow2::return#2 - -Adding number conversion cast (unumber) 6 in stackpush(char) = 6 -Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 -Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 -Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 -Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)6 -Inlining cast pow2::return#0 = (unumber)1 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 -Alias pow2::n#0 = pow2::n#1 -Alias pow2::return#1 = pow2::$3 -Successful SSA optimization Pass2AliasElimination -Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantIdentification -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Inlining constant with var siblings pow2::return#0 -Constant inlined pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of pow2::@1 -CALL GRAPH -Calls in [pow2] to pow2:4 -Calls in [main] to pow2:13 - -Created 1 initial phi equivalence classes -Coalesced [7] pow2::return#3 = pow2::return#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label pow2::@1 -Renumbering block pow2::@2 to pow2::@1 - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__far(bank) __stackcall char pow2(char n) -char pow2::$1 // 22.0 -char pow2::c -char pow2::c#0 // 33.0 -char pow2::n -char pow2::n#0 // 16.5 -char pow2::return -char pow2::return#1 // 22.0 -char pow2::return#2 // 22.0 - -Initial phi equivalence classes -[ pow2::return#2 pow2::return#1 ] -Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] -Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] -Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ pow2::return#2 pow2::return#1 ] -[ pow2::n#0 ] -[ pow2::$1 ] -[ pow2::c#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] -Allocated zp[1]:3 [ pow2::c#0 ] -Allocated zp[1]:4 [ pow2::$1 ] -Allocated zp[1]:5 [ pow2::n#0 ] -Allocated zp[1]:6 [ main::$0 ] -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x -Potential register analysis [4] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [4] callexecute pow2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a -Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a -Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x -Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [11] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [11] callexecute pow2 [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] -Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Uplifting [pow2] best 75 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] -Limited combination testing to 100 combinations of 256 possible. -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Uplifting [main] best 69 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Uplifting [] best 69 combination -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-6.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __breturn_from_pow2 - jmp __b1 - // pow2::@1 - __b1: - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - __breturn_from___b1: - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __breturn_from_pow2: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - jmp __breturn - // pow2::@return - __breturn: - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [14] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __b1: -Removing instruction __breturn_from___b1: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Relabelling long label __breturn_from_pow2 to __b1 -Succesful ASM optimization Pass5RelabelLongLabels - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 60 - - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-6.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) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b1 - // pow2::@1 - // n-1 - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // char c = pow2(n-1) - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // return c+c; - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __b1: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - // pow2::@return - __breturn: - // } - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // pow2(6) - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // *SCREEN = pow2(6) - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [14] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.sym b/src/test/ref/procedure-callingconvention-stack-far-6.sym deleted file mode 100644 index 52b0b3f95..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.sym +++ /dev/null @@ -1,21 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] From 1499f8cecc086a042178e282e73d3bc5a55346ee Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Wed, 5 Apr 2023 13:10:18 +0200 Subject: [PATCH 20/50] - Added javadoc documentation in Bank.java. - Added reworked procedure-callingconvention-phi-bank-5.c to reflect a good banking example for the documentation. - Update ref for test cases. --- .../java/dk/camelot64/kickc/model/Bank.java | 222 +- .../procedure-callingconvention-phi-bank-4.c | 1 - .../procedure-callingconvention-phi-bank-5.c | 155 +- .../procedure-callingconvention-phi-bank-5.ld | 7 + ...procedure-callingconvention-phi-bank-5.asm | 414 +- ...procedure-callingconvention-phi-bank-5.cfg | 377 +- ...procedure-callingconvention-phi-bank-5.log | 4397 +++++++++-------- ...procedure-callingconvention-phi-bank-5.sym | 325 +- 8 files changed, 3367 insertions(+), 2531 deletions(-) create mode 100644 src/test/kc/procedure-callingconvention-phi-bank-5.ld diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index 99220e7f4..6f43b7c18 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -1,10 +1,226 @@ package dk.camelot64.kickc.model; -/** A Bank segment. */ + + +/** + * + *

+ * Specific target computer platforms implement a memory layout that can be banked either in ram or rom. + * This class models the capability to calculate which function call implementations are banked and which not. + *
Since banking implementations are specific to the target computer platform, + * specific assembler fragments are available in the compiler, + * that model the implementation of the banking, depending on: + * + *

    + *
  • the computer target computer platform.
  • + *
  • the bank method of function call implementation at the call location.
  • + *
+ * + *

The method can implement different banking implementations, + * depending on the required function call speed, + * the banking routine availability in the kernal (rom) of the target computer platform + * or even using specific designed banking routines by kickc to provide alternatives for banking methods. + * The method and the platform are the key combinations that select the fragments + * in kickc to generate the banked function call implementations used by the compiler. + * + *

Your C-code can be augmented with 3 new directives, that define which function(s) will be declared as banked: + * + *

    + *
  • #pragma bank( method, number ) directive, defines for sequent functions + * the target bank number and the method for the banked function call implementations.
  • + *
  • A new #pragma nobank( dummy ) directive, resets the calculation of banking for sequent functions + * not to calculate any banking for these functions.
  • + *
  • A new __bank( method, number ) directive, defines for one function a + * target bank number and the method for the banked function call implementation.
  • + *
+ * + *

The compiler decides automatically the function call implementation, which can be either banked or not. + * And if the function call implementation is banked, it should use the specified bank number to implement + * the banked function call. + * The rules can be summarized as follows: + * + *

    + *
  • If a function is declared not banked, and the function call location is not banked, + * the function call implementation will be not banked.
  • + *
  • If a function is declared banked, and the function call location is not banked, + * the function call implementation will be banked.
  • + *
  • If a function is declared not banked, and the function call location is banked, + * the function call implementation will be not banked.
  • + *
  • If a function is declared banked, and the function call location is banked, + * but the function call location is within the same bank, + * the function call implementation will be not banked.
  • + *
  • If a function is declared banked, and the function call location is banked, + * but the function call location is not within the same bank, + * the function call implementation will be banked.
  • + *
+ * + *

The usage of #pragma code_seg( segment ) directive + * is very important! The #pragma code_seg( segment ) directive utilization + * in harmony with the #pragma bank( method, number ) directive + * makes the overall banking implementation work for your program. + * + *

+ *

    + *
  • KickC uses the #pragma code_seg( segment ) directive to calculate the + * addressing of the allocation of the function code within main or banked memory.
  • + *
  • KickC uses the #pragma bank( method, number ) directive or + * __bank( method, number ) directive to calculate the function call implementation + * at the function calling locations!
  • + *
+ * + *

+ * The best way to describe the usage with a comprehensive example, documenting the different use cases + * how the compiler decides which functions are banked or not, + * and how the resulting banked function call code will be generated. + *

+ * The example implements several functions in various forms to allocate the code in main memory + * using segment Code and within 3 banked memory locations, using segments Bank1, Bank2, Bank3. + * In order to ensure a good understanding of the example, the usage of these code segments in harmony with the + * banking directives must be described, which is absolutely necessary to master, + * in order to make banked function calls work. + * + *

+ *

    + *
  • The #pragma directive code_seg( Code ) defines the sequent function code to be allocated + * within main (not banked) memory, defined within segment Code<> by the linker.
  • + *
  • The #pragma directive code_seg( Bank1 ) defines the sequent function code to be allocated + * within banked memory, defined within segment Bank1 by the linker.
  • + *
  • The #pragma directive code_seg( Bank2 ) defines the sequent function code to be allocated + * within banked memory, defined within segment Bank2 by the linker.
  • + *
  • The #pragma directive code_seg( Bank3 ) defines the sequent function code to be allocated + * within banked memory, defined within segment Bank3 by the linker.
  • + *
+ * + * Note that the Code segment is the default location in KickC where the code is placed by the linker. + * + * Find below the code example, which is also the program procedure-callingconvention-phi-bank-5.c + * + *
+ *
+ * // The linker specification of the different segments.
+ * #pragma link("procedure-callingconvention-phi-bank-5.ld")
+ *
+ * // The target computer platform is the Commander X16,
+ * // which implements banking in ram between 0xA0000 and 0xBFFF,
+ * // and in rom between 0xC000 and 0xFFFF.
+ * #pragma target(cx16)
+ *
+ * char *const SCREEN = (char *)0x0400; // Just for test purposes.
+ *
+ * #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker.
+ * #pragma bank(ram, 1)    // The sequent functions will be banked using call method ram in bank number 1.
+ *
+ * // Function declarations
+ * char func_ram_bank1_a(char a, char b);
+ * char __bank(ram, 1) func_ram_bank1_b(char a, char b);
+ * char func_ram_bank1_c(char a, char b);
+ * char func_ram_bank1_d(char a, char b);
+ * char func_ram_bank1_e(char a, char b);
+ * char func_ram_bank1_f(char a, char b);
+ * char func_rom_bank2_a(char a, char b);
+ * char __bank(rom, 2) func_rom_bank2_b(char a, char b);
+ * char func_rom_bank2_c(char a, char b);
+ * char func_rom_bank2_d(char a, char b);
+ * char func_rom_bank2_e(char a, char b);
+ * char func_rom_bank2_f(char a, char b);
+ * char func_main_a(char a, char b);
+ * char func_main_b(char a, char b);
+ *
+ * // Functional code
+ *
+ * char func_ram_bank1_a(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * char func_ram_bank1_c(char a, char b) {
+ *     return func_ram_bank1_a(a, b);               // Non banked call in ram bank 1.
+ * }
+ *
+ * char func_ram_bank1_d(char a, char b) {
+ *     return func_rom_bank2_a(a, b);               // Banked call from ram bank 1 to rom bank 2.
+ * }
+ *
+ * char func_ram_bank1_e(char a, char b) {
+ *     return func_rom_bank2_b(a, b);               // Banked call from ram bank 1 to rom bank 2.
+ * }
+ *
+ * char func_ram_bank1_f(char a, char b) {
+ *     return func_main_a(a, b);                    // Non banked call from ram bank 1 to main memory.
+ * }
+ *
+ *
+ * #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker.
+ * #pragma bank(rom, 2)    // The sequent functions will be banked using call method rom in bank number 2.
+ *
+ * char func_rom_bank2_a(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * char func_rom_bank2_c(char a, char b) {
+ *     return func_ram_bank1_a(a, b);              // Banked call from rom bank 2 to ram bank 1.
+ * }
+ *
+ * char func_rom_bank2_d(char a, char b) {
+ *     return func_rom_bank2_a(a, b);              // Non banked call in rom bank 2.
+ * }
+ *
+ * char func_rom_bank2_e(char a, char b) {
+ *     return func_rom_bank2_b(a, b);              // Non Banked call in rom bank 2.
+ * }
+ *
+ * char func_rom_bank2_f(char a, char b) {
+ *     return func_main_a(a, b);                   // Non banked call from rom bank 2 to main memory.
+ * }
+ *
+ *
+ * #pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore.
+ *
+ * // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram.
+ * char __bank(ram, 1) func_ram_bank1_b(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * // The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom.
+ * char __bank(rom, 2) func_rom_bank2_b(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * #pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code).
+ *
+ * // Allocated in main memory.
+ * char func_main_a(char a, char b) {
+ *     return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory.
+ * }
+ *
+ * // Allocated in main memory.
+ * char func_main_b(char a, char b) {
+ *     return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory.
+ * }
+ *
+ * // Practically this means that the main() function is placed in main memory ...
+ *
+ * void main(void) {
+ *     SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_main_a('0', 7);  // Near call in main memory from main memory.
+ *     SCREEN[0] = func_main_b('0', 7);  // Near call in main memory from main memory.
+ * }
+ * 
+ */ public class Bank { - private final String bankArea; - private Long bank; + private final String bankArea; // The bank method to apply. + private Long bank; // The bank number. public Bank(String bankArea, Long bank) { this.bankArea = bankArea; diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c index 7075f3b6c..31dc11f0e 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -1,6 +1,5 @@ // Test a far call procedure with a calling convention phi -#pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") #pragma target(cx16) diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c index c8b8aa399..ef564b56c 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.c @@ -1,104 +1,119 @@ -// Test a far call procedure with a calling convention phi -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") +// The linker specification of the different segments. +#pragma link("procedure-callingconvention-phi-bank-5.ld") + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in rom between 0xC000 and 0xFFFF. #pragma target(cx16) -char* const SCREEN = (char*)0x0400; +char *const SCREEN = (char *)0x0400; // Just for test purposes. -#pragma code_seg(stage) -#pragma bank(ram, 1) +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. -char func_bank1_a(char a, char b) { - return a+b; +// Function declarations +char func_ram_bank1_a(char a, char b); +char __bank(ram, 1) func_ram_bank1_b(char a, char b); +char func_ram_bank1_c(char a, char b); +char func_ram_bank1_d(char a, char b); +char func_ram_bank1_e(char a, char b); +char func_ram_bank1_f(char a, char b); +char func_rom_bank2_a(char a, char b); +char __bank(rom, 2) func_rom_bank2_b(char a, char b); +char func_rom_bank2_c(char a, char b); +char func_rom_bank2_d(char a, char b); +char func_rom_bank2_e(char a, char b); +char func_rom_bank2_f(char a, char b); +char func_main_a(char a, char b); +char func_main_b(char a, char b); + +// Functional code + +char func_ram_bank1_a(char a, char b) { + return a + b; } -char func_bank1_c(char a, char b) { - // this should be a near call, because the call is from the same bank. - return func_bank1_a(a,b); +char func_ram_bank1_c(char a, char b) { + return func_ram_bank1_a(a, b); // Non banked call in ram bank 1. } -char func_bank1_d(char a, char b) { - // this should be a far call, because the call is to an other bank. - return func_bank2_a(a,b); +char func_ram_bank1_d(char a, char b) { + return func_rom_bank2_a(a, b); // Banked call from ram bank 1 to rom bank 2. } -#pragma code_seg(platform) -#pragma bank(ram, 2) +char func_ram_bank1_e(char a, char b) { + return func_rom_bank2_b(a, b); // Banked call from ram bank 1 to rom bank 2. +} -char func_bank2_a(char a, char b) { - return a+b; +char func_ram_bank1_f(char a, char b) { + return func_main_a(a, b); // Non banked call from ram bank 1 to main memory. } -char func_bank2_c(char a, char b) { - // this should be a far call, because the call is from another bank. - return func_bank1_a(a,b); +#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. +#pragma bank(rom, 2) // The sequent functions will be banked using call method rom in bank number 2. + +char func_rom_bank2_a(char a, char b) { + return a + b; } -char func_bank2_d(char a, char b) { - // this should be a near call, because the call is from the same bank. - return func_bank2_a(a,b); +char func_rom_bank2_c(char a, char b) { + return func_ram_bank1_a(a, b); // Banked call from rom bank 2 to ram bank 1. } -char func_bank2_e(char a, char b) { - // this should be a near call, because the call is from the same bank. - return func_bank2_b(a,b); +char func_rom_bank2_d(char a, char b) { + return func_rom_bank2_a(a, b); // Non banked call in rom bank 2. } -char func_bank2_f(char a, char b) { - // this should be a far call, because the call is from another bank. - return func_bank1_b(a,b); +char func_rom_bank2_e(char a, char b) { + return func_rom_bank2_b(a, b); // Non Banked call in rom bank 2. } -#pragma nobank(dummy) - -char __bank(ram, 1) func_bank1_b(char a, char b) { - return a+b; +char func_rom_bank2_f(char a, char b) { + return func_main_a(a, b); // Non banked call from rom bank 2 to main memory. } -char __bank(ram, 2) func_bank2_b(char a, char b) { - return a+b; + +#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. + +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +char __bank(ram, 1) func_ram_bank1_b(char a, char b) { + return a + b; } -#pragma nobank(dummy) - -char func_bank1_e(char a, char b) { - // this should be a far call, because the call is to bank 1. - return func_bank1_a(a,b); +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +char __bank(rom, 2) func_rom_bank2_b(char a, char b) { + return a + b; } -char func_bank1_f(char a, char b) { - // this should be a far call, because the call is to bank 2. - return func_bank2_a(a,b); +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). + +// Allocated in main memory. +char func_main_a(char a, char b) { + return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory. } -#pragma code_seg(Code) +// Allocated in main memory. +char func_main_b(char a, char b) { + return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory. +} + +// Practically this means that the main() function is placed in main memory ... void main(void) { - // far call - SCREEN[0] = func_bank1_a('0', 7); - // far call - SCREEN[0] = func_bank1_b('0', 7); - // far call - SCREEN[0] = func_bank1_c('0', 7); - // far call - SCREEN[0] = func_bank1_d('0', 7); - // near call - SCREEN[0] = func_bank1_e('0', 7); - // near call - SCREEN[0] = func_bank1_f('0', 7); - // far call - SCREEN[0] = func_bank2_a('0', 7); - // far call - SCREEN[0] = func_bank2_b('0', 7); - // far call - SCREEN[0] = func_bank2_c('0', 7); - // far call - SCREEN[0] = func_bank2_d('0', 7); - // far call - SCREEN[0] = func_bank2_e('0', 7); - // far call - SCREEN[0] = func_bank2_f('0', 7); + SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory. + SCREEN[0] = func_main_a('0', 7); // Near call in main memory from main memory. + SCREEN[0] = func_main_b('0', 7); // Near call in main memory from main memory. } - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.ld b/src/test/kc/procedure-callingconvention-phi-bank-5.ld new file mode 100644 index 000000000..b82b5d038 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.ld @@ -0,0 +1,7 @@ +.segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.asm b/src/test/ref/procedure-callingconvention-phi-bank-5.asm index f04dd9403..b1c97a971 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.asm @@ -1,268 +1,312 @@ -// Test a far call procedure with a calling convention phi +// The linker specification of the different segments. .cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] + .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] + // The target computer platform is the Commander X16, + // which implements banking in ram between 0xA0000 and 0xBFFF, + // and in rom between 0xC000 and 0xFFFF. .label SCREEN = $400 .segment Code +// Practically this means that the main() function is placed in main memory ... main: { - // func_bank1_a('0', 7) + // func_ram_bank1_a('0', 7) lda #7 ldx #'0' jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a('0', 7) - // SCREEN[0] = func_bank1_a('0', 7) - // far call + // func_ram_bank1_a('0', 7) + // SCREEN[0] = func_ram_bank1_a('0', 7) sta SCREEN - // func_bank1_b('0', 7) - lda #7 - ldx #'0' - jsr func_bank1_b - // func_bank1_b('0', 7) - // SCREEN[0] = func_bank1_b('0', 7) - // far call + // func_ram_bank1_b('0', 7) + jsr func_ram_bank1_b + // SCREEN[0] = func_ram_bank1_b('0', 7) + // Banked call to ram in bank 1 from main memory. + lda #func_ram_bank1_b.return sta SCREEN - // func_bank1_c('0', 7) + // func_ram_bank1_c('0', 7) jsr $ff6e - .byte func_bank1_c + .byte func_ram_bank1_c .byte 1 - // func_bank1_c('0', 7) - // SCREEN[0] = func_bank1_c('0', 7) - // far call + // func_ram_bank1_c('0', 7) + // SCREEN[0] = func_ram_bank1_c('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_d('0', 7) + // func_ram_bank1_d('0', 7) jsr $ff6e - .byte func_bank1_d + .byte func_ram_bank1_d .byte 1 - // func_bank1_d('0', 7) - // SCREEN[0] = func_bank1_d('0', 7) - // far call + // func_ram_bank1_d('0', 7) + // SCREEN[0] = func_ram_bank1_d('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_e('0', 7) - jsr func_bank1_e - // func_bank1_e('0', 7) - // SCREEN[0] = func_bank1_e('0', 7) - // near call + // func_ram_bank1_e('0', 7) + ldx #7 + lda #'0' + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e('0', 7) + // SCREEN[0] = func_ram_bank1_e('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_f('0', 7) - jsr func_bank1_f - // func_bank1_f('0', 7) - // SCREEN[0] = func_bank1_f('0', 7) - // near call + // func_ram_bank1_f('0', 7) + jsr $ff6e + .byte func_ram_bank1_f + .byte 1 + // func_ram_bank1_f('0', 7) + // SCREEN[0] = func_ram_bank1_f('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_a('0', 7) + // func_rom_bank2_a('0', 7) lda #7 ldx #'0' jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // func_bank2_a('0', 7) - // SCREEN[0] = func_bank2_a('0', 7) - // far call + // func_rom_bank2_a('0', 7) + // SCREEN[0] = func_rom_bank2_a('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_b('0', 7) - lda #7 - ldx #'0' - jsr func_bank2_b - // func_bank2_b('0', 7) - // SCREEN[0] = func_bank2_b('0', 7) - // far call + // func_rom_bank2_b('0', 7) + ldx #7 + lda #'0' + jsr func_rom_bank2_b + // func_rom_bank2_b('0', 7) + // SCREEN[0] = func_rom_bank2_b('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_c('0', 7) + // func_rom_bank2_c('0', 7) jsr $ff6e - .byte func_bank2_c + .byte func_rom_bank2_c .byte 2 - // func_bank2_c('0', 7) - // SCREEN[0] = func_bank2_c('0', 7) - // far call + // func_rom_bank2_c('0', 7) + // SCREEN[0] = func_rom_bank2_c('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_d('0', 7) + // func_rom_bank2_d('0', 7) jsr $ff6e - .byte func_bank2_d + .byte func_rom_bank2_d .byte 2 - // func_bank2_d('0', 7) - // SCREEN[0] = func_bank2_d('0', 7) - // far call + // func_rom_bank2_d('0', 7) + // SCREEN[0] = func_rom_bank2_d('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_e('0', 7) + // func_rom_bank2_e('0', 7) + ldx #7 + lda #'0' jsr $ff6e - .byte func_bank2_e + .byte func_rom_bank2_e .byte 2 - // func_bank2_e('0', 7) - // SCREEN[0] = func_bank2_e('0', 7) - // far call + // func_rom_bank2_e('0', 7) + // SCREEN[0] = func_rom_bank2_e('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_f('0', 7) + // func_rom_bank2_f('0', 7) jsr $ff6e - .byte func_bank2_f + .byte func_rom_bank2_f .byte 2 - // func_bank2_f('0', 7) - // SCREEN[0] = func_bank2_f('0', 7) - // far call + // func_rom_bank2_f('0', 7) + // SCREEN[0] = func_rom_bank2_f('0', 7) + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_a('0', 7) + ldx #7 + lda #'0' + jsr func_main_a + // func_main_a('0', 7) + // SCREEN[0] = func_main_a('0', 7) + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_b('0', 7) + jsr func_main_b + // func_main_b('0', 7) + // SCREEN[0] = func_main_b('0', 7) + // Near call in main memory from main memory. sta SCREEN // } rts } -.segment stage -// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) -func_bank1_a: { - // a+b +.segment Bank1 +// Functional code +// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) +func_ram_bank1_a: { + // a + b stx.z $ff clc adc.z $ff // } rts } -.segment platform -// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) -func_bank1_b: { - // a+b - stx.z $ff - clc - adc.z $ff - // } - rts -} -.segment stage -// __register(A) char func_bank1_c(char a, char b) -func_bank1_c: { +.segment Bank2 +// The sequent functions will consider no banking calculations anymore. +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +// char func_ram_bank1_b(char a, char b) +func_ram_bank1_b: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) + .label return = a+b + rts +} +.segment Bank1 +// __register(A) char func_ram_bank1_c(char a, char b) +func_ram_bank1_c: { + .const a = '0' + .const b = 7 + // func_ram_bank1_a(a, b) lda #b ldx #a - jsr func_bank1_a - // func_bank1_a(a,b) + jsr func_ram_bank1_a + // func_ram_bank1_a(a, b) // } rts } -// __register(A) char func_bank1_d(char a, char b) -func_bank1_d: { +// __register(A) char func_ram_bank1_d(char a, char b) +func_ram_bank1_d: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) + // func_rom_bank2_a(a, b) lda #b ldx #a jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // func_bank2_a(a,b) + // func_rom_bank2_a(a, b) // } rts } -.segment platform -// __register(A) char func_bank1_e(char a, char b) -func_bank1_e: { +// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) +func_ram_bank1_e: { + // func_rom_bank2_b(a, b) + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // } + rts +} +// __register(A) char func_ram_bank1_f(char a, char b) +func_ram_bank1_f: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) + // func_main_a(a, b) + ldx #b + lda #a + jsr func_main_a + // func_main_a(a, b) + // } + rts +} +.segment Bank2 +// The sequent functions will be banked using call method rom in bank number 2. +// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) +func_rom_bank2_a: { + // a + b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) +func_rom_bank2_b: { + // a + b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// __register(A) char func_rom_bank2_c(char a, char b) +func_rom_bank2_c: { + .const a = '0' + .const b = 7 + // func_ram_bank1_a(a, b) lda #b ldx #a jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a(a,b) + // func_ram_bank1_a(a, b) // } rts } -// __register(A) char func_bank1_f(char a, char b) -func_bank1_f: { +// __register(A) char func_rom_bank2_d(char a, char b) +func_rom_bank2_d: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) + // func_rom_bank2_a(a, b) lda #b ldx #a + jsr func_rom_bank2_a + // func_rom_bank2_a(a, b) + // } + rts +} +// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) +func_rom_bank2_e: { + // func_rom_bank2_b(a, b) + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // } + rts +} +// __register(A) char func_rom_bank2_f(char a, char b) +func_rom_bank2_f: { + .const a = '0' + .const b = 7 + // func_main_a(a, b) + ldx #b + lda #a + jsr func_main_a + // func_main_a(a, b) + // } + rts +} +.segment Code +// The sequent functions will be addressed in the default main memory location (segment Code). +// Allocated in main memory. +// __register(A) char func_main_a(__register(A) char a, __register(X) char b) +func_main_a: { + // func_ram_bank1_e(a, b) jsr $ff6e - .byte func_bank2_a + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e(a, b) + // } + rts +} +// Allocated in main memory. +// __register(A) char func_main_b(char a, char b) +func_main_b: { + .const a = '0' + .const b = 7 + // func_rom_bank2_e(a, b) + ldx #b + lda #a + jsr $ff6e + .byte func_rom_bank2_e .byte 2 - // func_bank2_a(a,b) - // } - rts -} -// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) -func_bank2_a: { - // a+b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) -func_bank2_b: { - // a+b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// __register(A) char func_bank2_c(char a, char b) -func_bank2_c: { - .const a = '0' - .const b = 7 - // func_bank1_a(a,b) - lda #b - ldx #a - jsr $ff6e - .byte func_bank1_a - .byte 1 - // func_bank1_a(a,b) - // } - rts -} -// __register(A) char func_bank2_d(char a, char b) -func_bank2_d: { - .const a = '0' - .const b = 7 - // func_bank2_a(a,b) - lda #b - ldx #a - jsr func_bank2_a - // func_bank2_a(a,b) - // } - rts -} -// __register(A) char func_bank2_e(char a, char b) -func_bank2_e: { - .const a = '0' - .const b = 7 - // func_bank2_b(a,b) - lda #b - ldx #a - jsr func_bank2_b - // func_bank2_b(a,b) - // } - rts -} -// __register(A) char func_bank2_f(char a, char b) -func_bank2_f: { - .const a = '0' - .const b = 7 - // func_bank1_b(a,b) - lda #b - ldx #a - jsr func_bank1_b - // func_bank1_b(a,b) + // func_rom_bank2_e(a, b) // } rts } diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg index 39617047b..12023844b 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg @@ -2,223 +2,266 @@ void main() main: scope:[main] from [0] phi() - [1] call func_bank1_a - [2] func_bank1_a::return#10 = func_bank1_a::return#0 + [1] call func_ram_bank1_a + [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 to:main::@1 main::@1: scope:[main] from main - [3] main::$0 = func_bank1_a::return#10 + [3] main::$0 = func_ram_bank1_a::return#4 [4] *SCREEN = main::$0 - [5] call func_bank1_b - [6] func_bank1_b::return#3 = func_bank1_b::return#1 + [5] call func_ram_bank1_b to:main::@2 main::@2: scope:[main] from main::@1 - [7] main::$1 = func_bank1_b::return#3 - [8] *SCREEN = main::$1 - [9] call func_bank1_c - [10] func_bank1_c::return#2 = func_bank1_c::return#0 + [6] *SCREEN = func_ram_bank1_b::return#0 + [7] call func_ram_bank1_c + [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 to:main::@3 main::@3: scope:[main] from main::@2 - [11] main::$2 = func_bank1_c::return#2 - [12] *SCREEN = main::$2 - [13] call func_bank1_d - [14] func_bank1_d::return#2 = func_bank1_d::return#0 + [9] main::$2 = func_ram_bank1_c::return#2 + [10] *SCREEN = main::$2 + [11] call func_ram_bank1_d + [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 to:main::@4 main::@4: scope:[main] from main::@3 - [15] main::$3 = func_bank1_d::return#2 - [16] *SCREEN = main::$3 - [17] call func_bank1_e - [18] func_bank1_e::return#2 = func_bank1_e::return#0 + [13] main::$3 = func_ram_bank1_d::return#2 + [14] *SCREEN = main::$3 + [15] call func_ram_bank1_e + [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 to:main::@5 main::@5: scope:[main] from main::@4 - [19] main::$4 = func_bank1_e::return#2 - [20] *SCREEN = main::$4 - [21] call func_bank1_f - [22] func_bank1_f::return#2 = func_bank1_f::return#0 + [17] main::$4 = func_ram_bank1_e::return#3 + [18] *SCREEN = main::$4 + [19] call func_ram_bank1_f + [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 to:main::@6 main::@6: scope:[main] from main::@5 - [23] main::$5 = func_bank1_f::return#2 - [24] *SCREEN = main::$5 - [25] call func_bank2_a - [26] func_bank2_a::return#10 = func_bank2_a::return#1 + [21] main::$5 = func_ram_bank1_f::return#2 + [22] *SCREEN = main::$5 + [23] call func_rom_bank2_a + [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 to:main::@7 main::@7: scope:[main] from main::@6 - [27] main::$6 = func_bank2_a::return#10 - [28] *SCREEN = main::$6 - [29] call func_bank2_b - [30] func_bank2_b::return#3 = func_bank2_b::return#1 + [25] main::$6 = func_rom_bank2_a::return#4 + [26] *SCREEN = main::$6 + [27] call func_rom_bank2_b + [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 to:main::@8 main::@8: scope:[main] from main::@7 - [31] main::$7 = func_bank2_b::return#3 - [32] *SCREEN = main::$7 - [33] call func_bank2_c - [34] func_bank2_c::return#2 = func_bank2_c::return#0 + [29] main::$7 = func_rom_bank2_b::return#4 + [30] *SCREEN = main::$7 + [31] call func_rom_bank2_c + [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 to:main::@9 main::@9: scope:[main] from main::@8 - [35] main::$8 = func_bank2_c::return#2 - [36] *SCREEN = main::$8 - [37] call func_bank2_d - [38] func_bank2_d::return#2 = func_bank2_d::return#0 + [33] main::$8 = func_rom_bank2_c::return#2 + [34] *SCREEN = main::$8 + [35] call func_rom_bank2_d + [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 to:main::@10 main::@10: scope:[main] from main::@9 - [39] main::$9 = func_bank2_d::return#2 - [40] *SCREEN = main::$9 - [41] call func_bank2_e - [42] func_bank2_e::return#2 = func_bank2_e::return#0 + [37] main::$9 = func_rom_bank2_d::return#2 + [38] *SCREEN = main::$9 + [39] call func_rom_bank2_e + [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 to:main::@11 main::@11: scope:[main] from main::@10 - [43] main::$10 = func_bank2_e::return#2 - [44] *SCREEN = main::$10 - [45] call func_bank2_f - [46] func_bank2_f::return#2 = func_bank2_f::return#0 + [41] main::$10 = func_rom_bank2_e::return#3 + [42] *SCREEN = main::$10 + [43] call func_rom_bank2_f + [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 to:main::@12 main::@12: scope:[main] from main::@11 - [47] main::$11 = func_bank2_f::return#2 - [48] *SCREEN = main::$11 + [45] main::$11 = func_rom_bank2_f::return#2 + [46] *SCREEN = main::$11 + [47] call func_main_a + [48] func_main_a::return#4 = func_main_a::return#2 + to:main::@13 +main::@13: scope:[main] from main::@12 + [49] main::$12 = func_main_a::return#4 + [50] *SCREEN = main::$12 + [51] call func_main_b + [52] func_main_b::return#2 = func_main_b::return#0 + to:main::@14 +main::@14: scope:[main] from main::@13 + [53] main::$13 = func_main_b::return#2 + [54] *SCREEN = main::$13 to:main::@return -main::@return: scope:[main] from main::@12 - [49] return - to:@return - -__bank(bank) char func_bank1_a(char a , char b) -func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main - [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) - [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) - [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 - to:func_bank1_a::@return -func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a - [52] return - to:@return - -char func_bank1_b(char a , char b) -func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 - [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) - [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) - [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 - to:func_bank1_b::@return -func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b +main::@return: scope:[main] from main::@14 [55] return to:@return -__bank(bank) char func_bank1_c(char a , char b) -func_bank1_c: scope:[func_bank1_c] from main::@2 - [56] phi() - [57] call func_bank1_a - [58] func_bank1_a::return#2 = func_bank1_a::return#0 - to:func_bank1_c::@1 -func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c - [59] func_bank1_c::return#0 = func_bank1_a::return#2 - to:func_bank1_c::@return -func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 +__bank(bank) char func_ram_bank1_a(char a , char b) +func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main + [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) + [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) + [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 + to:func_ram_bank1_a::@return +func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a + [58] return + to:@return + +char func_ram_bank1_b(char a , char b) +func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 + [59] phi() + to:func_ram_bank1_b::@return +func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b [60] return to:@return -__bank(bank) char func_bank1_d(char a , char b) -func_bank1_d: scope:[func_bank1_d] from main::@3 +__bank(bank) char func_ram_bank1_c(char a , char b) +func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 [61] phi() - [62] call func_bank2_a - [63] func_bank2_a::return#0 = func_bank2_a::return#1 - to:func_bank1_d::@1 -func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d - [64] func_bank1_d::return#0 = func_bank2_a::return#0 - to:func_bank1_d::@return -func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [62] call func_ram_bank1_a + [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 + to:func_ram_bank1_c::@1 +func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c + [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 + to:func_ram_bank1_c::@return +func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 [65] return to:@return -char func_bank1_e(char a , char b) -func_bank1_e: scope:[func_bank1_e] from main::@4 +__bank(bank) char func_ram_bank1_d(char a , char b) +func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 [66] phi() - [67] call func_bank1_a - [68] func_bank1_a::return#4 = func_bank1_a::return#0 - to:func_bank1_e::@1 -func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e - [69] func_bank1_e::return#0 = func_bank1_a::return#4 - to:func_bank1_e::@return -func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [67] call func_rom_bank2_a + [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 + to:func_ram_bank1_d::@1 +func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d + [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 + to:func_ram_bank1_d::@return +func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 [70] return to:@return -char func_bank1_f(char a , char b) -func_bank1_f: scope:[func_bank1_f] from main::@5 - [71] phi() - [72] call func_bank2_a - [73] func_bank2_a::return#4 = func_bank2_a::return#1 - to:func_bank1_f::@1 -func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f - [74] func_bank1_f::return#0 = func_bank2_a::return#4 - to:func_bank1_f::@return -func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 - [75] return +__bank(bank) char func_ram_bank1_e(char a , char b) +func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 + [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) + [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) + [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + [74] call func_rom_bank2_b + [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 + to:func_ram_bank1_e::@1 +func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e + [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 + to:func_ram_bank1_e::@return +func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 + [77] return to:@return -__bank(bank) char func_bank2_a(char a , char b) -func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 - [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) - [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) - [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 - to:func_bank2_a::@return -func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a - [78] return +__bank(bank) char func_ram_bank1_f(char a , char b) +func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 + [78] phi() + [79] call func_main_a + [80] func_main_a::return#0 = func_main_a::return#2 + to:func_ram_bank1_f::@1 +func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f + [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + to:func_ram_bank1_f::@return +func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 + [82] return to:@return -char func_bank2_b(char a , char b) -func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 - [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) - [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) - [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 - to:func_bank2_b::@return -func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b - [81] return +__bank(bank) char func_rom_bank2_a(char a , char b) +func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 + [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) + [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) + [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 + to:func_rom_bank2_a::@return +func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a + [85] return to:@return -__bank(bank) char func_bank2_c(char a , char b) -func_bank2_c: scope:[func_bank2_c] from main::@8 - [82] phi() - [83] call func_bank1_a - [84] func_bank1_a::return#3 = func_bank1_a::return#0 - to:func_bank2_c::@1 -func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c - [85] func_bank2_c::return#0 = func_bank1_a::return#3 - to:func_bank2_c::@return -func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 - [86] return +char func_rom_bank2_b(char a , char b) +func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 + [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) + [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) + [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 + to:func_rom_bank2_b::@return +func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b + [88] return to:@return -__bank(bank) char func_bank2_d(char a , char b) -func_bank2_d: scope:[func_bank2_d] from main::@9 - [87] phi() - [88] call func_bank2_a - [89] func_bank2_a::return#3 = func_bank2_a::return#1 - to:func_bank2_d::@1 -func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d - [90] func_bank2_d::return#0 = func_bank2_a::return#3 - to:func_bank2_d::@return -func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 - [91] return +__bank(bank) char func_rom_bank2_c(char a , char b) +func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 + [89] phi() + [90] call func_ram_bank1_a + [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 + to:func_rom_bank2_c::@1 +func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c + [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 + to:func_rom_bank2_c::@return +func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 + [93] return to:@return -__bank(bank) char func_bank2_e(char a , char b) -func_bank2_e: scope:[func_bank2_e] from main::@10 - [92] phi() - [93] call func_bank2_b - [94] func_bank2_b::return#0 = func_bank2_b::return#1 - to:func_bank2_e::@1 -func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e - [95] func_bank2_e::return#0 = func_bank2_b::return#0 - to:func_bank2_e::@return -func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 - [96] return +__bank(bank) char func_rom_bank2_d(char a , char b) +func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 + [94] phi() + [95] call func_rom_bank2_a + [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 + to:func_rom_bank2_d::@1 +func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d + [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 + to:func_rom_bank2_d::@return +func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 + [98] return to:@return -__bank(bank) char func_bank2_f(char a , char b) -func_bank2_f: scope:[func_bank2_f] from main::@11 - [97] phi() - [98] call func_bank1_b - [99] func_bank1_b::return#0 = func_bank1_b::return#1 - to:func_bank2_f::@1 -func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f - [100] func_bank2_f::return#0 = func_bank1_b::return#0 - to:func_bank2_f::@return -func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 - [101] return +__bank(bank) char func_rom_bank2_e(char a , char b) +func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 + [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) + [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) + [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + [102] call func_rom_bank2_b + [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 + to:func_rom_bank2_e::@1 +func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e + [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 + to:func_rom_bank2_e::@return +func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 + [105] return + to:@return + +__bank(bank) char func_rom_bank2_f(char a , char b) +func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 + [106] phi() + [107] call func_main_a + [108] func_main_a::return#1 = func_main_a::return#2 + to:func_rom_bank2_f::@1 +func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f + [109] func_rom_bank2_f::return#0 = func_main_a::return#1 + to:func_rom_bank2_f::@return +func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 + [110] return + to:@return + +char func_main_a(char a , char b) +func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 + [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) + [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) + [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + [114] call func_ram_bank1_e + [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + to:func_main_a::@1 +func_main_a::@1: scope:[func_main_a] from func_main_a + [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + to:func_main_a::@return +func_main_a::@return: scope:[func_main_a] from func_main_a::@1 + [117] return + to:@return + +char func_main_b(char a , char b) +func_main_b: scope:[func_main_b] from main::@13 + [118] phi() + [119] call func_rom_bank2_e + [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + to:func_main_b::@1 +func_main_b::@1: scope:[func_main_b] from func_main_b + [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + to:func_main_b::@return +func_main_b::@return: scope:[func_main_b] from func_main_b::@1 + [122] return to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.log b/src/test/ref/procedure-callingconvention-phi-bank-5.log index 1e374e133..7c7b8a77a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.log @@ -1,331 +1,389 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "procedure-callingconvention-phi-bank-5.ld" CONTROL FLOW GRAPH SSA -__bank(bank) char func_bank1_a(char a , char b) -func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main - func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_a::b#0, func_bank1_e/func_bank1_a::b#2, func_bank2_c/func_bank1_a::b#1, main/func_bank1_a::b#3 ) - func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_a::a#0, func_bank1_e/func_bank1_a::a#2, func_bank2_c/func_bank1_a::a#1, main/func_bank1_a::a#3 ) - func_bank1_a::$0 = func_bank1_a::a#4 + func_bank1_a::b#4 - func_bank1_a::return#0 = func_bank1_a::$0 - to:func_bank1_a::@return -func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a - func_bank1_a::return#6 = phi( func_bank1_a/func_bank1_a::return#0 ) - func_bank1_a::return#1 = func_bank1_a::return#6 +__bank(bank) char func_ram_bank1_a(char a , char b) +func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main + func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_a::b#0, func_rom_bank2_c/func_ram_bank1_a::b#1, main/func_ram_bank1_a::b#2 ) + func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_a::a#0, func_rom_bank2_c/func_ram_bank1_a::a#1, main/func_ram_bank1_a::a#2 ) + func_ram_bank1_a::$0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 + func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 + to:func_ram_bank1_a::@return +func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a + func_ram_bank1_a::return#5 = phi( func_ram_bank1_a/func_ram_bank1_a::return#0 ) + func_ram_bank1_a::return#1 = func_ram_bank1_a::return#5 return to:@return -__bank(bank) char func_bank1_c(char a , char b) -func_bank1_c: scope:[func_bank1_c] from main::@2 - func_bank1_c::b#1 = phi( main::@2/func_bank1_c::b#0 ) - func_bank1_c::a#1 = phi( main::@2/func_bank1_c::a#0 ) - func_bank1_a::a#0 = func_bank1_c::a#1 - func_bank1_a::b#0 = func_bank1_c::b#1 - call func_bank1_a - func_bank1_a::return#2 = func_bank1_a::return#1 - to:func_bank1_c::@1 -func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c - func_bank1_a::return#7 = phi( func_bank1_c/func_bank1_a::return#2 ) - func_bank1_c::$0 = func_bank1_a::return#7 - func_bank1_c::return#0 = func_bank1_c::$0 - to:func_bank1_c::@return -func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 - func_bank1_c::return#3 = phi( func_bank1_c::@1/func_bank1_c::return#0 ) - func_bank1_c::return#1 = func_bank1_c::return#3 +char func_ram_bank1_b(char a , char b) +func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 + func_ram_bank1_b::b#1 = phi( main::@1/func_ram_bank1_b::b#0 ) + func_ram_bank1_b::a#1 = phi( main::@1/func_ram_bank1_b::a#0 ) + func_ram_bank1_b::$0 = func_ram_bank1_b::a#1 + func_ram_bank1_b::b#1 + func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 + to:func_ram_bank1_b::@return +func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b + func_ram_bank1_b::return#3 = phi( func_ram_bank1_b/func_ram_bank1_b::return#0 ) + func_ram_bank1_b::return#1 = func_ram_bank1_b::return#3 return to:@return -__bank(bank) char func_bank1_d(char a , char b) -func_bank1_d: scope:[func_bank1_d] from main::@3 - func_bank1_d::b#1 = phi( main::@3/func_bank1_d::b#0 ) - func_bank1_d::a#1 = phi( main::@3/func_bank1_d::a#0 ) - func_bank2_a::a#0 = func_bank1_d::a#1 - func_bank2_a::b#0 = func_bank1_d::b#1 - call func_bank2_a - func_bank2_a::return#0 = func_bank2_a::return#2 - to:func_bank1_d::@1 -func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d - func_bank2_a::return#6 = phi( func_bank1_d/func_bank2_a::return#0 ) - func_bank1_d::$0 = func_bank2_a::return#6 - func_bank1_d::return#0 = func_bank1_d::$0 - to:func_bank1_d::@return -func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 - func_bank1_d::return#3 = phi( func_bank1_d::@1/func_bank1_d::return#0 ) - func_bank1_d::return#1 = func_bank1_d::return#3 +__bank(bank) char func_ram_bank1_c(char a , char b) +func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 + func_ram_bank1_c::b#1 = phi( main::@2/func_ram_bank1_c::b#0 ) + func_ram_bank1_c::a#1 = phi( main::@2/func_ram_bank1_c::a#0 ) + func_ram_bank1_a::a#0 = func_ram_bank1_c::a#1 + func_ram_bank1_a::b#0 = func_ram_bank1_c::b#1 + call func_ram_bank1_a + func_ram_bank1_a::return#2 = func_ram_bank1_a::return#1 + to:func_ram_bank1_c::@1 +func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c + func_ram_bank1_a::return#6 = phi( func_ram_bank1_c/func_ram_bank1_a::return#2 ) + func_ram_bank1_c::$0 = func_ram_bank1_a::return#6 + func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 + to:func_ram_bank1_c::@return +func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 + func_ram_bank1_c::return#3 = phi( func_ram_bank1_c::@1/func_ram_bank1_c::return#0 ) + func_ram_bank1_c::return#1 = func_ram_bank1_c::return#3 return to:@return -__bank(bank) char func_bank2_a(char a , char b) -func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 - func_bank2_a::b#4 = phi( func_bank1_d/func_bank2_a::b#0, func_bank1_f/func_bank2_a::b#2, func_bank2_d/func_bank2_a::b#1, main::@6/func_bank2_a::b#3 ) - func_bank2_a::a#4 = phi( func_bank1_d/func_bank2_a::a#0, func_bank1_f/func_bank2_a::a#2, func_bank2_d/func_bank2_a::a#1, main::@6/func_bank2_a::a#3 ) - func_bank2_a::$0 = func_bank2_a::a#4 + func_bank2_a::b#4 - func_bank2_a::return#1 = func_bank2_a::$0 - to:func_bank2_a::@return -func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a - func_bank2_a::return#7 = phi( func_bank2_a/func_bank2_a::return#1 ) - func_bank2_a::return#2 = func_bank2_a::return#7 +__bank(bank) char func_ram_bank1_d(char a , char b) +func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 + func_ram_bank1_d::b#1 = phi( main::@3/func_ram_bank1_d::b#0 ) + func_ram_bank1_d::a#1 = phi( main::@3/func_ram_bank1_d::a#0 ) + func_rom_bank2_a::a#0 = func_ram_bank1_d::a#1 + func_rom_bank2_a::b#0 = func_ram_bank1_d::b#1 + call func_rom_bank2_a + func_rom_bank2_a::return#0 = func_rom_bank2_a::return#2 + to:func_ram_bank1_d::@1 +func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d + func_rom_bank2_a::return#5 = phi( func_ram_bank1_d/func_rom_bank2_a::return#0 ) + func_ram_bank1_d::$0 = func_rom_bank2_a::return#5 + func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 + to:func_ram_bank1_d::@return +func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 + func_ram_bank1_d::return#3 = phi( func_ram_bank1_d::@1/func_ram_bank1_d::return#0 ) + func_ram_bank1_d::return#1 = func_ram_bank1_d::return#3 return to:@return -__bank(bank) char func_bank2_c(char a , char b) -func_bank2_c: scope:[func_bank2_c] from main::@8 - func_bank2_c::b#1 = phi( main::@8/func_bank2_c::b#0 ) - func_bank2_c::a#1 = phi( main::@8/func_bank2_c::a#0 ) - func_bank1_a::a#1 = func_bank2_c::a#1 - func_bank1_a::b#1 = func_bank2_c::b#1 - call func_bank1_a - func_bank1_a::return#3 = func_bank1_a::return#1 - to:func_bank2_c::@1 -func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c - func_bank1_a::return#8 = phi( func_bank2_c/func_bank1_a::return#3 ) - func_bank2_c::$0 = func_bank1_a::return#8 - func_bank2_c::return#0 = func_bank2_c::$0 - to:func_bank2_c::@return -func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 - func_bank2_c::return#3 = phi( func_bank2_c::@1/func_bank2_c::return#0 ) - func_bank2_c::return#1 = func_bank2_c::return#3 +__bank(bank) char func_ram_bank1_e(char a , char b) +func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 + func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/func_ram_bank1_e::b#1 ) + func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/func_ram_bank1_e::a#1 ) + func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + call func_rom_bank2_b + func_rom_bank2_b::return#0 = func_rom_bank2_b::return#2 + to:func_ram_bank1_e::@1 +func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e + func_rom_bank2_b::return#5 = phi( func_ram_bank1_e/func_rom_bank2_b::return#0 ) + func_ram_bank1_e::$0 = func_rom_bank2_b::return#5 + func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 + to:func_ram_bank1_e::@return +func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 + func_ram_bank1_e::return#4 = phi( func_ram_bank1_e::@1/func_ram_bank1_e::return#0 ) + func_ram_bank1_e::return#1 = func_ram_bank1_e::return#4 return to:@return -__bank(bank) char func_bank2_d(char a , char b) -func_bank2_d: scope:[func_bank2_d] from main::@9 - func_bank2_d::b#1 = phi( main::@9/func_bank2_d::b#0 ) - func_bank2_d::a#1 = phi( main::@9/func_bank2_d::a#0 ) - func_bank2_a::a#1 = func_bank2_d::a#1 - func_bank2_a::b#1 = func_bank2_d::b#1 - call func_bank2_a - func_bank2_a::return#3 = func_bank2_a::return#2 - to:func_bank2_d::@1 -func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d - func_bank2_a::return#8 = phi( func_bank2_d/func_bank2_a::return#3 ) - func_bank2_d::$0 = func_bank2_a::return#8 - func_bank2_d::return#0 = func_bank2_d::$0 - to:func_bank2_d::@return -func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 - func_bank2_d::return#3 = phi( func_bank2_d::@1/func_bank2_d::return#0 ) - func_bank2_d::return#1 = func_bank2_d::return#3 +__bank(bank) char func_ram_bank1_f(char a , char b) +func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 + func_ram_bank1_f::b#1 = phi( main::@5/func_ram_bank1_f::b#0 ) + func_ram_bank1_f::a#1 = phi( main::@5/func_ram_bank1_f::a#0 ) + func_main_a::a#0 = func_ram_bank1_f::a#1 + func_main_a::b#0 = func_ram_bank1_f::b#1 + call func_main_a + func_main_a::return#0 = func_main_a::return#3 + to:func_ram_bank1_f::@1 +func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f + func_main_a::return#5 = phi( func_ram_bank1_f/func_main_a::return#0 ) + func_ram_bank1_f::$0 = func_main_a::return#5 + func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 + to:func_ram_bank1_f::@return +func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 + func_ram_bank1_f::return#3 = phi( func_ram_bank1_f::@1/func_ram_bank1_f::return#0 ) + func_ram_bank1_f::return#1 = func_ram_bank1_f::return#3 return to:@return -__bank(bank) char func_bank2_e(char a , char b) -func_bank2_e: scope:[func_bank2_e] from main::@10 - func_bank2_e::b#1 = phi( main::@10/func_bank2_e::b#0 ) - func_bank2_e::a#1 = phi( main::@10/func_bank2_e::a#0 ) - func_bank2_b::a#0 = func_bank2_e::a#1 - func_bank2_b::b#0 = func_bank2_e::b#1 - call func_bank2_b - func_bank2_b::return#0 = func_bank2_b::return#2 - to:func_bank2_e::@1 -func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e - func_bank2_b::return#4 = phi( func_bank2_e/func_bank2_b::return#0 ) - func_bank2_e::$0 = func_bank2_b::return#4 - func_bank2_e::return#0 = func_bank2_e::$0 - to:func_bank2_e::@return -func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 - func_bank2_e::return#3 = phi( func_bank2_e::@1/func_bank2_e::return#0 ) - func_bank2_e::return#1 = func_bank2_e::return#3 +__bank(bank) char func_rom_bank2_a(char a , char b) +func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 + func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_rom_bank2_a::b#0, func_rom_bank2_d/func_rom_bank2_a::b#1, main::@6/func_rom_bank2_a::b#2 ) + func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_rom_bank2_a::a#0, func_rom_bank2_d/func_rom_bank2_a::a#1, main::@6/func_rom_bank2_a::a#2 ) + func_rom_bank2_a::$0 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 + func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 + to:func_rom_bank2_a::@return +func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a + func_rom_bank2_a::return#6 = phi( func_rom_bank2_a/func_rom_bank2_a::return#1 ) + func_rom_bank2_a::return#2 = func_rom_bank2_a::return#6 return to:@return -__bank(bank) char func_bank2_f(char a , char b) -func_bank2_f: scope:[func_bank2_f] from main::@11 - func_bank2_f::b#1 = phi( main::@11/func_bank2_f::b#0 ) - func_bank2_f::a#1 = phi( main::@11/func_bank2_f::a#0 ) - func_bank1_b::a#0 = func_bank2_f::a#1 - func_bank1_b::b#0 = func_bank2_f::b#1 - call func_bank1_b - func_bank1_b::return#0 = func_bank1_b::return#2 - to:func_bank2_f::@1 -func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f - func_bank1_b::return#4 = phi( func_bank2_f/func_bank1_b::return#0 ) - func_bank2_f::$0 = func_bank1_b::return#4 - func_bank2_f::return#0 = func_bank2_f::$0 - to:func_bank2_f::@return -func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 - func_bank2_f::return#3 = phi( func_bank2_f::@1/func_bank2_f::return#0 ) - func_bank2_f::return#1 = func_bank2_f::return#3 +char func_rom_bank2_b(char a , char b) +func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 + func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/func_rom_bank2_b::b#2 ) + func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/func_rom_bank2_b::a#2 ) + func_rom_bank2_b::$0 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 + func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 + to:func_rom_bank2_b::@return +func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b + func_rom_bank2_b::return#6 = phi( func_rom_bank2_b/func_rom_bank2_b::return#1 ) + func_rom_bank2_b::return#2 = func_rom_bank2_b::return#6 return to:@return -char func_bank1_b(char a , char b) -func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 - func_bank1_b::b#2 = phi( func_bank2_f/func_bank1_b::b#0, main::@1/func_bank1_b::b#1 ) - func_bank1_b::a#2 = phi( func_bank2_f/func_bank1_b::a#0, main::@1/func_bank1_b::a#1 ) - func_bank1_b::$0 = func_bank1_b::a#2 + func_bank1_b::b#2 - func_bank1_b::return#1 = func_bank1_b::$0 - to:func_bank1_b::@return -func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b - func_bank1_b::return#5 = phi( func_bank1_b/func_bank1_b::return#1 ) - func_bank1_b::return#2 = func_bank1_b::return#5 +__bank(bank) char func_rom_bank2_c(char a , char b) +func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 + func_rom_bank2_c::b#1 = phi( main::@8/func_rom_bank2_c::b#0 ) + func_rom_bank2_c::a#1 = phi( main::@8/func_rom_bank2_c::a#0 ) + func_ram_bank1_a::a#1 = func_rom_bank2_c::a#1 + func_ram_bank1_a::b#1 = func_rom_bank2_c::b#1 + call func_ram_bank1_a + func_ram_bank1_a::return#3 = func_ram_bank1_a::return#1 + to:func_rom_bank2_c::@1 +func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c + func_ram_bank1_a::return#7 = phi( func_rom_bank2_c/func_ram_bank1_a::return#3 ) + func_rom_bank2_c::$0 = func_ram_bank1_a::return#7 + func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 + to:func_rom_bank2_c::@return +func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 + func_rom_bank2_c::return#3 = phi( func_rom_bank2_c::@1/func_rom_bank2_c::return#0 ) + func_rom_bank2_c::return#1 = func_rom_bank2_c::return#3 return to:@return -char func_bank2_b(char a , char b) -func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 - func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_b::b#0, main::@7/func_bank2_b::b#1 ) - func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_b::a#0, main::@7/func_bank2_b::a#1 ) - func_bank2_b::$0 = func_bank2_b::a#2 + func_bank2_b::b#2 - func_bank2_b::return#1 = func_bank2_b::$0 - to:func_bank2_b::@return -func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b - func_bank2_b::return#5 = phi( func_bank2_b/func_bank2_b::return#1 ) - func_bank2_b::return#2 = func_bank2_b::return#5 +__bank(bank) char func_rom_bank2_d(char a , char b) +func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 + func_rom_bank2_d::b#1 = phi( main::@9/func_rom_bank2_d::b#0 ) + func_rom_bank2_d::a#1 = phi( main::@9/func_rom_bank2_d::a#0 ) + func_rom_bank2_a::a#1 = func_rom_bank2_d::a#1 + func_rom_bank2_a::b#1 = func_rom_bank2_d::b#1 + call func_rom_bank2_a + func_rom_bank2_a::return#3 = func_rom_bank2_a::return#2 + to:func_rom_bank2_d::@1 +func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d + func_rom_bank2_a::return#7 = phi( func_rom_bank2_d/func_rom_bank2_a::return#3 ) + func_rom_bank2_d::$0 = func_rom_bank2_a::return#7 + func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 + to:func_rom_bank2_d::@return +func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 + func_rom_bank2_d::return#3 = phi( func_rom_bank2_d::@1/func_rom_bank2_d::return#0 ) + func_rom_bank2_d::return#1 = func_rom_bank2_d::return#3 return to:@return -char func_bank1_e(char a , char b) -func_bank1_e: scope:[func_bank1_e] from main::@4 - func_bank1_e::b#1 = phi( main::@4/func_bank1_e::b#0 ) - func_bank1_e::a#1 = phi( main::@4/func_bank1_e::a#0 ) - func_bank1_a::a#2 = func_bank1_e::a#1 - func_bank1_a::b#2 = func_bank1_e::b#1 - call func_bank1_a - func_bank1_a::return#4 = func_bank1_a::return#1 - to:func_bank1_e::@1 -func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e - func_bank1_a::return#9 = phi( func_bank1_e/func_bank1_a::return#4 ) - func_bank1_e::$0 = func_bank1_a::return#9 - func_bank1_e::return#0 = func_bank1_e::$0 - to:func_bank1_e::@return -func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 - func_bank1_e::return#3 = phi( func_bank1_e::@1/func_bank1_e::return#0 ) - func_bank1_e::return#1 = func_bank1_e::return#3 +__bank(bank) char func_rom_bank2_e(char a , char b) +func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 + func_rom_bank2_e::b#2 = phi( func_main_b/func_rom_bank2_e::b#0, main::@10/func_rom_bank2_e::b#1 ) + func_rom_bank2_e::a#2 = phi( func_main_b/func_rom_bank2_e::a#0, main::@10/func_rom_bank2_e::a#1 ) + func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + call func_rom_bank2_b + func_rom_bank2_b::return#3 = func_rom_bank2_b::return#2 + to:func_rom_bank2_e::@1 +func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e + func_rom_bank2_b::return#7 = phi( func_rom_bank2_e/func_rom_bank2_b::return#3 ) + func_rom_bank2_e::$0 = func_rom_bank2_b::return#7 + func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 + to:func_rom_bank2_e::@return +func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 + func_rom_bank2_e::return#4 = phi( func_rom_bank2_e::@1/func_rom_bank2_e::return#0 ) + func_rom_bank2_e::return#1 = func_rom_bank2_e::return#4 return to:@return -char func_bank1_f(char a , char b) -func_bank1_f: scope:[func_bank1_f] from main::@5 - func_bank1_f::b#1 = phi( main::@5/func_bank1_f::b#0 ) - func_bank1_f::a#1 = phi( main::@5/func_bank1_f::a#0 ) - func_bank2_a::a#2 = func_bank1_f::a#1 - func_bank2_a::b#2 = func_bank1_f::b#1 - call func_bank2_a - func_bank2_a::return#4 = func_bank2_a::return#2 - to:func_bank1_f::@1 -func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f - func_bank2_a::return#9 = phi( func_bank1_f/func_bank2_a::return#4 ) - func_bank1_f::$0 = func_bank2_a::return#9 - func_bank1_f::return#0 = func_bank1_f::$0 - to:func_bank1_f::@return -func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 - func_bank1_f::return#3 = phi( func_bank1_f::@1/func_bank1_f::return#0 ) - func_bank1_f::return#1 = func_bank1_f::return#3 +__bank(bank) char func_rom_bank2_f(char a , char b) +func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 + func_rom_bank2_f::b#1 = phi( main::@11/func_rom_bank2_f::b#0 ) + func_rom_bank2_f::a#1 = phi( main::@11/func_rom_bank2_f::a#0 ) + func_main_a::a#1 = func_rom_bank2_f::a#1 + func_main_a::b#1 = func_rom_bank2_f::b#1 + call func_main_a + func_main_a::return#1 = func_main_a::return#3 + to:func_rom_bank2_f::@1 +func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f + func_main_a::return#6 = phi( func_rom_bank2_f/func_main_a::return#1 ) + func_rom_bank2_f::$0 = func_main_a::return#6 + func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 + to:func_rom_bank2_f::@return +func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 + func_rom_bank2_f::return#3 = phi( func_rom_bank2_f::@1/func_rom_bank2_f::return#0 ) + func_rom_bank2_f::return#1 = func_rom_bank2_f::return#3 + return + to:@return + +char func_main_a(char a , char b) +func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 + func_main_a::b#3 = phi( func_ram_bank1_f/func_main_a::b#0, func_rom_bank2_f/func_main_a::b#1, main::@12/func_main_a::b#2 ) + func_main_a::a#3 = phi( func_ram_bank1_f/func_main_a::a#0, func_rom_bank2_f/func_main_a::a#1, main::@12/func_main_a::a#2 ) + func_ram_bank1_e::a#0 = func_main_a::a#3 + func_ram_bank1_e::b#0 = func_main_a::b#3 + call func_ram_bank1_e + func_ram_bank1_e::return#2 = func_ram_bank1_e::return#1 + to:func_main_a::@1 +func_main_a::@1: scope:[func_main_a] from func_main_a + func_ram_bank1_e::return#5 = phi( func_main_a/func_ram_bank1_e::return#2 ) + func_main_a::$0 = func_ram_bank1_e::return#5 + func_main_a::return#2 = func_main_a::$0 + to:func_main_a::@return +func_main_a::@return: scope:[func_main_a] from func_main_a::@1 + func_main_a::return#7 = phi( func_main_a::@1/func_main_a::return#2 ) + func_main_a::return#3 = func_main_a::return#7 + return + to:@return + +char func_main_b(char a , char b) +func_main_b: scope:[func_main_b] from main::@13 + func_main_b::b#1 = phi( main::@13/func_main_b::b#0 ) + func_main_b::a#1 = phi( main::@13/func_main_b::a#0 ) + func_rom_bank2_e::a#0 = func_main_b::a#1 + func_rom_bank2_e::b#0 = func_main_b::b#1 + call func_rom_bank2_e + func_rom_bank2_e::return#2 = func_rom_bank2_e::return#1 + to:func_main_b::@1 +func_main_b::@1: scope:[func_main_b] from func_main_b + func_rom_bank2_e::return#5 = phi( func_main_b/func_rom_bank2_e::return#2 ) + func_main_b::$0 = func_rom_bank2_e::return#5 + func_main_b::return#0 = func_main_b::$0 + to:func_main_b::@return +func_main_b::@return: scope:[func_main_b] from func_main_b::@1 + func_main_b::return#3 = phi( func_main_b::@1/func_main_b::return#0 ) + func_main_b::return#1 = func_main_b::return#3 return to:@return void main() main: scope:[main] from __start - func_bank1_a::a#3 = '0' - func_bank1_a::b#3 = 7 - call func_bank1_a - func_bank1_a::return#5 = func_bank1_a::return#1 + func_ram_bank1_a::a#2 = '0' + func_ram_bank1_a::b#2 = 7 + call func_ram_bank1_a + func_ram_bank1_a::return#4 = func_ram_bank1_a::return#1 to:main::@1 main::@1: scope:[main] from main - func_bank1_a::return#10 = phi( main/func_bank1_a::return#5 ) - main::$0 = func_bank1_a::return#10 + func_ram_bank1_a::return#8 = phi( main/func_ram_bank1_a::return#4 ) + main::$0 = func_ram_bank1_a::return#8 SCREEN[0] = main::$0 - func_bank1_b::a#1 = '0' - func_bank1_b::b#1 = 7 - call func_bank1_b - func_bank1_b::return#3 = func_bank1_b::return#2 + func_ram_bank1_b::a#0 = '0' + func_ram_bank1_b::b#0 = 7 + call func_ram_bank1_b + func_ram_bank1_b::return#2 = func_ram_bank1_b::return#1 to:main::@2 main::@2: scope:[main] from main::@1 - func_bank1_b::return#6 = phi( main::@1/func_bank1_b::return#3 ) - main::$1 = func_bank1_b::return#6 + func_ram_bank1_b::return#4 = phi( main::@1/func_ram_bank1_b::return#2 ) + main::$1 = func_ram_bank1_b::return#4 SCREEN[0] = main::$1 - func_bank1_c::a#0 = '0' - func_bank1_c::b#0 = 7 - call func_bank1_c - func_bank1_c::return#2 = func_bank1_c::return#1 + func_ram_bank1_c::a#0 = '0' + func_ram_bank1_c::b#0 = 7 + call func_ram_bank1_c + func_ram_bank1_c::return#2 = func_ram_bank1_c::return#1 to:main::@3 main::@3: scope:[main] from main::@2 - func_bank1_c::return#4 = phi( main::@2/func_bank1_c::return#2 ) - main::$2 = func_bank1_c::return#4 + func_ram_bank1_c::return#4 = phi( main::@2/func_ram_bank1_c::return#2 ) + main::$2 = func_ram_bank1_c::return#4 SCREEN[0] = main::$2 - func_bank1_d::a#0 = '0' - func_bank1_d::b#0 = 7 - call func_bank1_d - func_bank1_d::return#2 = func_bank1_d::return#1 + func_ram_bank1_d::a#0 = '0' + func_ram_bank1_d::b#0 = 7 + call func_ram_bank1_d + func_ram_bank1_d::return#2 = func_ram_bank1_d::return#1 to:main::@4 main::@4: scope:[main] from main::@3 - func_bank1_d::return#4 = phi( main::@3/func_bank1_d::return#2 ) - main::$3 = func_bank1_d::return#4 + func_ram_bank1_d::return#4 = phi( main::@3/func_ram_bank1_d::return#2 ) + main::$3 = func_ram_bank1_d::return#4 SCREEN[0] = main::$3 - func_bank1_e::a#0 = '0' - func_bank1_e::b#0 = 7 - call func_bank1_e - func_bank1_e::return#2 = func_bank1_e::return#1 + func_ram_bank1_e::a#1 = '0' + func_ram_bank1_e::b#1 = 7 + call func_ram_bank1_e + func_ram_bank1_e::return#3 = func_ram_bank1_e::return#1 to:main::@5 main::@5: scope:[main] from main::@4 - func_bank1_e::return#4 = phi( main::@4/func_bank1_e::return#2 ) - main::$4 = func_bank1_e::return#4 + func_ram_bank1_e::return#6 = phi( main::@4/func_ram_bank1_e::return#3 ) + main::$4 = func_ram_bank1_e::return#6 SCREEN[0] = main::$4 - func_bank1_f::a#0 = '0' - func_bank1_f::b#0 = 7 - call func_bank1_f - func_bank1_f::return#2 = func_bank1_f::return#1 + func_ram_bank1_f::a#0 = '0' + func_ram_bank1_f::b#0 = 7 + call func_ram_bank1_f + func_ram_bank1_f::return#2 = func_ram_bank1_f::return#1 to:main::@6 main::@6: scope:[main] from main::@5 - func_bank1_f::return#4 = phi( main::@5/func_bank1_f::return#2 ) - main::$5 = func_bank1_f::return#4 + func_ram_bank1_f::return#4 = phi( main::@5/func_ram_bank1_f::return#2 ) + main::$5 = func_ram_bank1_f::return#4 SCREEN[0] = main::$5 - func_bank2_a::a#3 = '0' - func_bank2_a::b#3 = 7 - call func_bank2_a - func_bank2_a::return#5 = func_bank2_a::return#2 + func_rom_bank2_a::a#2 = '0' + func_rom_bank2_a::b#2 = 7 + call func_rom_bank2_a + func_rom_bank2_a::return#4 = func_rom_bank2_a::return#2 to:main::@7 main::@7: scope:[main] from main::@6 - func_bank2_a::return#10 = phi( main::@6/func_bank2_a::return#5 ) - main::$6 = func_bank2_a::return#10 + func_rom_bank2_a::return#8 = phi( main::@6/func_rom_bank2_a::return#4 ) + main::$6 = func_rom_bank2_a::return#8 SCREEN[0] = main::$6 - func_bank2_b::a#1 = '0' - func_bank2_b::b#1 = 7 - call func_bank2_b - func_bank2_b::return#3 = func_bank2_b::return#2 + func_rom_bank2_b::a#2 = '0' + func_rom_bank2_b::b#2 = 7 + call func_rom_bank2_b + func_rom_bank2_b::return#4 = func_rom_bank2_b::return#2 to:main::@8 main::@8: scope:[main] from main::@7 - func_bank2_b::return#6 = phi( main::@7/func_bank2_b::return#3 ) - main::$7 = func_bank2_b::return#6 + func_rom_bank2_b::return#8 = phi( main::@7/func_rom_bank2_b::return#4 ) + main::$7 = func_rom_bank2_b::return#8 SCREEN[0] = main::$7 - func_bank2_c::a#0 = '0' - func_bank2_c::b#0 = 7 - call func_bank2_c - func_bank2_c::return#2 = func_bank2_c::return#1 + func_rom_bank2_c::a#0 = '0' + func_rom_bank2_c::b#0 = 7 + call func_rom_bank2_c + func_rom_bank2_c::return#2 = func_rom_bank2_c::return#1 to:main::@9 main::@9: scope:[main] from main::@8 - func_bank2_c::return#4 = phi( main::@8/func_bank2_c::return#2 ) - main::$8 = func_bank2_c::return#4 + func_rom_bank2_c::return#4 = phi( main::@8/func_rom_bank2_c::return#2 ) + main::$8 = func_rom_bank2_c::return#4 SCREEN[0] = main::$8 - func_bank2_d::a#0 = '0' - func_bank2_d::b#0 = 7 - call func_bank2_d - func_bank2_d::return#2 = func_bank2_d::return#1 + func_rom_bank2_d::a#0 = '0' + func_rom_bank2_d::b#0 = 7 + call func_rom_bank2_d + func_rom_bank2_d::return#2 = func_rom_bank2_d::return#1 to:main::@10 main::@10: scope:[main] from main::@9 - func_bank2_d::return#4 = phi( main::@9/func_bank2_d::return#2 ) - main::$9 = func_bank2_d::return#4 + func_rom_bank2_d::return#4 = phi( main::@9/func_rom_bank2_d::return#2 ) + main::$9 = func_rom_bank2_d::return#4 SCREEN[0] = main::$9 - func_bank2_e::a#0 = '0' - func_bank2_e::b#0 = 7 - call func_bank2_e - func_bank2_e::return#2 = func_bank2_e::return#1 + func_rom_bank2_e::a#1 = '0' + func_rom_bank2_e::b#1 = 7 + call func_rom_bank2_e + func_rom_bank2_e::return#3 = func_rom_bank2_e::return#1 to:main::@11 main::@11: scope:[main] from main::@10 - func_bank2_e::return#4 = phi( main::@10/func_bank2_e::return#2 ) - main::$10 = func_bank2_e::return#4 + func_rom_bank2_e::return#6 = phi( main::@10/func_rom_bank2_e::return#3 ) + main::$10 = func_rom_bank2_e::return#6 SCREEN[0] = main::$10 - func_bank2_f::a#0 = '0' - func_bank2_f::b#0 = 7 - call func_bank2_f - func_bank2_f::return#2 = func_bank2_f::return#1 + func_rom_bank2_f::a#0 = '0' + func_rom_bank2_f::b#0 = 7 + call func_rom_bank2_f + func_rom_bank2_f::return#2 = func_rom_bank2_f::return#1 to:main::@12 main::@12: scope:[main] from main::@11 - func_bank2_f::return#4 = phi( main::@11/func_bank2_f::return#2 ) - main::$11 = func_bank2_f::return#4 + func_rom_bank2_f::return#4 = phi( main::@11/func_rom_bank2_f::return#2 ) + main::$11 = func_rom_bank2_f::return#4 SCREEN[0] = main::$11 + func_main_a::a#2 = '0' + func_main_a::b#2 = 7 + call func_main_a + func_main_a::return#4 = func_main_a::return#3 + to:main::@13 +main::@13: scope:[main] from main::@12 + func_main_a::return#8 = phi( main::@12/func_main_a::return#4 ) + main::$12 = func_main_a::return#8 + SCREEN[0] = main::$12 + func_main_b::a#0 = '0' + func_main_b::b#0 = 7 + call func_main_b + func_main_b::return#2 = func_main_b::return#1 + to:main::@14 +main::@14: scope:[main] from main::@13 + func_main_b::return#4 = phi( main::@13/func_main_b::return#2 ) + main::$13 = func_main_b::return#4 + SCREEN[0] = main::$13 to:main::@return -main::@return: scope:[main] from main::@12 +main::@return: scope:[main] from main::@14 return to:@return @@ -342,211 +400,249 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::$0 -char func_bank1_a::a -char func_bank1_a::a#0 -char func_bank1_a::a#1 -char func_bank1_a::a#2 -char func_bank1_a::a#3 -char func_bank1_a::a#4 -char func_bank1_a::b -char func_bank1_a::b#0 -char func_bank1_a::b#1 -char func_bank1_a::b#2 -char func_bank1_a::b#3 -char func_bank1_a::b#4 -char func_bank1_a::return -char func_bank1_a::return#0 -char func_bank1_a::return#1 -char func_bank1_a::return#10 -char func_bank1_a::return#2 -char func_bank1_a::return#3 -char func_bank1_a::return#4 -char func_bank1_a::return#5 -char func_bank1_a::return#6 -char func_bank1_a::return#7 -char func_bank1_a::return#8 -char func_bank1_a::return#9 -char func_bank1_b(char a , char b) -char func_bank1_b::$0 -char func_bank1_b::a -char func_bank1_b::a#0 -char func_bank1_b::a#1 -char func_bank1_b::a#2 -char func_bank1_b::b -char func_bank1_b::b#0 -char func_bank1_b::b#1 -char func_bank1_b::b#2 -char func_bank1_b::return -char func_bank1_b::return#0 -char func_bank1_b::return#1 -char func_bank1_b::return#2 -char func_bank1_b::return#3 -char func_bank1_b::return#4 -char func_bank1_b::return#5 -char func_bank1_b::return#6 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::$0 -char func_bank1_c::a -char func_bank1_c::a#0 -char func_bank1_c::a#1 -char func_bank1_c::b -char func_bank1_c::b#0 -char func_bank1_c::b#1 -char func_bank1_c::return -char func_bank1_c::return#0 -char func_bank1_c::return#1 -char func_bank1_c::return#2 -char func_bank1_c::return#3 -char func_bank1_c::return#4 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::$0 -char func_bank1_d::a -char func_bank1_d::a#0 -char func_bank1_d::a#1 -char func_bank1_d::b -char func_bank1_d::b#0 -char func_bank1_d::b#1 -char func_bank1_d::return -char func_bank1_d::return#0 -char func_bank1_d::return#1 -char func_bank1_d::return#2 -char func_bank1_d::return#3 -char func_bank1_d::return#4 -char func_bank1_e(char a , char b) -char func_bank1_e::$0 -char func_bank1_e::a -char func_bank1_e::a#0 -char func_bank1_e::a#1 -char func_bank1_e::b -char func_bank1_e::b#0 -char func_bank1_e::b#1 -char func_bank1_e::return -char func_bank1_e::return#0 -char func_bank1_e::return#1 -char func_bank1_e::return#2 -char func_bank1_e::return#3 -char func_bank1_e::return#4 -char func_bank1_f(char a , char b) -char func_bank1_f::$0 -char func_bank1_f::a -char func_bank1_f::a#0 -char func_bank1_f::a#1 -char func_bank1_f::b -char func_bank1_f::b#0 -char func_bank1_f::b#1 -char func_bank1_f::return -char func_bank1_f::return#0 -char func_bank1_f::return#1 -char func_bank1_f::return#2 -char func_bank1_f::return#3 -char func_bank1_f::return#4 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::$0 -char func_bank2_a::a -char func_bank2_a::a#0 -char func_bank2_a::a#1 -char func_bank2_a::a#2 -char func_bank2_a::a#3 -char func_bank2_a::a#4 -char func_bank2_a::b -char func_bank2_a::b#0 -char func_bank2_a::b#1 -char func_bank2_a::b#2 -char func_bank2_a::b#3 -char func_bank2_a::b#4 -char func_bank2_a::return -char func_bank2_a::return#0 -char func_bank2_a::return#1 -char func_bank2_a::return#10 -char func_bank2_a::return#2 -char func_bank2_a::return#3 -char func_bank2_a::return#4 -char func_bank2_a::return#5 -char func_bank2_a::return#6 -char func_bank2_a::return#7 -char func_bank2_a::return#8 -char func_bank2_a::return#9 -char func_bank2_b(char a , char b) -char func_bank2_b::$0 -char func_bank2_b::a -char func_bank2_b::a#0 -char func_bank2_b::a#1 -char func_bank2_b::a#2 -char func_bank2_b::b -char func_bank2_b::b#0 -char func_bank2_b::b#1 -char func_bank2_b::b#2 -char func_bank2_b::return -char func_bank2_b::return#0 -char func_bank2_b::return#1 -char func_bank2_b::return#2 -char func_bank2_b::return#3 -char func_bank2_b::return#4 -char func_bank2_b::return#5 -char func_bank2_b::return#6 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::$0 -char func_bank2_c::a -char func_bank2_c::a#0 -char func_bank2_c::a#1 -char func_bank2_c::b -char func_bank2_c::b#0 -char func_bank2_c::b#1 -char func_bank2_c::return -char func_bank2_c::return#0 -char func_bank2_c::return#1 -char func_bank2_c::return#2 -char func_bank2_c::return#3 -char func_bank2_c::return#4 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::$0 -char func_bank2_d::a -char func_bank2_d::a#0 -char func_bank2_d::a#1 -char func_bank2_d::b -char func_bank2_d::b#0 -char func_bank2_d::b#1 -char func_bank2_d::return -char func_bank2_d::return#0 -char func_bank2_d::return#1 -char func_bank2_d::return#2 -char func_bank2_d::return#3 -char func_bank2_d::return#4 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::$0 -char func_bank2_e::a -char func_bank2_e::a#0 -char func_bank2_e::a#1 -char func_bank2_e::b -char func_bank2_e::b#0 -char func_bank2_e::b#1 -char func_bank2_e::return -char func_bank2_e::return#0 -char func_bank2_e::return#1 -char func_bank2_e::return#2 -char func_bank2_e::return#3 -char func_bank2_e::return#4 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::$0 -char func_bank2_f::a -char func_bank2_f::a#0 -char func_bank2_f::a#1 -char func_bank2_f::b -char func_bank2_f::b#0 -char func_bank2_f::b#1 -char func_bank2_f::return -char func_bank2_f::return#0 -char func_bank2_f::return#1 -char func_bank2_f::return#2 -char func_bank2_f::return#3 -char func_bank2_f::return#4 +char func_main_a(char a , char b) +char func_main_a::$0 +char func_main_a::a +char func_main_a::a#0 +char func_main_a::a#1 +char func_main_a::a#2 +char func_main_a::a#3 +char func_main_a::b +char func_main_a::b#0 +char func_main_a::b#1 +char func_main_a::b#2 +char func_main_a::b#3 +char func_main_a::return +char func_main_a::return#0 +char func_main_a::return#1 +char func_main_a::return#2 +char func_main_a::return#3 +char func_main_a::return#4 +char func_main_a::return#5 +char func_main_a::return#6 +char func_main_a::return#7 +char func_main_a::return#8 +char func_main_b(char a , char b) +char func_main_b::$0 +char func_main_b::a +char func_main_b::a#0 +char func_main_b::a#1 +char func_main_b::b +char func_main_b::b#0 +char func_main_b::b#1 +char func_main_b::return +char func_main_b::return#0 +char func_main_b::return#1 +char func_main_b::return#2 +char func_main_b::return#3 +char func_main_b::return#4 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::$0 +char func_ram_bank1_a::a +char func_ram_bank1_a::a#0 +char func_ram_bank1_a::a#1 +char func_ram_bank1_a::a#2 +char func_ram_bank1_a::a#3 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#0 +char func_ram_bank1_a::b#1 +char func_ram_bank1_a::b#2 +char func_ram_bank1_a::b#3 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 +char func_ram_bank1_a::return#1 +char func_ram_bank1_a::return#2 +char func_ram_bank1_a::return#3 +char func_ram_bank1_a::return#4 +char func_ram_bank1_a::return#5 +char func_ram_bank1_a::return#6 +char func_ram_bank1_a::return#7 +char func_ram_bank1_a::return#8 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::$0 +char func_ram_bank1_b::a +char func_ram_bank1_b::a#0 +char func_ram_bank1_b::a#1 +char func_ram_bank1_b::b +char func_ram_bank1_b::b#0 +char func_ram_bank1_b::b#1 +char func_ram_bank1_b::return +char func_ram_bank1_b::return#0 +char func_ram_bank1_b::return#1 +char func_ram_bank1_b::return#2 +char func_ram_bank1_b::return#3 +char func_ram_bank1_b::return#4 +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::$0 +char func_ram_bank1_c::a +char func_ram_bank1_c::a#0 +char func_ram_bank1_c::a#1 +char func_ram_bank1_c::b +char func_ram_bank1_c::b#0 +char func_ram_bank1_c::b#1 +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 +char func_ram_bank1_c::return#1 +char func_ram_bank1_c::return#2 +char func_ram_bank1_c::return#3 +char func_ram_bank1_c::return#4 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::$0 +char func_ram_bank1_d::a +char func_ram_bank1_d::a#0 +char func_ram_bank1_d::a#1 +char func_ram_bank1_d::b +char func_ram_bank1_d::b#0 +char func_ram_bank1_d::b#1 +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 +char func_ram_bank1_d::return#1 +char func_ram_bank1_d::return#2 +char func_ram_bank1_d::return#3 +char func_ram_bank1_d::return#4 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::$0 +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 +char func_ram_bank1_e::a#1 +char func_ram_bank1_e::a#2 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 +char func_ram_bank1_e::b#1 +char func_ram_bank1_e::b#2 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 +char func_ram_bank1_e::return#1 +char func_ram_bank1_e::return#2 +char func_ram_bank1_e::return#3 +char func_ram_bank1_e::return#4 +char func_ram_bank1_e::return#5 +char func_ram_bank1_e::return#6 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::$0 +char func_ram_bank1_f::a +char func_ram_bank1_f::a#0 +char func_ram_bank1_f::a#1 +char func_ram_bank1_f::b +char func_ram_bank1_f::b#0 +char func_ram_bank1_f::b#1 +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 +char func_ram_bank1_f::return#1 +char func_ram_bank1_f::return#2 +char func_ram_bank1_f::return#3 +char func_ram_bank1_f::return#4 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::$0 +char func_rom_bank2_a::a +char func_rom_bank2_a::a#0 +char func_rom_bank2_a::a#1 +char func_rom_bank2_a::a#2 +char func_rom_bank2_a::a#3 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#0 +char func_rom_bank2_a::b#1 +char func_rom_bank2_a::b#2 +char func_rom_bank2_a::b#3 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 +char func_rom_bank2_a::return#1 +char func_rom_bank2_a::return#2 +char func_rom_bank2_a::return#3 +char func_rom_bank2_a::return#4 +char func_rom_bank2_a::return#5 +char func_rom_bank2_a::return#6 +char func_rom_bank2_a::return#7 +char func_rom_bank2_a::return#8 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::$0 +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 +char func_rom_bank2_b::a#1 +char func_rom_bank2_b::a#2 +char func_rom_bank2_b::a#3 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 +char func_rom_bank2_b::b#1 +char func_rom_bank2_b::b#2 +char func_rom_bank2_b::b#3 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 +char func_rom_bank2_b::return#1 +char func_rom_bank2_b::return#2 +char func_rom_bank2_b::return#3 +char func_rom_bank2_b::return#4 +char func_rom_bank2_b::return#5 +char func_rom_bank2_b::return#6 +char func_rom_bank2_b::return#7 +char func_rom_bank2_b::return#8 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::$0 +char func_rom_bank2_c::a +char func_rom_bank2_c::a#0 +char func_rom_bank2_c::a#1 +char func_rom_bank2_c::b +char func_rom_bank2_c::b#0 +char func_rom_bank2_c::b#1 +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 +char func_rom_bank2_c::return#1 +char func_rom_bank2_c::return#2 +char func_rom_bank2_c::return#3 +char func_rom_bank2_c::return#4 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::$0 +char func_rom_bank2_d::a +char func_rom_bank2_d::a#0 +char func_rom_bank2_d::a#1 +char func_rom_bank2_d::b +char func_rom_bank2_d::b#0 +char func_rom_bank2_d::b#1 +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 +char func_rom_bank2_d::return#1 +char func_rom_bank2_d::return#2 +char func_rom_bank2_d::return#3 +char func_rom_bank2_d::return#4 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::$0 +char func_rom_bank2_e::a +char func_rom_bank2_e::a#0 +char func_rom_bank2_e::a#1 +char func_rom_bank2_e::a#2 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#0 +char func_rom_bank2_e::b#1 +char func_rom_bank2_e::b#2 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 +char func_rom_bank2_e::return#1 +char func_rom_bank2_e::return#2 +char func_rom_bank2_e::return#3 +char func_rom_bank2_e::return#4 +char func_rom_bank2_e::return#5 +char func_rom_bank2_e::return#6 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::$0 +char func_rom_bank2_f::a +char func_rom_bank2_f::a#0 +char func_rom_bank2_f::a#1 +char func_rom_bank2_f::b +char func_rom_bank2_f::b#0 +char func_rom_bank2_f::b#1 +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 +char func_rom_bank2_f::return#1 +char func_rom_bank2_f::return#2 +char func_rom_bank2_f::return#3 +char func_rom_bank2_f::return#4 void main() char main::$0 char main::$1 char main::$10 char main::$11 +char main::$12 +char main::$13 char main::$2 char main::$3 char main::$4 @@ -556,43 +652,49 @@ char main::$7 char main::$8 char main::$9 -Adding number conversion cast (unumber) 7 in func_bank1_a::b#3 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_a::b#2 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Adding number conversion cast (unumber) 7 in func_bank1_b::b#1 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_b::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$1 -Adding number conversion cast (unumber) 7 in func_bank1_c::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_c::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$2 -Adding number conversion cast (unumber) 7 in func_bank1_d::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_d::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$3 -Adding number conversion cast (unumber) 7 in func_bank1_e::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_e::b#1 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$4 -Adding number conversion cast (unumber) 7 in func_bank1_f::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_f::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$5 -Adding number conversion cast (unumber) 7 in func_bank2_a::b#3 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_a::b#2 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$6 -Adding number conversion cast (unumber) 7 in func_bank2_b::b#1 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_b::b#2 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$7 -Adding number conversion cast (unumber) 7 in func_bank2_c::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_c::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$8 -Adding number conversion cast (unumber) 7 in func_bank2_d::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_d::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$9 -Adding number conversion cast (unumber) 7 in func_bank2_e::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_e::b#1 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$10 -Adding number conversion cast (unumber) 7 in func_bank2_f::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_f::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$11 +Adding number conversion cast (unumber) 7 in func_main_a::b#2 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$12 +Adding number conversion cast (unumber) 7 in func_main_b::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$13 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast func_bank1_a::b#3 = (unumber)7 -Inlining cast func_bank1_b::b#1 = (unumber)7 -Inlining cast func_bank1_c::b#0 = (unumber)7 -Inlining cast func_bank1_d::b#0 = (unumber)7 -Inlining cast func_bank1_e::b#0 = (unumber)7 -Inlining cast func_bank1_f::b#0 = (unumber)7 -Inlining cast func_bank2_a::b#3 = (unumber)7 -Inlining cast func_bank2_b::b#1 = (unumber)7 -Inlining cast func_bank2_c::b#0 = (unumber)7 -Inlining cast func_bank2_d::b#0 = (unumber)7 -Inlining cast func_bank2_e::b#0 = (unumber)7 -Inlining cast func_bank2_f::b#0 = (unumber)7 +Inlining cast func_ram_bank1_a::b#2 = (unumber)7 +Inlining cast func_ram_bank1_b::b#0 = (unumber)7 +Inlining cast func_ram_bank1_c::b#0 = (unumber)7 +Inlining cast func_ram_bank1_d::b#0 = (unumber)7 +Inlining cast func_ram_bank1_e::b#1 = (unumber)7 +Inlining cast func_ram_bank1_f::b#0 = (unumber)7 +Inlining cast func_rom_bank2_a::b#2 = (unumber)7 +Inlining cast func_rom_bank2_b::b#2 = (unumber)7 +Inlining cast func_rom_bank2_c::b#0 = (unumber)7 +Inlining cast func_rom_bank2_d::b#0 = (unumber)7 +Inlining cast func_rom_bank2_e::b#1 = (unumber)7 +Inlining cast func_rom_bank2_f::b#0 = (unumber)7 +Inlining cast func_main_a::b#2 = (unumber)7 +Inlining cast func_main_b::b#0 = (unumber)7 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 @@ -619,6 +721,10 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 @@ -644,519 +750,622 @@ Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias func_bank1_a::return#0 = func_bank1_a::$0 func_bank1_a::return#6 func_bank1_a::return#1 -Alias func_bank1_a::return#2 = func_bank1_a::return#7 -Alias func_bank1_c::return#0 = func_bank1_c::$0 func_bank1_c::return#3 func_bank1_c::return#1 -Alias func_bank2_a::return#0 = func_bank2_a::return#6 -Alias func_bank1_d::return#0 = func_bank1_d::$0 func_bank1_d::return#3 func_bank1_d::return#1 -Alias func_bank2_a::return#1 = func_bank2_a::$0 func_bank2_a::return#7 func_bank2_a::return#2 -Alias func_bank1_a::return#3 = func_bank1_a::return#8 -Alias func_bank2_c::return#0 = func_bank2_c::$0 func_bank2_c::return#3 func_bank2_c::return#1 -Alias func_bank2_a::return#3 = func_bank2_a::return#8 -Alias func_bank2_d::return#0 = func_bank2_d::$0 func_bank2_d::return#3 func_bank2_d::return#1 -Alias func_bank2_b::return#0 = func_bank2_b::return#4 -Alias func_bank2_e::return#0 = func_bank2_e::$0 func_bank2_e::return#3 func_bank2_e::return#1 -Alias func_bank1_b::return#0 = func_bank1_b::return#4 -Alias func_bank2_f::return#0 = func_bank2_f::$0 func_bank2_f::return#3 func_bank2_f::return#1 -Alias func_bank1_b::return#1 = func_bank1_b::$0 func_bank1_b::return#5 func_bank1_b::return#2 -Alias func_bank2_b::return#1 = func_bank2_b::$0 func_bank2_b::return#5 func_bank2_b::return#2 -Alias func_bank1_a::return#4 = func_bank1_a::return#9 -Alias func_bank1_e::return#0 = func_bank1_e::$0 func_bank1_e::return#3 func_bank1_e::return#1 -Alias func_bank2_a::return#4 = func_bank2_a::return#9 -Alias func_bank1_f::return#0 = func_bank1_f::$0 func_bank1_f::return#3 func_bank1_f::return#1 -Alias func_bank1_a::return#10 = func_bank1_a::return#5 -Alias func_bank1_b::return#3 = func_bank1_b::return#6 -Alias func_bank1_c::return#2 = func_bank1_c::return#4 -Alias func_bank1_d::return#2 = func_bank1_d::return#4 -Alias func_bank1_e::return#2 = func_bank1_e::return#4 -Alias func_bank1_f::return#2 = func_bank1_f::return#4 -Alias func_bank2_a::return#10 = func_bank2_a::return#5 -Alias func_bank2_b::return#3 = func_bank2_b::return#6 -Alias func_bank2_c::return#2 = func_bank2_c::return#4 -Alias func_bank2_d::return#2 = func_bank2_d::return#4 -Alias func_bank2_e::return#2 = func_bank2_e::return#4 -Alias func_bank2_f::return#2 = func_bank2_f::return#4 +Alias func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 func_ram_bank1_a::return#5 func_ram_bank1_a::return#1 +Alias func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 func_ram_bank1_b::return#3 func_ram_bank1_b::return#1 +Alias func_ram_bank1_a::return#2 = func_ram_bank1_a::return#6 +Alias func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 func_ram_bank1_c::return#3 func_ram_bank1_c::return#1 +Alias func_rom_bank2_a::return#0 = func_rom_bank2_a::return#5 +Alias func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 func_ram_bank1_d::return#3 func_ram_bank1_d::return#1 +Alias func_rom_bank2_b::return#0 = func_rom_bank2_b::return#5 +Alias func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 func_ram_bank1_e::return#4 func_ram_bank1_e::return#1 +Alias func_main_a::return#0 = func_main_a::return#5 +Alias func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 func_ram_bank1_f::return#3 func_ram_bank1_f::return#1 +Alias func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 func_rom_bank2_a::return#6 func_rom_bank2_a::return#2 +Alias func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 func_rom_bank2_b::return#6 func_rom_bank2_b::return#2 +Alias func_ram_bank1_a::return#3 = func_ram_bank1_a::return#7 +Alias func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 func_rom_bank2_c::return#3 func_rom_bank2_c::return#1 +Alias func_rom_bank2_a::return#3 = func_rom_bank2_a::return#7 +Alias func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 func_rom_bank2_d::return#3 func_rom_bank2_d::return#1 +Alias func_rom_bank2_b::return#3 = func_rom_bank2_b::return#7 +Alias func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 func_rom_bank2_e::return#4 func_rom_bank2_e::return#1 +Alias func_main_a::return#1 = func_main_a::return#6 +Alias func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 func_rom_bank2_f::return#3 func_rom_bank2_f::return#1 +Alias func_ram_bank1_e::return#2 = func_ram_bank1_e::return#5 +Alias func_main_a::return#2 = func_main_a::$0 func_main_a::return#7 func_main_a::return#3 +Alias func_rom_bank2_e::return#2 = func_rom_bank2_e::return#5 +Alias func_main_b::return#0 = func_main_b::$0 func_main_b::return#3 func_main_b::return#1 +Alias func_ram_bank1_a::return#4 = func_ram_bank1_a::return#8 +Alias func_ram_bank1_b::return#2 = func_ram_bank1_b::return#4 +Alias func_ram_bank1_c::return#2 = func_ram_bank1_c::return#4 +Alias func_ram_bank1_d::return#2 = func_ram_bank1_d::return#4 +Alias func_ram_bank1_e::return#3 = func_ram_bank1_e::return#6 +Alias func_ram_bank1_f::return#2 = func_ram_bank1_f::return#4 +Alias func_rom_bank2_a::return#4 = func_rom_bank2_a::return#8 +Alias func_rom_bank2_b::return#4 = func_rom_bank2_b::return#8 +Alias func_rom_bank2_c::return#2 = func_rom_bank2_c::return#4 +Alias func_rom_bank2_d::return#2 = func_rom_bank2_d::return#4 +Alias func_rom_bank2_e::return#3 = func_rom_bank2_e::return#6 +Alias func_rom_bank2_f::return#2 = func_rom_bank2_f::return#4 +Alias func_main_a::return#4 = func_main_a::return#8 +Alias func_main_b::return#2 = func_main_b::return#4 Successful SSA optimization Pass2AliasElimination -Identical Phi Values func_bank1_c::a#1 func_bank1_c::a#0 -Identical Phi Values func_bank1_c::b#1 func_bank1_c::b#0 -Identical Phi Values func_bank1_d::a#1 func_bank1_d::a#0 -Identical Phi Values func_bank1_d::b#1 func_bank1_d::b#0 -Identical Phi Values func_bank2_c::a#1 func_bank2_c::a#0 -Identical Phi Values func_bank2_c::b#1 func_bank2_c::b#0 -Identical Phi Values func_bank2_d::a#1 func_bank2_d::a#0 -Identical Phi Values func_bank2_d::b#1 func_bank2_d::b#0 -Identical Phi Values func_bank2_e::a#1 func_bank2_e::a#0 -Identical Phi Values func_bank2_e::b#1 func_bank2_e::b#0 -Identical Phi Values func_bank2_f::a#1 func_bank2_f::a#0 -Identical Phi Values func_bank2_f::b#1 func_bank2_f::b#0 -Identical Phi Values func_bank1_e::a#1 func_bank1_e::a#0 -Identical Phi Values func_bank1_e::b#1 func_bank1_e::b#0 -Identical Phi Values func_bank1_f::a#1 func_bank1_f::a#0 -Identical Phi Values func_bank1_f::b#1 func_bank1_f::b#0 +Identical Phi Values func_ram_bank1_b::a#1 func_ram_bank1_b::a#0 +Identical Phi Values func_ram_bank1_b::b#1 func_ram_bank1_b::b#0 +Identical Phi Values func_ram_bank1_c::a#1 func_ram_bank1_c::a#0 +Identical Phi Values func_ram_bank1_c::b#1 func_ram_bank1_c::b#0 +Identical Phi Values func_ram_bank1_d::a#1 func_ram_bank1_d::a#0 +Identical Phi Values func_ram_bank1_d::b#1 func_ram_bank1_d::b#0 +Identical Phi Values func_ram_bank1_f::a#1 func_ram_bank1_f::a#0 +Identical Phi Values func_ram_bank1_f::b#1 func_ram_bank1_f::b#0 +Identical Phi Values func_rom_bank2_c::a#1 func_rom_bank2_c::a#0 +Identical Phi Values func_rom_bank2_c::b#1 func_rom_bank2_c::b#0 +Identical Phi Values func_rom_bank2_d::a#1 func_rom_bank2_d::a#0 +Identical Phi Values func_rom_bank2_d::b#1 func_rom_bank2_d::b#0 +Identical Phi Values func_rom_bank2_f::a#1 func_rom_bank2_f::a#0 +Identical Phi Values func_rom_bank2_f::b#1 func_rom_bank2_f::b#0 +Identical Phi Values func_main_b::a#1 func_main_b::a#0 +Identical Phi Values func_main_b::b#1 func_main_b::b#0 Successful SSA optimization Pass2IdenticalPhiElimination -Constant func_bank1_a::a#3 = '0' -Constant func_bank1_a::b#3 = 7 -Constant func_bank1_b::a#1 = '0' -Constant func_bank1_b::b#1 = 7 -Constant func_bank1_c::a#0 = '0' -Constant func_bank1_c::b#0 = 7 -Constant func_bank1_d::a#0 = '0' -Constant func_bank1_d::b#0 = 7 -Constant func_bank1_e::a#0 = '0' -Constant func_bank1_e::b#0 = 7 -Constant func_bank1_f::a#0 = '0' -Constant func_bank1_f::b#0 = 7 -Constant func_bank2_a::a#3 = '0' -Constant func_bank2_a::b#3 = 7 -Constant func_bank2_b::a#1 = '0' -Constant func_bank2_b::b#1 = 7 -Constant func_bank2_c::a#0 = '0' -Constant func_bank2_c::b#0 = 7 -Constant func_bank2_d::a#0 = '0' -Constant func_bank2_d::b#0 = 7 -Constant func_bank2_e::a#0 = '0' -Constant func_bank2_e::b#0 = 7 -Constant func_bank2_f::a#0 = '0' -Constant func_bank2_f::b#0 = 7 +Constant func_ram_bank1_a::a#2 = '0' +Constant func_ram_bank1_a::b#2 = 7 +Constant func_ram_bank1_b::a#0 = '0' +Constant func_ram_bank1_b::b#0 = 7 +Constant func_ram_bank1_c::a#0 = '0' +Constant func_ram_bank1_c::b#0 = 7 +Constant func_ram_bank1_d::a#0 = '0' +Constant func_ram_bank1_d::b#0 = 7 +Constant func_ram_bank1_e::a#1 = '0' +Constant func_ram_bank1_e::b#1 = 7 +Constant func_ram_bank1_f::a#0 = '0' +Constant func_ram_bank1_f::b#0 = 7 +Constant func_rom_bank2_a::a#2 = '0' +Constant func_rom_bank2_a::b#2 = 7 +Constant func_rom_bank2_b::a#2 = '0' +Constant func_rom_bank2_b::b#2 = 7 +Constant func_rom_bank2_c::a#0 = '0' +Constant func_rom_bank2_c::b#0 = 7 +Constant func_rom_bank2_d::a#0 = '0' +Constant func_rom_bank2_d::b#0 = 7 +Constant func_rom_bank2_e::a#1 = '0' +Constant func_rom_bank2_e::b#1 = 7 +Constant func_rom_bank2_f::a#0 = '0' +Constant func_rom_bank2_f::b#0 = 7 +Constant func_main_a::a#2 = '0' +Constant func_main_a::b#2 = 7 +Constant func_main_b::a#0 = '0' +Constant func_main_b::b#0 = 7 Successful SSA optimization Pass2ConstantIdentification -Constant func_bank1_a::a#0 = func_bank1_c::a#0 -Constant func_bank1_a::b#0 = func_bank1_c::b#0 -Constant func_bank2_a::a#0 = func_bank1_d::a#0 -Constant func_bank2_a::b#0 = func_bank1_d::b#0 -Constant func_bank1_a::a#1 = func_bank2_c::a#0 -Constant func_bank1_a::b#1 = func_bank2_c::b#0 -Constant func_bank2_a::a#1 = func_bank2_d::a#0 -Constant func_bank2_a::b#1 = func_bank2_d::b#0 -Constant func_bank2_b::a#0 = func_bank2_e::a#0 -Constant func_bank2_b::b#0 = func_bank2_e::b#0 -Constant func_bank1_b::a#0 = func_bank2_f::a#0 -Constant func_bank1_b::b#0 = func_bank2_f::b#0 -Constant func_bank1_a::a#2 = func_bank1_e::a#0 -Constant func_bank1_a::b#2 = func_bank1_e::b#0 -Constant func_bank2_a::a#2 = func_bank1_f::a#0 -Constant func_bank2_a::b#2 = func_bank1_f::b#0 +Constant func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 +Constant func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 +Constant func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 +Constant func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 +Constant func_main_a::a#0 = func_ram_bank1_f::a#0 +Constant func_main_a::b#0 = func_ram_bank1_f::b#0 +Constant func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 +Constant func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 +Constant func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 +Constant func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 +Constant func_main_a::a#1 = func_rom_bank2_f::a#0 +Constant func_main_a::b#1 = func_rom_bank2_f::b#0 +Constant func_rom_bank2_e::a#0 = func_main_b::a#0 +Constant func_rom_bank2_e::b#0 = func_main_b::b#0 Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [73] SCREEN[0] = main::$0 -Simplifying expression containing zero SCREEN in [79] SCREEN[0] = main::$1 -Simplifying expression containing zero SCREEN in [85] SCREEN[0] = main::$2 -Simplifying expression containing zero SCREEN in [91] SCREEN[0] = main::$3 -Simplifying expression containing zero SCREEN in [97] SCREEN[0] = main::$4 -Simplifying expression containing zero SCREEN in [103] SCREEN[0] = main::$5 -Simplifying expression containing zero SCREEN in [109] SCREEN[0] = main::$6 -Simplifying expression containing zero SCREEN in [115] SCREEN[0] = main::$7 -Simplifying expression containing zero SCREEN in [121] SCREEN[0] = main::$8 -Simplifying expression containing zero SCREEN in [127] SCREEN[0] = main::$9 -Simplifying expression containing zero SCREEN in [133] SCREEN[0] = main::$10 -Simplifying expression containing zero SCREEN in [139] SCREEN[0] = main::$11 +Simplifying expression containing zero SCREEN in [87] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [93] SCREEN[0] = main::$1 +Simplifying expression containing zero SCREEN in [99] SCREEN[0] = main::$2 +Simplifying expression containing zero SCREEN in [105] SCREEN[0] = main::$3 +Simplifying expression containing zero SCREEN in [111] SCREEN[0] = main::$4 +Simplifying expression containing zero SCREEN in [117] SCREEN[0] = main::$5 +Simplifying expression containing zero SCREEN in [123] SCREEN[0] = main::$6 +Simplifying expression containing zero SCREEN in [129] SCREEN[0] = main::$7 +Simplifying expression containing zero SCREEN in [135] SCREEN[0] = main::$8 +Simplifying expression containing zero SCREEN in [141] SCREEN[0] = main::$9 +Simplifying expression containing zero SCREEN in [147] SCREEN[0] = main::$10 +Simplifying expression containing zero SCREEN in [153] SCREEN[0] = main::$11 +Simplifying expression containing zero SCREEN in [159] SCREEN[0] = main::$12 +Simplifying expression containing zero SCREEN in [165] SCREEN[0] = main::$13 Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused procedure __start Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Inlining constant with var siblings func_bank1_a::a#3 -Inlining constant with var siblings func_bank1_a::b#3 -Inlining constant with var siblings func_bank1_a::a#0 -Inlining constant with var siblings func_bank1_a::b#0 -Inlining constant with var siblings func_bank1_a::a#1 -Inlining constant with var siblings func_bank1_a::b#1 -Inlining constant with var siblings func_bank1_a::a#2 -Inlining constant with var siblings func_bank1_a::b#2 -Inlining constant with var siblings func_bank2_a::a#3 -Inlining constant with var siblings func_bank2_a::b#3 -Inlining constant with var siblings func_bank2_a::a#0 -Inlining constant with var siblings func_bank2_a::b#0 -Inlining constant with var siblings func_bank2_a::a#1 -Inlining constant with var siblings func_bank2_a::b#1 -Inlining constant with var siblings func_bank2_a::a#2 -Inlining constant with var siblings func_bank2_a::b#2 -Inlining constant with var siblings func_bank1_b::a#1 -Inlining constant with var siblings func_bank1_b::b#1 -Inlining constant with var siblings func_bank1_b::a#0 -Inlining constant with var siblings func_bank1_b::b#0 -Inlining constant with var siblings func_bank2_b::a#1 -Inlining constant with var siblings func_bank2_b::b#1 -Inlining constant with var siblings func_bank2_b::a#0 -Inlining constant with var siblings func_bank2_b::b#0 -Constant inlined func_bank1_a::b#0 = func_bank1_c::b#0 -Constant inlined func_bank1_a::a#1 = func_bank2_c::a#0 -Constant inlined func_bank2_a::b#2 = func_bank1_f::b#0 -Constant inlined func_bank2_a::a#3 = '0' -Constant inlined func_bank1_a::a#0 = func_bank1_c::a#0 -Constant inlined func_bank2_a::b#3 = 7 -Constant inlined func_bank2_a::a#0 = func_bank1_d::a#0 -Constant inlined func_bank1_a::b#3 = 7 -Constant inlined func_bank1_a::b#2 = func_bank1_e::b#0 -Constant inlined func_bank2_a::b#0 = func_bank1_d::b#0 -Constant inlined func_bank2_a::a#1 = func_bank2_d::a#0 -Constant inlined func_bank1_a::a#3 = '0' -Constant inlined func_bank1_a::b#1 = func_bank2_c::b#0 -Constant inlined func_bank1_a::a#2 = func_bank1_e::a#0 -Constant inlined func_bank2_a::b#1 = func_bank2_d::b#0 -Constant inlined func_bank2_a::a#2 = func_bank1_f::a#0 -Constant inlined func_bank2_b::b#0 = func_bank2_e::b#0 -Constant inlined func_bank2_b::a#1 = '0' -Constant inlined func_bank1_b::a#0 = func_bank2_f::a#0 -Constant inlined func_bank2_b::a#0 = func_bank2_e::a#0 -Constant inlined func_bank1_b::b#0 = func_bank2_f::b#0 -Constant inlined func_bank1_b::a#1 = '0' -Constant inlined func_bank1_b::b#1 = 7 -Constant inlined func_bank2_b::b#1 = 7 +Constant right-side identified [3] func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0 + func_ram_bank1_b::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$1 = func_ram_bank1_b::return#2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings func_ram_bank1_a::a#2 +Inlining constant with var siblings func_ram_bank1_a::b#2 +Inlining constant with var siblings func_ram_bank1_a::a#0 +Inlining constant with var siblings func_ram_bank1_a::b#0 +Inlining constant with var siblings func_ram_bank1_a::a#1 +Inlining constant with var siblings func_ram_bank1_a::b#1 +Inlining constant with different constant siblings func_ram_bank1_b::return#2 +Inlining constant with var siblings func_ram_bank1_e::a#1 +Inlining constant with var siblings func_ram_bank1_e::b#1 +Inlining constant with var siblings func_rom_bank2_a::a#2 +Inlining constant with var siblings func_rom_bank2_a::b#2 +Inlining constant with var siblings func_rom_bank2_a::a#0 +Inlining constant with var siblings func_rom_bank2_a::b#0 +Inlining constant with var siblings func_rom_bank2_a::a#1 +Inlining constant with var siblings func_rom_bank2_a::b#1 +Inlining constant with var siblings func_rom_bank2_b::a#2 +Inlining constant with var siblings func_rom_bank2_b::b#2 +Inlining constant with var siblings func_rom_bank2_e::a#1 +Inlining constant with var siblings func_rom_bank2_e::b#1 +Inlining constant with var siblings func_rom_bank2_e::a#0 +Inlining constant with var siblings func_rom_bank2_e::b#0 +Inlining constant with var siblings func_main_a::a#2 +Inlining constant with var siblings func_main_a::b#2 +Inlining constant with var siblings func_main_a::a#0 +Inlining constant with var siblings func_main_a::b#0 +Inlining constant with var siblings func_main_a::a#1 +Inlining constant with var siblings func_main_a::b#1 +Constant inlined func_rom_bank2_e::a#0 = func_main_b::a#0 +Constant inlined func_rom_bank2_e::b#0 = func_main_b::b#0 +Constant inlined func_rom_bank2_e::a#1 = '0' +Constant inlined func_rom_bank2_e::b#1 = 7 +Constant inlined func_ram_bank1_e::b#1 = 7 +Constant inlined func_ram_bank1_e::a#1 = '0' +Constant inlined func_main_a::a#0 = func_ram_bank1_f::a#0 +Constant inlined func_main_a::b#0 = func_ram_bank1_f::b#0 +Constant inlined func_main_a::a#1 = func_rom_bank2_f::a#0 +Constant inlined func_main_a::b#1 = func_rom_bank2_f::b#0 +Constant inlined func_main_a::a#2 = '0' +Constant inlined func_main_a::b#2 = 7 +Constant inlined func_ram_bank1_a::b#2 = 7 +Constant inlined func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 +Constant inlined func_ram_bank1_a::a#2 = '0' +Constant inlined func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 +Constant inlined func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 +Constant inlined func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 +Constant inlined func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 +Constant inlined func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 +Constant inlined func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 +Constant inlined func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 +Constant inlined func_rom_bank2_a::a#2 = '0' +Constant inlined func_rom_bank2_a::b#2 = 7 +Constant inlined main::$1 = func_ram_bank1_b::return#0 +Constant inlined func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 +Constant inlined func_rom_bank2_b::a#2 = '0' +Constant inlined func_rom_bank2_b::b#2 = 7 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main -Adding NOP phi() at start of func_bank1_c -Adding NOP phi() at start of func_bank1_d -Adding NOP phi() at start of func_bank1_e -Adding NOP phi() at start of func_bank1_f -Adding NOP phi() at start of func_bank2_c -Adding NOP phi() at start of func_bank2_d -Adding NOP phi() at start of func_bank2_e -Adding NOP phi() at start of func_bank2_f +Adding NOP phi() at start of func_ram_bank1_b +Adding NOP phi() at start of func_ram_bank1_c +Adding NOP phi() at start of func_ram_bank1_d +Adding NOP phi() at start of func_ram_bank1_f +Adding NOP phi() at start of func_rom_bank2_c +Adding NOP phi() at start of func_rom_bank2_d +Adding NOP phi() at start of func_rom_bank2_f +Adding NOP phi() at start of func_main_b CALL GRAPH -Calls in [main] to func_bank1_a:1 func_bank1_b:5 func_bank1_c:9 func_bank1_d:13 func_bank1_e:17 func_bank1_f:21 func_bank2_a:25 func_bank2_b:29 func_bank2_c:33 func_bank2_d:37 func_bank2_e:41 func_bank2_f:45 -Calls in [func_bank1_c] to func_bank1_a:57 -Calls in [func_bank1_d] to func_bank2_a:62 -Calls in [func_bank1_e] to func_bank1_a:67 -Calls in [func_bank1_f] to func_bank2_a:72 -Calls in [func_bank2_c] to func_bank1_a:83 -Calls in [func_bank2_d] to func_bank2_a:88 -Calls in [func_bank2_e] to func_bank2_b:93 -Calls in [func_bank2_f] to func_bank1_b:98 +Calls in [main] to func_ram_bank1_a:1 func_ram_bank1_b:5 func_ram_bank1_c:7 func_ram_bank1_d:11 func_ram_bank1_e:15 func_ram_bank1_f:19 func_rom_bank2_a:23 func_rom_bank2_b:27 func_rom_bank2_c:31 func_rom_bank2_d:35 func_rom_bank2_e:39 func_rom_bank2_f:43 func_main_a:47 func_main_b:51 +Calls in [func_ram_bank1_c] to func_ram_bank1_a:62 +Calls in [func_ram_bank1_d] to func_rom_bank2_a:67 +Calls in [func_ram_bank1_e] to func_rom_bank2_b:76 +Calls in [func_ram_bank1_f] to func_main_a:81 +Calls in [func_rom_bank2_c] to func_ram_bank1_a:92 +Calls in [func_rom_bank2_d] to func_rom_bank2_a:97 +Calls in [func_rom_bank2_e] to func_rom_bank2_b:106 +Calls in [func_rom_bank2_f] to func_main_a:111 +Calls in [func_main_a] to func_ram_bank1_e:120 +Calls in [func_main_b] to func_rom_bank2_e:125 -Created 8 initial phi equivalence classes -Coalesced down to 8 phi equivalence classes +Created 12 initial phi equivalence classes +Coalesced [74] func_rom_bank2_b::a#4 = func_rom_bank2_b::a#0 +Coalesced [75] func_rom_bank2_b::b#4 = func_rom_bank2_b::b#0 +Coalesced [104] func_rom_bank2_b::a#5 = func_rom_bank2_b::a#1 +Coalesced [105] func_rom_bank2_b::b#5 = func_rom_bank2_b::b#1 +Coalesced [118] func_ram_bank1_e::a#3 = func_ram_bank1_e::a#0 +Coalesced [119] func_ram_bank1_e::b#3 = func_ram_bank1_e::b#0 +Coalesced down to 12 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of func_bank1_c -Adding NOP phi() at start of func_bank1_d -Adding NOP phi() at start of func_bank1_e -Adding NOP phi() at start of func_bank1_f -Adding NOP phi() at start of func_bank2_c -Adding NOP phi() at start of func_bank2_d -Adding NOP phi() at start of func_bank2_e -Adding NOP phi() at start of func_bank2_f +Adding NOP phi() at start of func_ram_bank1_b +Adding NOP phi() at start of func_ram_bank1_c +Adding NOP phi() at start of func_ram_bank1_d +Adding NOP phi() at start of func_ram_bank1_f +Adding NOP phi() at start of func_rom_bank2_c +Adding NOP phi() at start of func_rom_bank2_d +Adding NOP phi() at start of func_rom_bank2_f +Adding NOP phi() at start of func_main_b FINAL CONTROL FLOW GRAPH void main() main: scope:[main] from [0] phi() - [1] call func_bank1_a - [2] func_bank1_a::return#10 = func_bank1_a::return#0 + [1] call func_ram_bank1_a + [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 to:main::@1 main::@1: scope:[main] from main - [3] main::$0 = func_bank1_a::return#10 + [3] main::$0 = func_ram_bank1_a::return#4 [4] *SCREEN = main::$0 - [5] call func_bank1_b - [6] func_bank1_b::return#3 = func_bank1_b::return#1 + [5] call func_ram_bank1_b to:main::@2 main::@2: scope:[main] from main::@1 - [7] main::$1 = func_bank1_b::return#3 - [8] *SCREEN = main::$1 - [9] call func_bank1_c - [10] func_bank1_c::return#2 = func_bank1_c::return#0 + [6] *SCREEN = func_ram_bank1_b::return#0 + [7] call func_ram_bank1_c + [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 to:main::@3 main::@3: scope:[main] from main::@2 - [11] main::$2 = func_bank1_c::return#2 - [12] *SCREEN = main::$2 - [13] call func_bank1_d - [14] func_bank1_d::return#2 = func_bank1_d::return#0 + [9] main::$2 = func_ram_bank1_c::return#2 + [10] *SCREEN = main::$2 + [11] call func_ram_bank1_d + [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 to:main::@4 main::@4: scope:[main] from main::@3 - [15] main::$3 = func_bank1_d::return#2 - [16] *SCREEN = main::$3 - [17] call func_bank1_e - [18] func_bank1_e::return#2 = func_bank1_e::return#0 + [13] main::$3 = func_ram_bank1_d::return#2 + [14] *SCREEN = main::$3 + [15] call func_ram_bank1_e + [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 to:main::@5 main::@5: scope:[main] from main::@4 - [19] main::$4 = func_bank1_e::return#2 - [20] *SCREEN = main::$4 - [21] call func_bank1_f - [22] func_bank1_f::return#2 = func_bank1_f::return#0 + [17] main::$4 = func_ram_bank1_e::return#3 + [18] *SCREEN = main::$4 + [19] call func_ram_bank1_f + [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 to:main::@6 main::@6: scope:[main] from main::@5 - [23] main::$5 = func_bank1_f::return#2 - [24] *SCREEN = main::$5 - [25] call func_bank2_a - [26] func_bank2_a::return#10 = func_bank2_a::return#1 + [21] main::$5 = func_ram_bank1_f::return#2 + [22] *SCREEN = main::$5 + [23] call func_rom_bank2_a + [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 to:main::@7 main::@7: scope:[main] from main::@6 - [27] main::$6 = func_bank2_a::return#10 - [28] *SCREEN = main::$6 - [29] call func_bank2_b - [30] func_bank2_b::return#3 = func_bank2_b::return#1 + [25] main::$6 = func_rom_bank2_a::return#4 + [26] *SCREEN = main::$6 + [27] call func_rom_bank2_b + [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 to:main::@8 main::@8: scope:[main] from main::@7 - [31] main::$7 = func_bank2_b::return#3 - [32] *SCREEN = main::$7 - [33] call func_bank2_c - [34] func_bank2_c::return#2 = func_bank2_c::return#0 + [29] main::$7 = func_rom_bank2_b::return#4 + [30] *SCREEN = main::$7 + [31] call func_rom_bank2_c + [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 to:main::@9 main::@9: scope:[main] from main::@8 - [35] main::$8 = func_bank2_c::return#2 - [36] *SCREEN = main::$8 - [37] call func_bank2_d - [38] func_bank2_d::return#2 = func_bank2_d::return#0 + [33] main::$8 = func_rom_bank2_c::return#2 + [34] *SCREEN = main::$8 + [35] call func_rom_bank2_d + [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 to:main::@10 main::@10: scope:[main] from main::@9 - [39] main::$9 = func_bank2_d::return#2 - [40] *SCREEN = main::$9 - [41] call func_bank2_e - [42] func_bank2_e::return#2 = func_bank2_e::return#0 + [37] main::$9 = func_rom_bank2_d::return#2 + [38] *SCREEN = main::$9 + [39] call func_rom_bank2_e + [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 to:main::@11 main::@11: scope:[main] from main::@10 - [43] main::$10 = func_bank2_e::return#2 - [44] *SCREEN = main::$10 - [45] call func_bank2_f - [46] func_bank2_f::return#2 = func_bank2_f::return#0 + [41] main::$10 = func_rom_bank2_e::return#3 + [42] *SCREEN = main::$10 + [43] call func_rom_bank2_f + [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 to:main::@12 main::@12: scope:[main] from main::@11 - [47] main::$11 = func_bank2_f::return#2 - [48] *SCREEN = main::$11 + [45] main::$11 = func_rom_bank2_f::return#2 + [46] *SCREEN = main::$11 + [47] call func_main_a + [48] func_main_a::return#4 = func_main_a::return#2 + to:main::@13 +main::@13: scope:[main] from main::@12 + [49] main::$12 = func_main_a::return#4 + [50] *SCREEN = main::$12 + [51] call func_main_b + [52] func_main_b::return#2 = func_main_b::return#0 + to:main::@14 +main::@14: scope:[main] from main::@13 + [53] main::$13 = func_main_b::return#2 + [54] *SCREEN = main::$13 to:main::@return -main::@return: scope:[main] from main::@12 - [49] return - to:@return - -__bank(bank) char func_bank1_a(char a , char b) -func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main - [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) - [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) - [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 - to:func_bank1_a::@return -func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a - [52] return - to:@return - -char func_bank1_b(char a , char b) -func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 - [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) - [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) - [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 - to:func_bank1_b::@return -func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b +main::@return: scope:[main] from main::@14 [55] return to:@return -__bank(bank) char func_bank1_c(char a , char b) -func_bank1_c: scope:[func_bank1_c] from main::@2 - [56] phi() - [57] call func_bank1_a - [58] func_bank1_a::return#2 = func_bank1_a::return#0 - to:func_bank1_c::@1 -func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c - [59] func_bank1_c::return#0 = func_bank1_a::return#2 - to:func_bank1_c::@return -func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 +__bank(bank) char func_ram_bank1_a(char a , char b) +func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main + [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) + [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) + [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 + to:func_ram_bank1_a::@return +func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a + [58] return + to:@return + +char func_ram_bank1_b(char a , char b) +func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 + [59] phi() + to:func_ram_bank1_b::@return +func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b [60] return to:@return -__bank(bank) char func_bank1_d(char a , char b) -func_bank1_d: scope:[func_bank1_d] from main::@3 +__bank(bank) char func_ram_bank1_c(char a , char b) +func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 [61] phi() - [62] call func_bank2_a - [63] func_bank2_a::return#0 = func_bank2_a::return#1 - to:func_bank1_d::@1 -func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d - [64] func_bank1_d::return#0 = func_bank2_a::return#0 - to:func_bank1_d::@return -func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [62] call func_ram_bank1_a + [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 + to:func_ram_bank1_c::@1 +func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c + [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 + to:func_ram_bank1_c::@return +func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 [65] return to:@return -char func_bank1_e(char a , char b) -func_bank1_e: scope:[func_bank1_e] from main::@4 +__bank(bank) char func_ram_bank1_d(char a , char b) +func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 [66] phi() - [67] call func_bank1_a - [68] func_bank1_a::return#4 = func_bank1_a::return#0 - to:func_bank1_e::@1 -func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e - [69] func_bank1_e::return#0 = func_bank1_a::return#4 - to:func_bank1_e::@return -func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [67] call func_rom_bank2_a + [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 + to:func_ram_bank1_d::@1 +func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d + [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 + to:func_ram_bank1_d::@return +func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 [70] return to:@return -char func_bank1_f(char a , char b) -func_bank1_f: scope:[func_bank1_f] from main::@5 - [71] phi() - [72] call func_bank2_a - [73] func_bank2_a::return#4 = func_bank2_a::return#1 - to:func_bank1_f::@1 -func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f - [74] func_bank1_f::return#0 = func_bank2_a::return#4 - to:func_bank1_f::@return -func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 - [75] return +__bank(bank) char func_ram_bank1_e(char a , char b) +func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 + [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) + [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) + [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + [74] call func_rom_bank2_b + [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 + to:func_ram_bank1_e::@1 +func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e + [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 + to:func_ram_bank1_e::@return +func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 + [77] return to:@return -__bank(bank) char func_bank2_a(char a , char b) -func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 - [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) - [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) - [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 - to:func_bank2_a::@return -func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a - [78] return +__bank(bank) char func_ram_bank1_f(char a , char b) +func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 + [78] phi() + [79] call func_main_a + [80] func_main_a::return#0 = func_main_a::return#2 + to:func_ram_bank1_f::@1 +func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f + [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + to:func_ram_bank1_f::@return +func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 + [82] return to:@return -char func_bank2_b(char a , char b) -func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 - [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) - [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) - [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 - to:func_bank2_b::@return -func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b - [81] return +__bank(bank) char func_rom_bank2_a(char a , char b) +func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 + [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) + [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) + [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 + to:func_rom_bank2_a::@return +func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a + [85] return to:@return -__bank(bank) char func_bank2_c(char a , char b) -func_bank2_c: scope:[func_bank2_c] from main::@8 - [82] phi() - [83] call func_bank1_a - [84] func_bank1_a::return#3 = func_bank1_a::return#0 - to:func_bank2_c::@1 -func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c - [85] func_bank2_c::return#0 = func_bank1_a::return#3 - to:func_bank2_c::@return -func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 - [86] return +char func_rom_bank2_b(char a , char b) +func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 + [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) + [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) + [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 + to:func_rom_bank2_b::@return +func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b + [88] return to:@return -__bank(bank) char func_bank2_d(char a , char b) -func_bank2_d: scope:[func_bank2_d] from main::@9 - [87] phi() - [88] call func_bank2_a - [89] func_bank2_a::return#3 = func_bank2_a::return#1 - to:func_bank2_d::@1 -func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d - [90] func_bank2_d::return#0 = func_bank2_a::return#3 - to:func_bank2_d::@return -func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 - [91] return +__bank(bank) char func_rom_bank2_c(char a , char b) +func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 + [89] phi() + [90] call func_ram_bank1_a + [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 + to:func_rom_bank2_c::@1 +func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c + [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 + to:func_rom_bank2_c::@return +func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 + [93] return to:@return -__bank(bank) char func_bank2_e(char a , char b) -func_bank2_e: scope:[func_bank2_e] from main::@10 - [92] phi() - [93] call func_bank2_b - [94] func_bank2_b::return#0 = func_bank2_b::return#1 - to:func_bank2_e::@1 -func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e - [95] func_bank2_e::return#0 = func_bank2_b::return#0 - to:func_bank2_e::@return -func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 - [96] return +__bank(bank) char func_rom_bank2_d(char a , char b) +func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 + [94] phi() + [95] call func_rom_bank2_a + [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 + to:func_rom_bank2_d::@1 +func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d + [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 + to:func_rom_bank2_d::@return +func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 + [98] return to:@return -__bank(bank) char func_bank2_f(char a , char b) -func_bank2_f: scope:[func_bank2_f] from main::@11 - [97] phi() - [98] call func_bank1_b - [99] func_bank1_b::return#0 = func_bank1_b::return#1 - to:func_bank2_f::@1 -func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f - [100] func_bank2_f::return#0 = func_bank1_b::return#0 - to:func_bank2_f::@return -func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 - [101] return +__bank(bank) char func_rom_bank2_e(char a , char b) +func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 + [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) + [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) + [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + [102] call func_rom_bank2_b + [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 + to:func_rom_bank2_e::@1 +func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e + [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 + to:func_rom_bank2_e::@return +func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 + [105] return + to:@return + +__bank(bank) char func_rom_bank2_f(char a , char b) +func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 + [106] phi() + [107] call func_main_a + [108] func_main_a::return#1 = func_main_a::return#2 + to:func_rom_bank2_f::@1 +func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f + [109] func_rom_bank2_f::return#0 = func_main_a::return#1 + to:func_rom_bank2_f::@return +func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 + [110] return + to:@return + +char func_main_a(char a , char b) +func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 + [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) + [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) + [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + [114] call func_ram_bank1_e + [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + to:func_main_a::@1 +func_main_a::@1: scope:[func_main_a] from func_main_a + [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + to:func_main_a::@return +func_main_a::@return: scope:[func_main_a] from func_main_a::@1 + [117] return + to:@return + +char func_main_b(char a , char b) +func_main_b: scope:[func_main_b] from main::@13 + [118] phi() + [119] call func_rom_bank2_e + [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + to:func_main_b::@1 +func_main_b::@1: scope:[func_main_b] from func_main_b + [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + to:func_main_b::@return +func_main_b::@return: scope:[func_main_b] from func_main_b::@1 + [122] return to:@return VARIABLE REGISTER WEIGHTS -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::a -char func_bank1_a::a#4 // 101.0 -char func_bank1_a::b -char func_bank1_a::b#4 // 101.0 -char func_bank1_a::return -char func_bank1_a::return#0 // 22.66666666666666 -char func_bank1_a::return#10 // 4.0 -char func_bank1_a::return#2 // 22.0 -char func_bank1_a::return#3 // 22.0 -char func_bank1_a::return#4 // 22.0 -char func_bank1_b(char a , char b) -char func_bank1_b::a -char func_bank1_b::a#2 // 101.0 -char func_bank1_b::b -char func_bank1_b::b#2 // 101.0 -char func_bank1_b::return -char func_bank1_b::return#0 // 22.0 -char func_bank1_b::return#1 // 28.5 -char func_bank1_b::return#3 // 4.0 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::a -char func_bank1_c::b -char func_bank1_c::return -char func_bank1_c::return#0 // 4.333333333333333 -char func_bank1_c::return#2 // 4.0 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::a -char func_bank1_d::b -char func_bank1_d::return -char func_bank1_d::return#0 // 4.333333333333333 -char func_bank1_d::return#2 // 4.0 -char func_bank1_e(char a , char b) -char func_bank1_e::a -char func_bank1_e::b -char func_bank1_e::return -char func_bank1_e::return#0 // 4.333333333333333 -char func_bank1_e::return#2 // 4.0 -char func_bank1_f(char a , char b) -char func_bank1_f::a -char func_bank1_f::b -char func_bank1_f::return -char func_bank1_f::return#0 // 4.333333333333333 -char func_bank1_f::return#2 // 4.0 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::a -char func_bank2_a::a#4 // 101.0 -char func_bank2_a::b -char func_bank2_a::b#4 // 101.0 -char func_bank2_a::return -char func_bank2_a::return#0 // 22.0 -char func_bank2_a::return#1 // 22.666666666666664 -char func_bank2_a::return#10 // 4.0 -char func_bank2_a::return#3 // 22.0 -char func_bank2_a::return#4 // 22.0 -char func_bank2_b(char a , char b) -char func_bank2_b::a -char func_bank2_b::a#2 // 101.0 -char func_bank2_b::b -char func_bank2_b::b#2 // 101.0 -char func_bank2_b::return -char func_bank2_b::return#0 // 22.0 -char func_bank2_b::return#1 // 28.5 -char func_bank2_b::return#3 // 4.0 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::a -char func_bank2_c::b -char func_bank2_c::return -char func_bank2_c::return#0 // 4.333333333333333 -char func_bank2_c::return#2 // 4.0 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::a -char func_bank2_d::b -char func_bank2_d::return -char func_bank2_d::return#0 // 4.333333333333333 -char func_bank2_d::return#2 // 4.0 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::a -char func_bank2_e::b -char func_bank2_e::return -char func_bank2_e::return#0 // 4.333333333333333 -char func_bank2_e::return#2 // 4.0 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::a -char func_bank2_f::b -char func_bank2_f::return -char func_bank2_f::return#0 // 4.333333333333333 -char func_bank2_f::return#2 // 4.0 +char func_main_a(char a , char b) +char func_main_a::a +char func_main_a::a#3 // 101.0 +char func_main_a::b +char func_main_a::b#3 // 50.5 +char func_main_a::return +char func_main_a::return#0 // 22.0 +char func_main_a::return#1 // 22.0 +char func_main_a::return#2 // 25.0 +char func_main_a::return#4 // 4.0 +char func_main_b(char a , char b) +char func_main_b::a +char func_main_b::b +char func_main_b::return +char func_main_b::return#0 // 4.333333333333333 +char func_main_b::return#2 // 4.0 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::a +char func_ram_bank1_a::a#3 // 101.0 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#3 // 101.0 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 // 24.999999999999996 +char func_ram_bank1_a::return#2 // 22.0 +char func_ram_bank1_a::return#3 // 22.0 +char func_ram_bank1_a::return#4 // 4.0 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::a +char func_ram_bank1_b::b +char func_ram_bank1_b::return +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::a +char func_ram_bank1_c::b +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 // 4.333333333333333 +char func_ram_bank1_c::return#2 // 4.0 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::a +char func_ram_bank1_d::b +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 // 4.333333333333333 +char func_ram_bank1_d::return#2 // 4.0 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 // 101.0 +char func_ram_bank1_e::a#2 // 1102.0 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 // 202.0 +char func_ram_bank1_e::b#2 // 551.0 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 // 276.0 +char func_ram_bank1_e::return#2 // 202.0 +char func_ram_bank1_e::return#3 // 4.0 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::a +char func_ram_bank1_f::b +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 // 4.333333333333333 +char func_ram_bank1_f::return#2 // 4.0 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::a +char func_rom_bank2_a::a#3 // 101.0 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#3 // 101.0 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 // 22.0 +char func_rom_bank2_a::return#1 // 25.0 +char func_rom_bank2_a::return#3 // 22.0 +char func_rom_bank2_a::return#4 // 4.0 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 // 1001.0 +char func_rom_bank2_b::a#1 // 101.0 +char func_rom_bank2_b::a#3 // 11103.0 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 // 2002.0 +char func_rom_bank2_b::b#1 // 202.0 +char func_rom_bank2_b::b#3 // 11103.0 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 // 2002.0 +char func_rom_bank2_b::return#1 // 2221.0 +char func_rom_bank2_b::return#3 // 202.0 +char func_rom_bank2_b::return#4 // 4.0 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::a +char func_rom_bank2_c::b +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 // 4.333333333333333 +char func_rom_bank2_c::return#2 // 4.0 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::a +char func_rom_bank2_d::b +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 // 4.333333333333333 +char func_rom_bank2_d::return#2 // 4.0 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::a +char func_rom_bank2_e::a#2 // 101.0 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#2 // 50.5 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 // 28.5 +char func_rom_bank2_e::return#2 // 22.0 +char func_rom_bank2_e::return#3 // 4.0 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::a +char func_rom_bank2_f::b +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 // 4.333333333333333 +char func_rom_bank2_f::return#2 // 4.0 void main() char main::$0 // 4.0 -char main::$1 // 4.0 char main::$10 // 4.0 char main::$11 // 4.0 +char main::$12 // 4.0 +char main::$13 // 4.0 char main::$2 // 4.0 char main::$3 // 4.0 char main::$4 // 4.0 @@ -1167,755 +1376,893 @@ char main::$8 // 4.0 char main::$9 // 4.0 Initial phi equivalence classes -[ func_bank1_a::a#4 ] -[ func_bank1_a::b#4 ] -[ func_bank1_b::a#2 ] -[ func_bank1_b::b#2 ] -[ func_bank2_a::a#4 ] -[ func_bank2_a::b#4 ] -[ func_bank2_b::a#2 ] -[ func_bank2_b::b#2 ] -Added variable func_bank1_a::return#10 to live range equivalence class [ func_bank1_a::return#10 ] +[ func_ram_bank1_a::a#3 ] +[ func_ram_bank1_a::b#3 ] +[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +[ func_rom_bank2_a::a#3 ] +[ func_rom_bank2_a::b#3 ] +[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +[ func_rom_bank2_e::a#2 ] +[ func_rom_bank2_e::b#2 ] +[ func_main_a::a#3 ] +[ func_main_a::b#3 ] +Added variable func_ram_bank1_a::return#4 to live range equivalence class [ func_ram_bank1_a::return#4 ] Added variable main::$0 to live range equivalence class [ main::$0 ] -Added variable func_bank1_b::return#3 to live range equivalence class [ func_bank1_b::return#3 ] -Added variable main::$1 to live range equivalence class [ main::$1 ] -Added variable func_bank1_c::return#2 to live range equivalence class [ func_bank1_c::return#2 ] +Added variable func_ram_bank1_c::return#2 to live range equivalence class [ func_ram_bank1_c::return#2 ] Added variable main::$2 to live range equivalence class [ main::$2 ] -Added variable func_bank1_d::return#2 to live range equivalence class [ func_bank1_d::return#2 ] +Added variable func_ram_bank1_d::return#2 to live range equivalence class [ func_ram_bank1_d::return#2 ] Added variable main::$3 to live range equivalence class [ main::$3 ] -Added variable func_bank1_e::return#2 to live range equivalence class [ func_bank1_e::return#2 ] +Added variable func_ram_bank1_e::return#3 to live range equivalence class [ func_ram_bank1_e::return#3 ] Added variable main::$4 to live range equivalence class [ main::$4 ] -Added variable func_bank1_f::return#2 to live range equivalence class [ func_bank1_f::return#2 ] +Added variable func_ram_bank1_f::return#2 to live range equivalence class [ func_ram_bank1_f::return#2 ] Added variable main::$5 to live range equivalence class [ main::$5 ] -Added variable func_bank2_a::return#10 to live range equivalence class [ func_bank2_a::return#10 ] +Added variable func_rom_bank2_a::return#4 to live range equivalence class [ func_rom_bank2_a::return#4 ] Added variable main::$6 to live range equivalence class [ main::$6 ] -Added variable func_bank2_b::return#3 to live range equivalence class [ func_bank2_b::return#3 ] +Added variable func_rom_bank2_b::return#4 to live range equivalence class [ func_rom_bank2_b::return#4 ] Added variable main::$7 to live range equivalence class [ main::$7 ] -Added variable func_bank2_c::return#2 to live range equivalence class [ func_bank2_c::return#2 ] +Added variable func_rom_bank2_c::return#2 to live range equivalence class [ func_rom_bank2_c::return#2 ] Added variable main::$8 to live range equivalence class [ main::$8 ] -Added variable func_bank2_d::return#2 to live range equivalence class [ func_bank2_d::return#2 ] +Added variable func_rom_bank2_d::return#2 to live range equivalence class [ func_rom_bank2_d::return#2 ] Added variable main::$9 to live range equivalence class [ main::$9 ] -Added variable func_bank2_e::return#2 to live range equivalence class [ func_bank2_e::return#2 ] +Added variable func_rom_bank2_e::return#3 to live range equivalence class [ func_rom_bank2_e::return#3 ] Added variable main::$10 to live range equivalence class [ main::$10 ] -Added variable func_bank2_f::return#2 to live range equivalence class [ func_bank2_f::return#2 ] +Added variable func_rom_bank2_f::return#2 to live range equivalence class [ func_rom_bank2_f::return#2 ] Added variable main::$11 to live range equivalence class [ main::$11 ] -Added variable func_bank1_a::return#0 to live range equivalence class [ func_bank1_a::return#0 ] -Added variable func_bank1_b::return#1 to live range equivalence class [ func_bank1_b::return#1 ] -Added variable func_bank1_a::return#2 to live range equivalence class [ func_bank1_a::return#2 ] -Added variable func_bank1_c::return#0 to live range equivalence class [ func_bank1_c::return#0 ] -Added variable func_bank2_a::return#0 to live range equivalence class [ func_bank2_a::return#0 ] -Added variable func_bank1_d::return#0 to live range equivalence class [ func_bank1_d::return#0 ] -Added variable func_bank1_a::return#4 to live range equivalence class [ func_bank1_a::return#4 ] -Added variable func_bank1_e::return#0 to live range equivalence class [ func_bank1_e::return#0 ] -Added variable func_bank2_a::return#4 to live range equivalence class [ func_bank2_a::return#4 ] -Added variable func_bank1_f::return#0 to live range equivalence class [ func_bank1_f::return#0 ] -Added variable func_bank2_a::return#1 to live range equivalence class [ func_bank2_a::return#1 ] -Added variable func_bank2_b::return#1 to live range equivalence class [ func_bank2_b::return#1 ] -Added variable func_bank1_a::return#3 to live range equivalence class [ func_bank1_a::return#3 ] -Added variable func_bank2_c::return#0 to live range equivalence class [ func_bank2_c::return#0 ] -Added variable func_bank2_a::return#3 to live range equivalence class [ func_bank2_a::return#3 ] -Added variable func_bank2_d::return#0 to live range equivalence class [ func_bank2_d::return#0 ] -Added variable func_bank2_b::return#0 to live range equivalence class [ func_bank2_b::return#0 ] -Added variable func_bank2_e::return#0 to live range equivalence class [ func_bank2_e::return#0 ] -Added variable func_bank1_b::return#0 to live range equivalence class [ func_bank1_b::return#0 ] -Added variable func_bank2_f::return#0 to live range equivalence class [ func_bank2_f::return#0 ] +Added variable func_main_a::return#4 to live range equivalence class [ func_main_a::return#4 ] +Added variable main::$12 to live range equivalence class [ main::$12 ] +Added variable func_main_b::return#2 to live range equivalence class [ func_main_b::return#2 ] +Added variable main::$13 to live range equivalence class [ main::$13 ] +Added variable func_ram_bank1_a::return#0 to live range equivalence class [ func_ram_bank1_a::return#0 ] +Added variable func_ram_bank1_a::return#2 to live range equivalence class [ func_ram_bank1_a::return#2 ] +Added variable func_ram_bank1_c::return#0 to live range equivalence class [ func_ram_bank1_c::return#0 ] +Added variable func_rom_bank2_a::return#0 to live range equivalence class [ func_rom_bank2_a::return#0 ] +Added variable func_ram_bank1_d::return#0 to live range equivalence class [ func_ram_bank1_d::return#0 ] +Added variable func_rom_bank2_b::return#0 to live range equivalence class [ func_rom_bank2_b::return#0 ] +Added variable func_ram_bank1_e::return#0 to live range equivalence class [ func_ram_bank1_e::return#0 ] +Added variable func_main_a::return#0 to live range equivalence class [ func_main_a::return#0 ] +Added variable func_ram_bank1_f::return#0 to live range equivalence class [ func_ram_bank1_f::return#0 ] +Added variable func_rom_bank2_a::return#1 to live range equivalence class [ func_rom_bank2_a::return#1 ] +Added variable func_rom_bank2_b::return#1 to live range equivalence class [ func_rom_bank2_b::return#1 ] +Added variable func_ram_bank1_a::return#3 to live range equivalence class [ func_ram_bank1_a::return#3 ] +Added variable func_rom_bank2_c::return#0 to live range equivalence class [ func_rom_bank2_c::return#0 ] +Added variable func_rom_bank2_a::return#3 to live range equivalence class [ func_rom_bank2_a::return#3 ] +Added variable func_rom_bank2_d::return#0 to live range equivalence class [ func_rom_bank2_d::return#0 ] +Added variable func_rom_bank2_b::return#3 to live range equivalence class [ func_rom_bank2_b::return#3 ] +Added variable func_rom_bank2_e::return#0 to live range equivalence class [ func_rom_bank2_e::return#0 ] +Added variable func_main_a::return#1 to live range equivalence class [ func_main_a::return#1 ] +Added variable func_rom_bank2_f::return#0 to live range equivalence class [ func_rom_bank2_f::return#0 ] +Added variable func_ram_bank1_e::return#2 to live range equivalence class [ func_ram_bank1_e::return#2 ] +Added variable func_main_a::return#2 to live range equivalence class [ func_main_a::return#2 ] +Added variable func_rom_bank2_e::return#2 to live range equivalence class [ func_rom_bank2_e::return#2 ] +Added variable func_main_b::return#0 to live range equivalence class [ func_main_b::return#0 ] Complete equivalence classes -[ func_bank1_a::a#4 ] -[ func_bank1_a::b#4 ] -[ func_bank1_b::a#2 ] -[ func_bank1_b::b#2 ] -[ func_bank2_a::a#4 ] -[ func_bank2_a::b#4 ] -[ func_bank2_b::a#2 ] -[ func_bank2_b::b#2 ] -[ func_bank1_a::return#10 ] +[ func_ram_bank1_a::a#3 ] +[ func_ram_bank1_a::b#3 ] +[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +[ func_rom_bank2_a::a#3 ] +[ func_rom_bank2_a::b#3 ] +[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +[ func_rom_bank2_e::a#2 ] +[ func_rom_bank2_e::b#2 ] +[ func_main_a::a#3 ] +[ func_main_a::b#3 ] +[ func_ram_bank1_a::return#4 ] [ main::$0 ] -[ func_bank1_b::return#3 ] -[ main::$1 ] -[ func_bank1_c::return#2 ] +[ func_ram_bank1_c::return#2 ] [ main::$2 ] -[ func_bank1_d::return#2 ] +[ func_ram_bank1_d::return#2 ] [ main::$3 ] -[ func_bank1_e::return#2 ] +[ func_ram_bank1_e::return#3 ] [ main::$4 ] -[ func_bank1_f::return#2 ] +[ func_ram_bank1_f::return#2 ] [ main::$5 ] -[ func_bank2_a::return#10 ] +[ func_rom_bank2_a::return#4 ] [ main::$6 ] -[ func_bank2_b::return#3 ] +[ func_rom_bank2_b::return#4 ] [ main::$7 ] -[ func_bank2_c::return#2 ] +[ func_rom_bank2_c::return#2 ] [ main::$8 ] -[ func_bank2_d::return#2 ] +[ func_rom_bank2_d::return#2 ] [ main::$9 ] -[ func_bank2_e::return#2 ] +[ func_rom_bank2_e::return#3 ] [ main::$10 ] -[ func_bank2_f::return#2 ] +[ func_rom_bank2_f::return#2 ] [ main::$11 ] -[ func_bank1_a::return#0 ] -[ func_bank1_b::return#1 ] -[ func_bank1_a::return#2 ] -[ func_bank1_c::return#0 ] -[ func_bank2_a::return#0 ] -[ func_bank1_d::return#0 ] -[ func_bank1_a::return#4 ] -[ func_bank1_e::return#0 ] -[ func_bank2_a::return#4 ] -[ func_bank1_f::return#0 ] -[ func_bank2_a::return#1 ] -[ func_bank2_b::return#1 ] -[ func_bank1_a::return#3 ] -[ func_bank2_c::return#0 ] -[ func_bank2_a::return#3 ] -[ func_bank2_d::return#0 ] -[ func_bank2_b::return#0 ] -[ func_bank2_e::return#0 ] -[ func_bank1_b::return#0 ] -[ func_bank2_f::return#0 ] -Allocated zp[1]:2 [ func_bank1_a::a#4 ] -Allocated zp[1]:3 [ func_bank1_a::b#4 ] -Allocated zp[1]:4 [ func_bank1_b::a#2 ] -Allocated zp[1]:5 [ func_bank1_b::b#2 ] -Allocated zp[1]:6 [ func_bank2_a::a#4 ] -Allocated zp[1]:7 [ func_bank2_a::b#4 ] -Allocated zp[1]:8 [ func_bank2_b::a#2 ] -Allocated zp[1]:9 [ func_bank2_b::b#2 ] -Allocated zp[1]:10 [ func_bank1_b::return#1 ] -Allocated zp[1]:11 [ func_bank2_b::return#1 ] -Allocated zp[1]:12 [ func_bank2_a::return#1 ] -Allocated zp[1]:13 [ func_bank1_a::return#0 ] -Allocated zp[1]:14 [ func_bank1_a::return#2 ] -Allocated zp[1]:15 [ func_bank2_a::return#0 ] -Allocated zp[1]:16 [ func_bank1_a::return#4 ] -Allocated zp[1]:17 [ func_bank2_a::return#4 ] -Allocated zp[1]:18 [ func_bank1_a::return#3 ] -Allocated zp[1]:19 [ func_bank2_a::return#3 ] -Allocated zp[1]:20 [ func_bank2_b::return#0 ] -Allocated zp[1]:21 [ func_bank1_b::return#0 ] -Allocated zp[1]:22 [ func_bank1_c::return#0 ] -Allocated zp[1]:23 [ func_bank1_d::return#0 ] -Allocated zp[1]:24 [ func_bank1_e::return#0 ] -Allocated zp[1]:25 [ func_bank1_f::return#0 ] -Allocated zp[1]:26 [ func_bank2_c::return#0 ] -Allocated zp[1]:27 [ func_bank2_d::return#0 ] -Allocated zp[1]:28 [ func_bank2_e::return#0 ] -Allocated zp[1]:29 [ func_bank2_f::return#0 ] -Allocated zp[1]:30 [ func_bank1_a::return#10 ] -Allocated zp[1]:31 [ main::$0 ] -Allocated zp[1]:32 [ func_bank1_b::return#3 ] -Allocated zp[1]:33 [ main::$1 ] -Allocated zp[1]:34 [ func_bank1_c::return#2 ] -Allocated zp[1]:35 [ main::$2 ] -Allocated zp[1]:36 [ func_bank1_d::return#2 ] -Allocated zp[1]:37 [ main::$3 ] -Allocated zp[1]:38 [ func_bank1_e::return#2 ] -Allocated zp[1]:39 [ main::$4 ] -Allocated zp[1]:40 [ func_bank1_f::return#2 ] -Allocated zp[1]:41 [ main::$5 ] -Allocated zp[1]:42 [ func_bank2_a::return#10 ] -Allocated zp[1]:43 [ main::$6 ] -Allocated zp[1]:44 [ func_bank2_b::return#3 ] -Allocated zp[1]:45 [ main::$7 ] -Allocated zp[1]:46 [ func_bank2_c::return#2 ] -Allocated zp[1]:47 [ main::$8 ] -Allocated zp[1]:48 [ func_bank2_d::return#2 ] -Allocated zp[1]:49 [ main::$9 ] -Allocated zp[1]:50 [ func_bank2_e::return#2 ] -Allocated zp[1]:51 [ main::$10 ] -Allocated zp[1]:52 [ func_bank2_f::return#2 ] -Allocated zp[1]:53 [ main::$11 ] +[ func_main_a::return#4 ] +[ main::$12 ] +[ func_main_b::return#2 ] +[ main::$13 ] +[ func_ram_bank1_a::return#0 ] +[ func_ram_bank1_a::return#2 ] +[ func_ram_bank1_c::return#0 ] +[ func_rom_bank2_a::return#0 ] +[ func_ram_bank1_d::return#0 ] +[ func_rom_bank2_b::return#0 ] +[ func_ram_bank1_e::return#0 ] +[ func_main_a::return#0 ] +[ func_ram_bank1_f::return#0 ] +[ func_rom_bank2_a::return#1 ] +[ func_rom_bank2_b::return#1 ] +[ func_ram_bank1_a::return#3 ] +[ func_rom_bank2_c::return#0 ] +[ func_rom_bank2_a::return#3 ] +[ func_rom_bank2_d::return#0 ] +[ func_rom_bank2_b::return#3 ] +[ func_rom_bank2_e::return#0 ] +[ func_main_a::return#1 ] +[ func_rom_bank2_f::return#0 ] +[ func_ram_bank1_e::return#2 ] +[ func_main_a::return#2 ] +[ func_rom_bank2_e::return#2 ] +[ func_main_b::return#0 ] +Allocated zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +Allocated zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +Allocated zp[1]:4 [ func_rom_bank2_b::return#1 ] +Allocated zp[1]:5 [ func_rom_bank2_b::return#0 ] +Allocated zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +Allocated zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +Allocated zp[1]:8 [ func_ram_bank1_e::return#0 ] +Allocated zp[1]:9 [ func_rom_bank2_b::return#3 ] +Allocated zp[1]:10 [ func_ram_bank1_e::return#2 ] +Allocated zp[1]:11 [ func_ram_bank1_a::a#3 ] +Allocated zp[1]:12 [ func_ram_bank1_a::b#3 ] +Allocated zp[1]:13 [ func_rom_bank2_a::a#3 ] +Allocated zp[1]:14 [ func_rom_bank2_a::b#3 ] +Allocated zp[1]:15 [ func_rom_bank2_e::a#2 ] +Allocated zp[1]:16 [ func_main_a::a#3 ] +Allocated zp[1]:17 [ func_rom_bank2_e::b#2 ] +Allocated zp[1]:18 [ func_main_a::b#3 ] +Allocated zp[1]:19 [ func_rom_bank2_e::return#0 ] +Allocated zp[1]:20 [ func_rom_bank2_a::return#1 ] +Allocated zp[1]:21 [ func_main_a::return#2 ] +Allocated zp[1]:22 [ func_ram_bank1_a::return#0 ] +Allocated zp[1]:23 [ func_ram_bank1_a::return#2 ] +Allocated zp[1]:24 [ func_rom_bank2_a::return#0 ] +Allocated zp[1]:25 [ func_main_a::return#0 ] +Allocated zp[1]:26 [ func_ram_bank1_a::return#3 ] +Allocated zp[1]:27 [ func_rom_bank2_a::return#3 ] +Allocated zp[1]:28 [ func_main_a::return#1 ] +Allocated zp[1]:29 [ func_rom_bank2_e::return#2 ] +Allocated zp[1]:30 [ func_ram_bank1_c::return#0 ] +Allocated zp[1]:31 [ func_ram_bank1_d::return#0 ] +Allocated zp[1]:32 [ func_ram_bank1_f::return#0 ] +Allocated zp[1]:33 [ func_rom_bank2_c::return#0 ] +Allocated zp[1]:34 [ func_rom_bank2_d::return#0 ] +Allocated zp[1]:35 [ func_rom_bank2_f::return#0 ] +Allocated zp[1]:36 [ func_main_b::return#0 ] +Allocated zp[1]:37 [ func_ram_bank1_a::return#4 ] +Allocated zp[1]:38 [ main::$0 ] +Allocated zp[1]:39 [ func_ram_bank1_c::return#2 ] +Allocated zp[1]:40 [ main::$2 ] +Allocated zp[1]:41 [ func_ram_bank1_d::return#2 ] +Allocated zp[1]:42 [ main::$3 ] +Allocated zp[1]:43 [ func_ram_bank1_e::return#3 ] +Allocated zp[1]:44 [ main::$4 ] +Allocated zp[1]:45 [ func_ram_bank1_f::return#2 ] +Allocated zp[1]:46 [ main::$5 ] +Allocated zp[1]:47 [ func_rom_bank2_a::return#4 ] +Allocated zp[1]:48 [ main::$6 ] +Allocated zp[1]:49 [ func_rom_bank2_b::return#4 ] +Allocated zp[1]:50 [ main::$7 ] +Allocated zp[1]:51 [ func_rom_bank2_c::return#2 ] +Allocated zp[1]:52 [ main::$8 ] +Allocated zp[1]:53 [ func_rom_bank2_d::return#2 ] +Allocated zp[1]:54 [ main::$9 ] +Allocated zp[1]:55 [ func_rom_bank2_e::return#3 ] +Allocated zp[1]:56 [ main::$10 ] +Allocated zp[1]:57 [ func_rom_bank2_f::return#2 ] +Allocated zp[1]:58 [ main::$11 ] +Allocated zp[1]:59 [ func_main_a::return#4 ] +Allocated zp[1]:60 [ main::$12 ] +Allocated zp[1]:61 [ func_main_b::return#2 ] +Allocated zp[1]:62 [ main::$13 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 [ func_bank1_a::return#0 ] ( func_bank1_a:1 [ func_bank1_a::return#0 ] { { func_bank1_a::return#0 = func_bank1_a::return#10 } } func_bank1_c:9::func_bank1_a:57 [ func_bank1_a::return#0 ] { { func_bank1_c::return#0 = func_bank1_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#2 } } func_bank1_e:17::func_bank1_a:67 [ func_bank1_a::return#0 ] { { func_bank1_e::return#0 = func_bank1_e::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#4 } } func_bank2_c:33::func_bank1_a:83 [ func_bank1_a::return#0 ] { { func_bank2_c::return#0 = func_bank2_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#3 } } ) always clobbers reg byte a -Statement [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 [ func_bank1_b::return#1 ] ( func_bank1_b:5 [ func_bank1_b::return#1 ] { { func_bank1_b::return#1 = func_bank1_b::return#3 } } func_bank2_f:45::func_bank1_b:98 [ func_bank1_b::return#1 ] { { func_bank2_f::return#0 = func_bank2_f::return#2 } { func_bank1_b::return#0 = func_bank1_b::return#1 } } ) always clobbers reg byte a -Statement [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 [ func_bank2_a::return#1 ] ( func_bank2_a:25 [ func_bank2_a::return#1 ] { { func_bank2_a::return#1 = func_bank2_a::return#10 } } func_bank1_d:13::func_bank2_a:62 [ func_bank2_a::return#1 ] { { func_bank1_d::return#0 = func_bank1_d::return#2 } { func_bank2_a::return#0 = func_bank2_a::return#1 } } func_bank1_f:21::func_bank2_a:72 [ func_bank2_a::return#1 ] { { func_bank1_f::return#0 = func_bank1_f::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#4 } } func_bank2_d:37::func_bank2_a:88 [ func_bank2_a::return#1 ] { { func_bank2_d::return#0 = func_bank2_d::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#3 } } ) always clobbers reg byte a -Statement [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 [ func_bank2_b::return#1 ] ( func_bank2_b:29 [ func_bank2_b::return#1 ] { { func_bank2_b::return#1 = func_bank2_b::return#3 } } func_bank2_e:41::func_bank2_b:93 [ func_bank2_b::return#1 ] { { func_bank2_e::return#0 = func_bank2_e::return#2 } { func_bank2_b::return#0 = func_bank2_b::return#1 } } ) always clobbers reg byte a -Potential registers zp[1]:2 [ func_bank1_a::a#4 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ func_bank1_a::b#4 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ func_bank1_b::a#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ func_bank1_b::b#2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ func_bank2_a::a#4 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:7 [ func_bank2_a::b#4 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ func_bank2_b::a#2 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ func_bank2_b::b#2 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ func_bank1_a::return#10 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:31 [ main::$0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:32 [ func_bank1_b::return#3 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ main::$1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:34 [ func_bank1_c::return#2 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ main::$2 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:36 [ func_bank1_d::return#2 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:37 [ main::$3 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:38 [ func_bank1_e::return#2 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ main::$4 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:40 [ func_bank1_f::return#2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:41 [ main::$5 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:42 [ func_bank2_a::return#10 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:43 [ main::$6 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:44 [ func_bank2_b::return#3 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:45 [ main::$7 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:46 [ func_bank2_c::return#2 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ main::$8 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:48 [ func_bank2_d::return#2 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:49 [ main::$9 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:50 [ func_bank2_e::return#2 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:51 [ main::$10 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:52 [ func_bank2_f::return#2 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:53 [ main::$11 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:13 [ func_bank1_a::return#0 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:10 [ func_bank1_b::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:14 [ func_bank1_a::return#2 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:22 [ func_bank1_c::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:15 [ func_bank2_a::return#0 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:23 [ func_bank1_d::return#0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:16 [ func_bank1_a::return#4 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:24 [ func_bank1_e::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:17 [ func_bank2_a::return#4 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:25 [ func_bank1_f::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:12 [ func_bank2_a::return#1 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:11 [ func_bank2_b::return#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:18 [ func_bank1_a::return#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:26 [ func_bank2_c::return#0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:19 [ func_bank2_a::return#3 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:27 [ func_bank2_d::return#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:20 [ func_bank2_b::return#0 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:28 [ func_bank2_e::return#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:21 [ func_bank1_b::return#0 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:29 [ func_bank2_f::return#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Statement [6] *SCREEN = func_ram_bank1_b::return#0 [ ] ( [ ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } } ) always clobbers reg byte a +Statement [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 [ func_ram_bank1_a::return#0 ] ( func_ram_bank1_a:1 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#4 } } func_ram_bank1_c:7::func_ram_bank1_a:62 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#2 } } func_rom_bank2_c:31::func_ram_bank1_a:90 [ func_ram_bank1_a::return#0 ] { { func_rom_bank2_c::return#0 = func_rom_bank2_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#3 } } ) always clobbers reg byte a +Statement [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 [ func_rom_bank2_a::return#1 ] ( func_rom_bank2_a:23 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#4 } } func_ram_bank1_d:11::func_rom_bank2_a:67 [ func_rom_bank2_a::return#1 ] { { func_ram_bank1_d::return#0 = func_ram_bank1_d::return#2 } { func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 } } func_rom_bank2_d:35::func_rom_bank2_a:95 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_d::return#0 = func_rom_bank2_d::return#2 } { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#3 } } ) always clobbers reg byte a +Statement [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 [ func_rom_bank2_b::return#1 ] ( func_rom_bank2_b:27 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#4 } } func_ram_bank1_e:15::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#3 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_main_a:47::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_main_a::return#2 = func_main_a::return#4 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_ram_bank1_f:19::func_main_a:79::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_f::return#0 = func_ram_bank1_f::return#2 } { func_main_a::return#0 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_f:43::func_main_a:107::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_f::return#0 = func_rom_bank2_f::return#2 } { func_main_a::return#1 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_e:39::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#3 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } func_main_b:51::func_rom_bank2_e:119::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_main_b::return#0 = func_main_b::return#2 } { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#2 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } ) always clobbers reg byte a +Potential registers zp[1]:11 [ func_ram_bank1_a::a#3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ func_ram_bank1_a::b#3 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:13 [ func_rom_bank2_a::a#3 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:14 [ func_rom_bank2_a::b#3 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:15 [ func_rom_bank2_e::a#2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:17 [ func_rom_bank2_e::b#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:16 [ func_main_a::a#3 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:18 [ func_main_a::b#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ func_ram_bank1_a::return#4 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ main::$0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ func_ram_bank1_c::return#2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ main::$2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ func_ram_bank1_d::return#2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ main::$3 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ func_ram_bank1_e::return#3 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ main::$4 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ func_ram_bank1_f::return#2 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ main::$5 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ func_rom_bank2_a::return#4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ main::$6 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:49 [ func_rom_bank2_b::return#4 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:50 [ main::$7 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:51 [ func_rom_bank2_c::return#2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:52 [ main::$8 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ func_rom_bank2_d::return#2 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:54 [ main::$9 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:55 [ func_rom_bank2_e::return#3 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:56 [ main::$10 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:57 [ func_rom_bank2_f::return#2 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:58 [ main::$11 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:59 [ func_main_a::return#4 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:60 [ main::$12 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:61 [ func_main_b::return#2 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:62 [ main::$13 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:22 [ func_ram_bank1_a::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:23 [ func_ram_bank1_a::return#2 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:30 [ func_ram_bank1_c::return#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:24 [ func_rom_bank2_a::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:31 [ func_ram_bank1_d::return#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ func_rom_bank2_b::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ func_ram_bank1_e::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:25 [ func_main_a::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:32 [ func_ram_bank1_f::return#0 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:20 [ func_rom_bank2_a::return#1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ func_rom_bank2_b::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:26 [ func_ram_bank1_a::return#3 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:33 [ func_rom_bank2_c::return#0 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:27 [ func_rom_bank2_a::return#3 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ func_rom_bank2_d::return#0 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ func_rom_bank2_b::return#3 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:19 [ func_rom_bank2_e::return#0 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:28 [ func_main_a::return#1 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ func_rom_bank2_f::return#0 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ func_ram_bank1_e::return#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:21 [ func_main_a::return#2 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ func_rom_bank2_e::return#2 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ func_main_b::return#0 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [func_bank1_a] 101: zp[1]:2 [ func_bank1_a::a#4 ] 101: zp[1]:3 [ func_bank1_a::b#4 ] 22.67: zp[1]:13 [ func_bank1_a::return#0 ] 22: zp[1]:14 [ func_bank1_a::return#2 ] 22: zp[1]:16 [ func_bank1_a::return#4 ] 22: zp[1]:18 [ func_bank1_a::return#3 ] 4: zp[1]:30 [ func_bank1_a::return#10 ] -Uplift Scope [func_bank2_a] 101: zp[1]:6 [ func_bank2_a::a#4 ] 101: zp[1]:7 [ func_bank2_a::b#4 ] 22.67: zp[1]:12 [ func_bank2_a::return#1 ] 22: zp[1]:15 [ func_bank2_a::return#0 ] 22: zp[1]:17 [ func_bank2_a::return#4 ] 22: zp[1]:19 [ func_bank2_a::return#3 ] 4: zp[1]:42 [ func_bank2_a::return#10 ] -Uplift Scope [func_bank1_b] 101: zp[1]:4 [ func_bank1_b::a#2 ] 101: zp[1]:5 [ func_bank1_b::b#2 ] 28.5: zp[1]:10 [ func_bank1_b::return#1 ] 22: zp[1]:21 [ func_bank1_b::return#0 ] 4: zp[1]:32 [ func_bank1_b::return#3 ] -Uplift Scope [func_bank2_b] 101: zp[1]:8 [ func_bank2_b::a#2 ] 101: zp[1]:9 [ func_bank2_b::b#2 ] 28.5: zp[1]:11 [ func_bank2_b::return#1 ] 22: zp[1]:20 [ func_bank2_b::return#0 ] 4: zp[1]:44 [ func_bank2_b::return#3 ] -Uplift Scope [main] 4: zp[1]:31 [ main::$0 ] 4: zp[1]:33 [ main::$1 ] 4: zp[1]:35 [ main::$2 ] 4: zp[1]:37 [ main::$3 ] 4: zp[1]:39 [ main::$4 ] 4: zp[1]:41 [ main::$5 ] 4: zp[1]:43 [ main::$6 ] 4: zp[1]:45 [ main::$7 ] 4: zp[1]:47 [ main::$8 ] 4: zp[1]:49 [ main::$9 ] 4: zp[1]:51 [ main::$10 ] 4: zp[1]:53 [ main::$11 ] -Uplift Scope [func_bank1_c] 4.33: zp[1]:22 [ func_bank1_c::return#0 ] 4: zp[1]:34 [ func_bank1_c::return#2 ] -Uplift Scope [func_bank1_d] 4.33: zp[1]:23 [ func_bank1_d::return#0 ] 4: zp[1]:36 [ func_bank1_d::return#2 ] -Uplift Scope [func_bank2_c] 4.33: zp[1]:26 [ func_bank2_c::return#0 ] 4: zp[1]:46 [ func_bank2_c::return#2 ] -Uplift Scope [func_bank2_d] 4.33: zp[1]:27 [ func_bank2_d::return#0 ] 4: zp[1]:48 [ func_bank2_d::return#2 ] -Uplift Scope [func_bank2_e] 4.33: zp[1]:28 [ func_bank2_e::return#0 ] 4: zp[1]:50 [ func_bank2_e::return#2 ] -Uplift Scope [func_bank2_f] 4.33: zp[1]:29 [ func_bank2_f::return#0 ] 4: zp[1]:52 [ func_bank2_f::return#2 ] -Uplift Scope [func_bank1_e] 4.33: zp[1]:24 [ func_bank1_e::return#0 ] 4: zp[1]:38 [ func_bank1_e::return#2 ] -Uplift Scope [func_bank1_f] 4.33: zp[1]:25 [ func_bank1_f::return#0 ] 4: zp[1]:40 [ func_bank1_f::return#2 ] +Uplift Scope [func_rom_bank2_b] 13,307: zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] 12,205: zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] 2,221: zp[1]:4 [ func_rom_bank2_b::return#1 ] 2,002: zp[1]:5 [ func_rom_bank2_b::return#0 ] 202: zp[1]:9 [ func_rom_bank2_b::return#3 ] 4: zp[1]:49 [ func_rom_bank2_b::return#4 ] +Uplift Scope [func_ram_bank1_e] 1,203: zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] 753: zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] 276: zp[1]:8 [ func_ram_bank1_e::return#0 ] 202: zp[1]:10 [ func_ram_bank1_e::return#2 ] 4: zp[1]:43 [ func_ram_bank1_e::return#3 ] +Uplift Scope [func_ram_bank1_a] 101: zp[1]:11 [ func_ram_bank1_a::a#3 ] 101: zp[1]:12 [ func_ram_bank1_a::b#3 ] 25: zp[1]:22 [ func_ram_bank1_a::return#0 ] 22: zp[1]:23 [ func_ram_bank1_a::return#2 ] 22: zp[1]:26 [ func_ram_bank1_a::return#3 ] 4: zp[1]:37 [ func_ram_bank1_a::return#4 ] +Uplift Scope [func_rom_bank2_a] 101: zp[1]:13 [ func_rom_bank2_a::a#3 ] 101: zp[1]:14 [ func_rom_bank2_a::b#3 ] 25: zp[1]:20 [ func_rom_bank2_a::return#1 ] 22: zp[1]:24 [ func_rom_bank2_a::return#0 ] 22: zp[1]:27 [ func_rom_bank2_a::return#3 ] 4: zp[1]:47 [ func_rom_bank2_a::return#4 ] +Uplift Scope [func_main_a] 101: zp[1]:16 [ func_main_a::a#3 ] 50.5: zp[1]:18 [ func_main_a::b#3 ] 25: zp[1]:21 [ func_main_a::return#2 ] 22: zp[1]:25 [ func_main_a::return#0 ] 22: zp[1]:28 [ func_main_a::return#1 ] 4: zp[1]:59 [ func_main_a::return#4 ] +Uplift Scope [func_rom_bank2_e] 101: zp[1]:15 [ func_rom_bank2_e::a#2 ] 50.5: zp[1]:17 [ func_rom_bank2_e::b#2 ] 28.5: zp[1]:19 [ func_rom_bank2_e::return#0 ] 22: zp[1]:29 [ func_rom_bank2_e::return#2 ] 4: zp[1]:55 [ func_rom_bank2_e::return#3 ] +Uplift Scope [main] 4: zp[1]:38 [ main::$0 ] 4: zp[1]:40 [ main::$2 ] 4: zp[1]:42 [ main::$3 ] 4: zp[1]:44 [ main::$4 ] 4: zp[1]:46 [ main::$5 ] 4: zp[1]:48 [ main::$6 ] 4: zp[1]:50 [ main::$7 ] 4: zp[1]:52 [ main::$8 ] 4: zp[1]:54 [ main::$9 ] 4: zp[1]:56 [ main::$10 ] 4: zp[1]:58 [ main::$11 ] 4: zp[1]:60 [ main::$12 ] 4: zp[1]:62 [ main::$13 ] +Uplift Scope [func_ram_bank1_c] 4.33: zp[1]:30 [ func_ram_bank1_c::return#0 ] 4: zp[1]:39 [ func_ram_bank1_c::return#2 ] +Uplift Scope [func_ram_bank1_d] 4.33: zp[1]:31 [ func_ram_bank1_d::return#0 ] 4: zp[1]:41 [ func_ram_bank1_d::return#2 ] +Uplift Scope [func_ram_bank1_f] 4.33: zp[1]:32 [ func_ram_bank1_f::return#0 ] 4: zp[1]:45 [ func_ram_bank1_f::return#2 ] +Uplift Scope [func_rom_bank2_c] 4.33: zp[1]:33 [ func_rom_bank2_c::return#0 ] 4: zp[1]:51 [ func_rom_bank2_c::return#2 ] +Uplift Scope [func_rom_bank2_d] 4.33: zp[1]:34 [ func_rom_bank2_d::return#0 ] 4: zp[1]:53 [ func_rom_bank2_d::return#2 ] +Uplift Scope [func_rom_bank2_f] 4.33: zp[1]:35 [ func_rom_bank2_f::return#0 ] 4: zp[1]:57 [ func_rom_bank2_f::return#2 ] +Uplift Scope [func_main_b] 4.33: zp[1]:36 [ func_main_b::return#0 ] 4: zp[1]:61 [ func_main_b::return#2 ] +Uplift Scope [func_ram_bank1_b] Uplift Scope [] -Uplifting [func_bank1_a] best 740 combination reg byte x [ func_bank1_a::a#4 ] reg byte a [ func_bank1_a::b#4 ] reg byte a [ func_bank1_a::return#0 ] reg byte a [ func_bank1_a::return#2 ] zp[1]:16 [ func_bank1_a::return#4 ] zp[1]:18 [ func_bank1_a::return#3 ] zp[1]:30 [ func_bank1_a::return#10 ] -Limited combination testing to 100 combinations of 16384 possible. -Uplifting [func_bank2_a] best 695 combination reg byte x [ func_bank2_a::a#4 ] reg byte a [ func_bank2_a::b#4 ] reg byte a [ func_bank2_a::return#1 ] reg byte a [ func_bank2_a::return#0 ] zp[1]:17 [ func_bank2_a::return#4 ] zp[1]:19 [ func_bank2_a::return#3 ] zp[1]:42 [ func_bank2_a::return#10 ] -Limited combination testing to 100 combinations of 16384 possible. -Uplifting [func_bank1_b] best 668 combination reg byte x [ func_bank1_b::a#2 ] reg byte a [ func_bank1_b::b#2 ] reg byte a [ func_bank1_b::return#1 ] reg byte a [ func_bank1_b::return#0 ] zp[1]:32 [ func_bank1_b::return#3 ] +Uplifting [func_rom_bank2_b] best 914 combination reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] reg byte a [ func_rom_bank2_b::return#1 ] reg byte a [ func_rom_bank2_b::return#0 ] zp[1]:9 [ func_rom_bank2_b::return#3 ] zp[1]:49 [ func_rom_bank2_b::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_ram_bank1_e] best 881 combination reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] reg byte a [ func_ram_bank1_e::return#0 ] reg byte a [ func_ram_bank1_e::return#2 ] zp[1]:43 [ func_ram_bank1_e::return#3 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [func_bank2_b] best 641 combination reg byte x [ func_bank2_b::a#2 ] reg byte a [ func_bank2_b::b#2 ] reg byte a [ func_bank2_b::return#1 ] reg byte a [ func_bank2_b::return#0 ] zp[1]:44 [ func_bank2_b::return#3 ] +Uplifting [func_ram_bank1_a] best 845 combination reg byte x [ func_ram_bank1_a::a#3 ] reg byte a [ func_ram_bank1_a::b#3 ] reg byte a [ func_ram_bank1_a::return#0 ] reg byte a [ func_ram_bank1_a::return#2 ] zp[1]:26 [ func_ram_bank1_a::return#3 ] zp[1]:37 [ func_ram_bank1_a::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_rom_bank2_a] best 809 combination reg byte x [ func_rom_bank2_a::a#3 ] reg byte a [ func_rom_bank2_a::b#3 ] reg byte a [ func_rom_bank2_a::return#1 ] reg byte a [ func_rom_bank2_a::return#0 ] zp[1]:27 [ func_rom_bank2_a::return#3 ] zp[1]:47 [ func_rom_bank2_a::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_main_a] best 767 combination reg byte a [ func_main_a::a#3 ] reg byte x [ func_main_a::b#3 ] reg byte a [ func_main_a::return#2 ] reg byte a [ func_main_a::return#0 ] zp[1]:28 [ func_main_a::return#1 ] zp[1]:59 [ func_main_a::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_rom_bank2_e] best 734 combination reg byte a [ func_rom_bank2_e::a#2 ] reg byte x [ func_rom_bank2_e::b#2 ] reg byte a [ func_rom_bank2_e::return#0 ] reg byte a [ func_rom_bank2_e::return#2 ] zp[1]:55 [ func_rom_bank2_e::return#3 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 617 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[1]:39 [ main::$4 ] zp[1]:41 [ main::$5 ] zp[1]:43 [ main::$6 ] zp[1]:45 [ main::$7 ] zp[1]:47 [ main::$8 ] zp[1]:49 [ main::$9 ] zp[1]:51 [ main::$10 ] zp[1]:53 [ main::$11 ] -Limited combination testing to 100 combinations of 16777216 possible. -Uplifting [func_bank1_c] best 605 combination reg byte a [ func_bank1_c::return#0 ] reg byte a [ func_bank1_c::return#2 ] -Uplifting [func_bank1_d] best 593 combination reg byte a [ func_bank1_d::return#0 ] reg byte a [ func_bank1_d::return#2 ] -Uplifting [func_bank2_c] best 581 combination reg byte a [ func_bank2_c::return#0 ] reg byte a [ func_bank2_c::return#2 ] -Uplifting [func_bank2_d] best 569 combination reg byte a [ func_bank2_d::return#0 ] reg byte a [ func_bank2_d::return#2 ] -Uplifting [func_bank2_e] best 557 combination reg byte a [ func_bank2_e::return#0 ] reg byte a [ func_bank2_e::return#2 ] -Uplifting [func_bank2_f] best 545 combination reg byte a [ func_bank2_f::return#0 ] reg byte a [ func_bank2_f::return#2 ] -Uplifting [func_bank1_e] best 533 combination reg byte a [ func_bank1_e::return#0 ] reg byte a [ func_bank1_e::return#2 ] -Uplifting [func_bank1_f] best 521 combination reg byte a [ func_bank1_f::return#0 ] reg byte a [ func_bank1_f::return#2 ] -Uplifting [] best 521 combination -Attempting to uplift remaining variables inzp[1]:16 [ func_bank1_a::return#4 ] -Uplifting [func_bank1_a] best 515 combination reg byte a [ func_bank1_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:17 [ func_bank2_a::return#4 ] -Uplifting [func_bank2_a] best 509 combination reg byte a [ func_bank2_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:18 [ func_bank1_a::return#3 ] -Uplifting [func_bank1_a] best 503 combination reg byte a [ func_bank1_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:19 [ func_bank2_a::return#3 ] -Uplifting [func_bank2_a] best 497 combination reg byte a [ func_bank2_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:30 [ func_bank1_a::return#10 ] -Uplifting [func_bank1_a] best 491 combination reg byte a [ func_bank1_a::return#10 ] -Attempting to uplift remaining variables inzp[1]:32 [ func_bank1_b::return#3 ] -Uplifting [func_bank1_b] best 485 combination reg byte a [ func_bank1_b::return#3 ] -Attempting to uplift remaining variables inzp[1]:39 [ main::$4 ] -Uplifting [main] best 479 combination reg byte a [ main::$4 ] -Attempting to uplift remaining variables inzp[1]:41 [ main::$5 ] -Uplifting [main] best 473 combination reg byte a [ main::$5 ] -Attempting to uplift remaining variables inzp[1]:42 [ func_bank2_a::return#10 ] -Uplifting [func_bank2_a] best 467 combination reg byte a [ func_bank2_a::return#10 ] -Attempting to uplift remaining variables inzp[1]:43 [ main::$6 ] -Uplifting [main] best 461 combination reg byte a [ main::$6 ] -Attempting to uplift remaining variables inzp[1]:44 [ func_bank2_b::return#3 ] -Uplifting [func_bank2_b] best 455 combination reg byte a [ func_bank2_b::return#3 ] -Attempting to uplift remaining variables inzp[1]:45 [ main::$7 ] -Uplifting [main] best 449 combination reg byte a [ main::$7 ] -Attempting to uplift remaining variables inzp[1]:47 [ main::$8 ] -Uplifting [main] best 443 combination reg byte a [ main::$8 ] -Attempting to uplift remaining variables inzp[1]:49 [ main::$9 ] -Uplifting [main] best 437 combination reg byte a [ main::$9 ] -Attempting to uplift remaining variables inzp[1]:51 [ main::$10 ] -Uplifting [main] best 431 combination reg byte a [ main::$10 ] -Attempting to uplift remaining variables inzp[1]:53 [ main::$11 ] -Uplifting [main] best 425 combination reg byte a [ main::$11 ] +Uplifting [main] best 710 combination reg byte a [ main::$0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte a [ main::$4 ] zp[1]:46 [ main::$5 ] zp[1]:48 [ main::$6 ] zp[1]:50 [ main::$7 ] zp[1]:52 [ main::$8 ] zp[1]:54 [ main::$9 ] zp[1]:56 [ main::$10 ] zp[1]:58 [ main::$11 ] zp[1]:60 [ main::$12 ] zp[1]:62 [ main::$13 ] +Limited combination testing to 100 combinations of 67108864 possible. +Uplifting [func_ram_bank1_c] best 698 combination reg byte a [ func_ram_bank1_c::return#0 ] reg byte a [ func_ram_bank1_c::return#2 ] +Uplifting [func_ram_bank1_d] best 686 combination reg byte a [ func_ram_bank1_d::return#0 ] reg byte a [ func_ram_bank1_d::return#2 ] +Uplifting [func_ram_bank1_f] best 674 combination reg byte a [ func_ram_bank1_f::return#0 ] reg byte a [ func_ram_bank1_f::return#2 ] +Uplifting [func_rom_bank2_c] best 662 combination reg byte a [ func_rom_bank2_c::return#0 ] reg byte a [ func_rom_bank2_c::return#2 ] +Uplifting [func_rom_bank2_d] best 650 combination reg byte a [ func_rom_bank2_d::return#0 ] reg byte a [ func_rom_bank2_d::return#2 ] +Uplifting [func_rom_bank2_f] best 638 combination reg byte a [ func_rom_bank2_f::return#0 ] reg byte a [ func_rom_bank2_f::return#2 ] +Uplifting [func_main_b] best 626 combination reg byte a [ func_main_b::return#0 ] reg byte a [ func_main_b::return#2 ] +Uplifting [func_ram_bank1_b] best 626 combination +Uplifting [] best 626 combination +Attempting to uplift remaining variables inzp[1]:9 [ func_rom_bank2_b::return#3 ] +Uplifting [func_rom_bank2_b] best 620 combination reg byte a [ func_rom_bank2_b::return#3 ] +Attempting to uplift remaining variables inzp[1]:26 [ func_ram_bank1_a::return#3 ] +Uplifting [func_ram_bank1_a] best 614 combination reg byte a [ func_ram_bank1_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:27 [ func_rom_bank2_a::return#3 ] +Uplifting [func_rom_bank2_a] best 608 combination reg byte a [ func_rom_bank2_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:28 [ func_main_a::return#1 ] +Uplifting [func_main_a] best 602 combination reg byte a [ func_main_a::return#1 ] +Attempting to uplift remaining variables inzp[1]:37 [ func_ram_bank1_a::return#4 ] +Uplifting [func_ram_bank1_a] best 596 combination reg byte a [ func_ram_bank1_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:43 [ func_ram_bank1_e::return#3 ] +Uplifting [func_ram_bank1_e] best 590 combination reg byte a [ func_ram_bank1_e::return#3 ] +Attempting to uplift remaining variables inzp[1]:46 [ main::$5 ] +Uplifting [main] best 584 combination reg byte a [ main::$5 ] +Attempting to uplift remaining variables inzp[1]:47 [ func_rom_bank2_a::return#4 ] +Uplifting [func_rom_bank2_a] best 578 combination reg byte a [ func_rom_bank2_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:48 [ main::$6 ] +Uplifting [main] best 572 combination reg byte a [ main::$6 ] +Attempting to uplift remaining variables inzp[1]:49 [ func_rom_bank2_b::return#4 ] +Uplifting [func_rom_bank2_b] best 566 combination reg byte a [ func_rom_bank2_b::return#4 ] +Attempting to uplift remaining variables inzp[1]:50 [ main::$7 ] +Uplifting [main] best 560 combination reg byte a [ main::$7 ] +Attempting to uplift remaining variables inzp[1]:52 [ main::$8 ] +Uplifting [main] best 554 combination reg byte a [ main::$8 ] +Attempting to uplift remaining variables inzp[1]:54 [ main::$9 ] +Uplifting [main] best 548 combination reg byte a [ main::$9 ] +Attempting to uplift remaining variables inzp[1]:55 [ func_rom_bank2_e::return#3 ] +Uplifting [func_rom_bank2_e] best 542 combination reg byte a [ func_rom_bank2_e::return#3 ] +Attempting to uplift remaining variables inzp[1]:56 [ main::$10 ] +Uplifting [main] best 536 combination reg byte a [ main::$10 ] +Attempting to uplift remaining variables inzp[1]:58 [ main::$11 ] +Uplifting [main] best 530 combination reg byte a [ main::$11 ] +Attempting to uplift remaining variables inzp[1]:59 [ func_main_a::return#4 ] +Uplifting [func_main_a] best 524 combination reg byte a [ func_main_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:60 [ main::$12 ] +Uplifting [main] best 518 combination reg byte a [ main::$12 ] +Attempting to uplift remaining variables inzp[1]:62 [ main::$13 ] +Uplifting [main] best 512 combination reg byte a [ main::$13 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention phi +// The linker specification of the different segments. // Upstart .cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] + .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] // Global Constants & labels + // The target computer platform is the Commander X16, + // which implements banking in ram between 0xA0000 and 0xBFFF, + // and in rom between 0xC000 and 0xFFFF. .label SCREEN = $400 .segment Code // main +// Practically this means that the main() function is placed in main memory ... main: { - // [1] call func_bank1_a - // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] - func_bank1_a_from_main: - // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + // [1] call func_ram_bank1_a + // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] + func_ram_bank1_a_from_main: + // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #7 - // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #'0' jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 jmp __b1 // main::@1 __b1: - // [3] main::$0 = func_bank1_a::return#10 + // [3] main::$0 = func_ram_bank1_a::return#4 // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - // far call sta SCREEN - // [5] call func_bank1_b - // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] - func_bank1_b_from___b1: - // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 - lda #7 - // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank1_b - // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + // [5] call func_ram_bank1_b + // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] + func_ram_bank1_b_from___b1: + jsr func_ram_bank1_b jmp __b2 // main::@2 __b2: - // [7] main::$1 = func_bank1_b::return#3 - // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa - // far call + // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 + // Banked call to ram in bank 1 from main memory. + lda #func_ram_bank1_b.return sta SCREEN - // [9] call func_bank1_c - // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize - func_bank1_c_from___b2: + // [7] call func_ram_bank1_c + // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize + func_ram_bank1_c_from___b2: jsr $ff6e - .byte func_bank1_c + .byte func_ram_bank1_c .byte 1 - // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 jmp __b3 // main::@3 __b3: - // [11] main::$2 = func_bank1_c::return#2 - // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // far call + // [9] main::$2 = func_ram_bank1_c::return#2 + // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [13] call func_bank1_d - // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize - func_bank1_d_from___b3: + // [11] call func_ram_bank1_d + // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize + func_ram_bank1_d_from___b3: jsr $ff6e - .byte func_bank1_d + .byte func_ram_bank1_d .byte 1 - // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 jmp __b4 // main::@4 __b4: - // [15] main::$3 = func_bank1_d::return#2 - // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // far call + // [13] main::$3 = func_ram_bank1_d::return#2 + // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [17] call func_bank1_e - // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] - func_bank1_e_from___b4: - jsr func_bank1_e - // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + // [15] call func_ram_bank1_e + // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] + func_ram_bank1_e_from___b4: + // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 + ldx #7 + // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + lda #'0' + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 jmp __b5 // main::@5 __b5: - // [19] main::$4 = func_bank1_e::return#2 - // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // near call + // [17] main::$4 = func_ram_bank1_e::return#3 + // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [21] call func_bank1_f - // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] - func_bank1_f_from___b5: - jsr func_bank1_f - // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + // [19] call func_ram_bank1_f + // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize + func_ram_bank1_f_from___b5: + jsr $ff6e + .byte func_ram_bank1_f + .byte 1 + // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 jmp __b6 // main::@6 __b6: - // [23] main::$5 = func_bank1_f::return#2 - // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // near call + // [21] main::$5 = func_ram_bank1_f::return#2 + // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [25] call func_bank2_a - // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] - func_bank2_a_from___b6: - // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + // [23] call func_rom_bank2_a + // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] + func_rom_bank2_a_from___b6: + // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #7 - // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #'0' jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 jmp __b7 // main::@7 __b7: - // [27] main::$6 = func_bank2_a::return#10 - // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // far call + // [25] main::$6 = func_rom_bank2_a::return#4 + // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [29] call func_bank2_b - // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] - func_bank2_b_from___b7: - // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 - lda #7 - // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank2_b - // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + // [27] call func_rom_bank2_b + // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] + func_rom_bank2_b_from___b7: + // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 + ldx #7 + // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_rom_bank2_b + // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 jmp __b8 // main::@8 __b8: - // [31] main::$7 = func_bank2_b::return#3 - // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // far call + // [29] main::$7 = func_rom_bank2_b::return#4 + // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [33] call func_bank2_c - // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize - func_bank2_c_from___b8: + // [31] call func_rom_bank2_c + // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize + func_rom_bank2_c_from___b8: jsr $ff6e - .byte func_bank2_c + .byte func_rom_bank2_c .byte 2 - // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 jmp __b9 // main::@9 __b9: - // [35] main::$8 = func_bank2_c::return#2 - // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // far call + // [33] main::$8 = func_rom_bank2_c::return#2 + // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [37] call func_bank2_d - // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize - func_bank2_d_from___b9: + // [35] call func_rom_bank2_d + // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize + func_rom_bank2_d_from___b9: jsr $ff6e - .byte func_bank2_d + .byte func_rom_bank2_d .byte 2 - // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 jmp __b10 // main::@10 __b10: - // [39] main::$9 = func_bank2_d::return#2 - // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // far call + // [37] main::$9 = func_rom_bank2_d::return#2 + // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [41] call func_bank2_e - // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize - func_bank2_e_from___b10: + // [39] call func_rom_bank2_e + // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] + func_rom_bank2_e_from___b10: + // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #7 + // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #'0' jsr $ff6e - .byte func_bank2_e + .byte func_rom_bank2_e .byte 2 - // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 jmp __b11 // main::@11 __b11: - // [43] main::$10 = func_bank2_e::return#2 - // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // far call + // [41] main::$10 = func_rom_bank2_e::return#3 + // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [45] call func_bank2_f - // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize - func_bank2_f_from___b11: + // [43] call func_rom_bank2_f + // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize + func_rom_bank2_f_from___b11: jsr $ff6e - .byte func_bank2_f + .byte func_rom_bank2_f .byte 2 - // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 jmp __b12 // main::@12 __b12: - // [47] main::$11 = func_bank2_f::return#2 - // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // far call + // [45] main::$11 = func_rom_bank2_f::return#2 + // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // [47] call func_main_a + // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] + func_main_a_from___b12: + // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 + ldx #7 + // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_main_a + // [48] func_main_a::return#4 = func_main_a::return#2 + jmp __b13 + // main::@13 + __b13: + // [49] main::$12 = func_main_a::return#4 + // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // [51] call func_main_b + // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] + func_main_b_from___b13: + jsr func_main_b + // [52] func_main_b::return#2 = func_main_b::return#0 + jmp __b14 + // main::@14 + __b14: + // [53] main::$13 = func_main_b::return#2 + // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa + // Near call in main memory from main memory. sta SCREEN jmp __breturn // main::@return - __breturn: - // [49] return - rts -} -.segment stage - // func_bank1_a -// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) -func_bank1_a: { - // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank1_a::@return - __breturn: - // [52] return - rts -} -.segment platform - // func_bank1_b -// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) -func_bank1_b: { - // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank1_b::@return __breturn: // [55] return rts } -.segment stage - // func_bank1_c -// __register(A) char func_bank1_c(char a, char b) -func_bank1_c: { +.segment Bank1 + // func_ram_bank1_a +// Functional code +// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) +func_ram_bank1_a: { + // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_ram_bank1_a::@return + __breturn: + // [58] return + rts +} +.segment Bank2 + // func_ram_bank1_b +// The sequent functions will consider no banking calculations anymore. +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +// char func_ram_bank1_b(char a, char b) +func_ram_bank1_b: { .const a = '0' .const b = 7 - // [57] call func_bank1_a - // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] - func_bank1_a_from_func_bank1_c: - // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_a - // [58] func_bank1_a::return#2 = func_bank1_a::return#0 - jmp __b1 - // func_bank1_c::@1 - __b1: - // [59] func_bank1_c::return#0 = func_bank1_a::return#2 + .label return = a+b jmp __breturn - // func_bank1_c::@return + // func_ram_bank1_b::@return __breturn: // [60] return rts } - // func_bank1_d -// __register(A) char func_bank1_d(char a, char b) -func_bank1_d: { +.segment Bank1 + // func_ram_bank1_c +// __register(A) char func_ram_bank1_c(char a, char b) +func_ram_bank1_c: { .const a = '0' .const b = 7 - // [62] call func_bank2_a - // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] - func_bank2_a_from_func_bank1_d: - // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + // [62] call func_ram_bank1_a + // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] + func_ram_bank1_a_from_func_ram_bank1_c: + // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // [63] func_bank2_a::return#0 = func_bank2_a::return#1 + jsr func_ram_bank1_a + // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 jmp __b1 - // func_bank1_d::@1 + // func_ram_bank1_c::@1 __b1: - // [64] func_bank1_d::return#0 = func_bank2_a::return#0 + // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 jmp __breturn - // func_bank1_d::@return + // func_ram_bank1_c::@return __breturn: // [65] return rts } -.segment platform - // func_bank1_e -// __register(A) char func_bank1_e(char a, char b) -func_bank1_e: { + // func_ram_bank1_d +// __register(A) char func_ram_bank1_d(char a, char b) +func_ram_bank1_d: { .const a = '0' .const b = 7 - // [67] call func_bank1_a - // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] - func_bank1_a_from_func_bank1_e: - // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + // [67] call func_rom_bank2_a + // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] + func_rom_bank2_a_from_func_ram_bank1_d: + // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #a jsr $ff6e - .byte func_bank1_a - .byte 1 - // [68] func_bank1_a::return#4 = func_bank1_a::return#0 + .byte func_rom_bank2_a + .byte 2 + // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 jmp __b1 - // func_bank1_e::@1 + // func_ram_bank1_d::@1 __b1: - // [69] func_bank1_e::return#0 = func_bank1_a::return#4 + // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 jmp __breturn - // func_bank1_e::@return + // func_ram_bank1_d::@return __breturn: // [70] return rts } - // func_bank1_f -// __register(A) char func_bank1_f(char a, char b) -func_bank1_f: { - .const a = '0' - .const b = 7 - // [72] call func_bank2_a - // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] - func_bank2_a_from_func_bank1_f: - // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // [73] func_bank2_a::return#4 = func_bank2_a::return#1 + // func_ram_bank1_e +// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) +func_ram_bank1_e: { + // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + // [74] call func_rom_bank2_b + // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] + func_rom_bank2_b_from_func_ram_bank1_e: + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 jmp __b1 - // func_bank1_f::@1 + // func_ram_bank1_e::@1 __b1: - // [74] func_bank1_f::return#0 = func_bank2_a::return#4 + // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 jmp __breturn - // func_bank1_f::@return + // func_ram_bank1_e::@return __breturn: - // [75] return + // [77] return rts } - // func_bank2_a -// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) -func_bank2_a: { - // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank2_a::@return - __breturn: - // [78] return - rts -} - // func_bank2_b -// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) -func_bank2_b: { - // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank2_b::@return - __breturn: - // [81] return - rts -} - // func_bank2_c -// __register(A) char func_bank2_c(char a, char b) -func_bank2_c: { + // func_ram_bank1_f +// __register(A) char func_ram_bank1_f(char a, char b) +func_ram_bank1_f: { .const a = '0' .const b = 7 - // [83] call func_bank1_a - // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] - func_bank1_a_from_func_bank2_c: - // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + // [79] call func_main_a + // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] + func_main_a_from_func_ram_bank1_f: + // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // [80] func_main_a::return#0 = func_main_a::return#2 + jmp __b1 + // func_ram_bank1_f::@1 + __b1: + // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + jmp __breturn + // func_ram_bank1_f::@return + __breturn: + // [82] return + rts +} +.segment Bank2 + // func_rom_bank2_a +// The sequent functions will be banked using call method rom in bank number 2. +// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) +func_rom_bank2_a: { + // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_rom_bank2_a::@return + __breturn: + // [85] return + rts +} + // func_rom_bank2_b +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) +func_rom_bank2_b: { + // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_rom_bank2_b::@return + __breturn: + // [88] return + rts +} + // func_rom_bank2_c +// __register(A) char func_rom_bank2_c(char a, char b) +func_rom_bank2_c: { + .const a = '0' + .const b = 7 + // [90] call func_ram_bank1_a + // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] + func_ram_bank1_a_from_func_rom_bank2_c: + // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #a jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // [84] func_bank1_a::return#3 = func_bank1_a::return#0 + // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 jmp __b1 - // func_bank2_c::@1 + // func_rom_bank2_c::@1 __b1: - // [85] func_bank2_c::return#0 = func_bank1_a::return#3 + // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 jmp __breturn - // func_bank2_c::@return + // func_rom_bank2_c::@return __breturn: - // [86] return + // [93] return rts } - // func_bank2_d -// __register(A) char func_bank2_d(char a, char b) -func_bank2_d: { + // func_rom_bank2_d +// __register(A) char func_rom_bank2_d(char a, char b) +func_rom_bank2_d: { .const a = '0' .const b = 7 - // [88] call func_bank2_a - // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] - func_bank2_a_from_func_bank2_d: - // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + // [95] call func_rom_bank2_a + // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] + func_rom_bank2_a_from_func_rom_bank2_d: + // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 ldx #a - jsr func_bank2_a - // [89] func_bank2_a::return#3 = func_bank2_a::return#1 + jsr func_rom_bank2_a + // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 jmp __b1 - // func_bank2_d::@1 + // func_rom_bank2_d::@1 __b1: - // [90] func_bank2_d::return#0 = func_bank2_a::return#3 + // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 jmp __breturn - // func_bank2_d::@return + // func_rom_bank2_d::@return __breturn: - // [91] return + // [98] return rts } - // func_bank2_e -// __register(A) char func_bank2_e(char a, char b) -func_bank2_e: { - .const a = '0' - .const b = 7 - // [93] call func_bank2_b - // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] - func_bank2_b_from_func_bank2_e: - // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 - lda #b - // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank2_b - // [94] func_bank2_b::return#0 = func_bank2_b::return#1 + // func_rom_bank2_e +// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) +func_rom_bank2_e: { + // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + // [102] call func_rom_bank2_b + // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] + func_rom_bank2_b_from_func_rom_bank2_e: + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 jmp __b1 - // func_bank2_e::@1 + // func_rom_bank2_e::@1 __b1: - // [95] func_bank2_e::return#0 = func_bank2_b::return#0 + // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 jmp __breturn - // func_bank2_e::@return + // func_rom_bank2_e::@return __breturn: - // [96] return + // [105] return rts } - // func_bank2_f -// __register(A) char func_bank2_f(char a, char b) -func_bank2_f: { + // func_rom_bank2_f +// __register(A) char func_rom_bank2_f(char a, char b) +func_rom_bank2_f: { .const a = '0' .const b = 7 - // [98] call func_bank1_b - // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] - func_bank1_b_from_func_bank2_f: - // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 - lda #b - // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_b - // [99] func_bank1_b::return#0 = func_bank1_b::return#1 + // [107] call func_main_a + // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] + func_main_a_from_func_rom_bank2_f: + // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // [108] func_main_a::return#1 = func_main_a::return#2 jmp __b1 - // func_bank2_f::@1 + // func_rom_bank2_f::@1 __b1: - // [100] func_bank2_f::return#0 = func_bank1_b::return#0 + // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 jmp __breturn - // func_bank2_f::@return + // func_rom_bank2_f::@return __breturn: - // [101] return + // [110] return + rts +} +.segment Code + // func_main_a +// The sequent functions will be addressed in the default main memory location (segment Code). +// Allocated in main memory. +// __register(A) char func_main_a(__register(A) char a, __register(X) char b) +func_main_a: { + // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + // [114] call func_ram_bank1_e + // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] + func_ram_bank1_e_from_func_main_a: + // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy + // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + jmp __b1 + // func_main_a::@1 + __b1: + // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + jmp __breturn + // func_main_a::@return + __breturn: + // [117] return + rts +} + // func_main_b +// Allocated in main memory. +// __register(A) char func_main_b(char a, char b) +func_main_b: { + .const a = '0' + .const b = 7 + // [119] call func_rom_bank2_e + // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] + func_rom_bank2_e_from_func_main_b: + // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #b + // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #a + jsr $ff6e + .byte func_rom_bank2_e + .byte 2 + // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + jmp __b1 + // func_main_b::@1 + __b1: + // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + jmp __breturn + // func_main_b::@return + __breturn: + // [122] return rts } // File Data @@ -1933,6 +2280,8 @@ Removing instruction jmp __b9 Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b12 +Removing instruction jmp __b13 +Removing instruction jmp __b14 Removing instruction jmp __breturn Removing instruction jmp __breturn Removing instruction jmp __breturn @@ -1954,6 +2303,10 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction __breturn: Removing instruction __breturn: @@ -1963,165 +2316,199 @@ Removing instruction __breturn: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction func_bank1_a_from_main: +Removing instruction func_ram_bank1_a_from_main: Removing instruction __b1: -Removing instruction func_bank1_b_from___b1: +Removing instruction func_ram_bank1_b_from___b1: Removing instruction __b2: -Removing instruction func_bank1_c_from___b2: +Removing instruction func_ram_bank1_c_from___b2: Removing instruction __b3: -Removing instruction func_bank1_d_from___b3: +Removing instruction func_ram_bank1_d_from___b3: Removing instruction __b4: -Removing instruction func_bank1_e_from___b4: +Removing instruction func_ram_bank1_e_from___b4: Removing instruction __b5: -Removing instruction func_bank1_f_from___b5: +Removing instruction func_ram_bank1_f_from___b5: Removing instruction __b6: -Removing instruction func_bank2_a_from___b6: +Removing instruction func_rom_bank2_a_from___b6: Removing instruction __b7: -Removing instruction func_bank2_b_from___b7: +Removing instruction func_rom_bank2_b_from___b7: Removing instruction __b8: -Removing instruction func_bank2_c_from___b8: +Removing instruction func_rom_bank2_c_from___b8: Removing instruction __b9: -Removing instruction func_bank2_d_from___b9: +Removing instruction func_rom_bank2_d_from___b9: Removing instruction __b10: -Removing instruction func_bank2_e_from___b10: +Removing instruction func_rom_bank2_e_from___b10: Removing instruction __b11: -Removing instruction func_bank2_f_from___b11: +Removing instruction func_rom_bank2_f_from___b11: Removing instruction __b12: +Removing instruction func_main_a_from___b12: +Removing instruction __b13: +Removing instruction func_main_b_from___b13: +Removing instruction __b14: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __breturn: -Removing instruction func_bank1_a_from_func_bank1_c: +Removing instruction func_ram_bank1_a_from_func_ram_bank1_c: Removing instruction __b1: -Removing instruction func_bank2_a_from_func_bank1_d: +Removing instruction func_rom_bank2_a_from_func_ram_bank1_d: Removing instruction __b1: -Removing instruction func_bank1_a_from_func_bank1_e: +Removing instruction func_rom_bank2_b_from_func_ram_bank1_e: Removing instruction __b1: -Removing instruction func_bank2_a_from_func_bank1_f: +Removing instruction func_main_a_from_func_ram_bank1_f: Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: -Removing instruction func_bank1_a_from_func_bank2_c: +Removing instruction func_ram_bank1_a_from_func_rom_bank2_c: Removing instruction __b1: -Removing instruction func_bank2_a_from_func_bank2_d: +Removing instruction func_rom_bank2_a_from_func_rom_bank2_d: Removing instruction __b1: -Removing instruction func_bank2_b_from_func_bank2_e: +Removing instruction func_rom_bank2_b_from_func_rom_bank2_e: Removing instruction __b1: -Removing instruction func_bank1_b_from_func_bank2_f: +Removing instruction func_main_a_from_func_rom_bank2_f: +Removing instruction __b1: +Removing instruction func_ram_bank1_e_from_func_main_a: +Removing instruction __b1: +Removing instruction func_rom_bank2_e_from_func_main_b: Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::a -char func_bank1_a::a#4 // reg byte x 101.0 -char func_bank1_a::b -char func_bank1_a::b#4 // reg byte a 101.0 -char func_bank1_a::return -char func_bank1_a::return#0 // reg byte a 22.66666666666666 -char func_bank1_a::return#10 // reg byte a 4.0 -char func_bank1_a::return#2 // reg byte a 22.0 -char func_bank1_a::return#3 // reg byte a 22.0 -char func_bank1_a::return#4 // reg byte a 22.0 -char func_bank1_b(char a , char b) -char func_bank1_b::a -char func_bank1_b::a#2 // reg byte x 101.0 -char func_bank1_b::b -char func_bank1_b::b#2 // reg byte a 101.0 -char func_bank1_b::return -char func_bank1_b::return#0 // reg byte a 22.0 -char func_bank1_b::return#1 // reg byte a 28.5 -char func_bank1_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::a -__constant char func_bank1_c::a#0 = '0' // a -char func_bank1_c::b -__constant char func_bank1_c::b#0 = 7 // b -char func_bank1_c::return -char func_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::a -__constant char func_bank1_d::a#0 = '0' // a -char func_bank1_d::b -__constant char func_bank1_d::b#0 = 7 // b -char func_bank1_d::return -char func_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_bank1_d::return#2 // reg byte a 4.0 -char func_bank1_e(char a , char b) -char func_bank1_e::a -__constant char func_bank1_e::a#0 = '0' // a -char func_bank1_e::b -__constant char func_bank1_e::b#0 = 7 // b -char func_bank1_e::return -char func_bank1_e::return#0 // reg byte a 4.333333333333333 -char func_bank1_e::return#2 // reg byte a 4.0 -char func_bank1_f(char a , char b) -char func_bank1_f::a -__constant char func_bank1_f::a#0 = '0' // a -char func_bank1_f::b -__constant char func_bank1_f::b#0 = 7 // b -char func_bank1_f::return -char func_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::a -char func_bank2_a::a#4 // reg byte x 101.0 -char func_bank2_a::b -char func_bank2_a::b#4 // reg byte a 101.0 -char func_bank2_a::return -char func_bank2_a::return#0 // reg byte a 22.0 -char func_bank2_a::return#1 // reg byte a 22.666666666666664 -char func_bank2_a::return#10 // reg byte a 4.0 -char func_bank2_a::return#3 // reg byte a 22.0 -char func_bank2_a::return#4 // reg byte a 22.0 -char func_bank2_b(char a , char b) -char func_bank2_b::a -char func_bank2_b::a#2 // reg byte x 101.0 -char func_bank2_b::b -char func_bank2_b::b#2 // reg byte a 101.0 -char func_bank2_b::return -char func_bank2_b::return#0 // reg byte a 22.0 -char func_bank2_b::return#1 // reg byte a 28.5 -char func_bank2_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::a -__constant char func_bank2_c::a#0 = '0' // a -char func_bank2_c::b -__constant char func_bank2_c::b#0 = 7 // b -char func_bank2_c::return -char func_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::a -__constant char func_bank2_d::a#0 = '0' // a -char func_bank2_d::b -__constant char func_bank2_d::b#0 = 7 // b -char func_bank2_d::return -char func_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::a -__constant char func_bank2_e::a#0 = '0' // a -char func_bank2_e::b -__constant char func_bank2_e::b#0 = 7 // b -char func_bank2_e::return -char func_bank2_e::return#0 // reg byte a 4.333333333333333 -char func_bank2_e::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::a -__constant char func_bank2_f::a#0 = '0' // a -char func_bank2_f::b -__constant char func_bank2_f::b#0 = 7 // b -char func_bank2_f::return -char func_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_bank2_f::return#2 // reg byte a 4.0 +char func_main_a(char a , char b) +char func_main_a::a +char func_main_a::a#3 // reg byte a 101.0 +char func_main_a::b +char func_main_a::b#3 // reg byte x 50.5 +char func_main_a::return +char func_main_a::return#0 // reg byte a 22.0 +char func_main_a::return#1 // reg byte a 22.0 +char func_main_a::return#2 // reg byte a 25.0 +char func_main_a::return#4 // reg byte a 4.0 +char func_main_b(char a , char b) +char func_main_b::a +__constant char func_main_b::a#0 = '0' // a +char func_main_b::b +__constant char func_main_b::b#0 = 7 // b +char func_main_b::return +char func_main_b::return#0 // reg byte a 4.333333333333333 +char func_main_b::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::a +char func_ram_bank1_a::a#3 // reg byte x 101.0 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#3 // reg byte a 101.0 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 +char func_ram_bank1_a::return#2 // reg byte a 22.0 +char func_ram_bank1_a::return#3 // reg byte a 22.0 +char func_ram_bank1_a::return#4 // reg byte a 4.0 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::a +__constant char func_ram_bank1_b::a#0 = '0' // a +char func_ram_bank1_b::b +__constant char func_ram_bank1_b::b#0 = 7 // b +char func_ram_bank1_b::return +__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::a +__constant char func_ram_bank1_c::a#0 = '0' // a +char func_ram_bank1_c::b +__constant char func_ram_bank1_c::b#0 = 7 // b +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::a +__constant char func_ram_bank1_d::a#0 = '0' // a +char func_ram_bank1_d::b +__constant char func_ram_bank1_d::b#0 = 7 // b +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_d::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 // reg byte a 101.0 +char func_ram_bank1_e::a#2 // reg byte a 1102.0 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 // reg byte x 202.0 +char func_ram_bank1_e::b#2 // reg byte x 551.0 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 // reg byte a 276.0 +char func_ram_bank1_e::return#2 // reg byte a 202.0 +char func_ram_bank1_e::return#3 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::a +__constant char func_ram_bank1_f::a#0 = '0' // a +char func_ram_bank1_f::b +__constant char func_ram_bank1_f::b#0 = 7 // b +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::a +char func_rom_bank2_a::a#3 // reg byte x 101.0 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#3 // reg byte a 101.0 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 // reg byte a 22.0 +char func_rom_bank2_a::return#1 // reg byte a 25.0 +char func_rom_bank2_a::return#3 // reg byte a 22.0 +char func_rom_bank2_a::return#4 // reg byte a 4.0 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 // reg byte a 1001.0 +char func_rom_bank2_b::a#1 // reg byte a 101.0 +char func_rom_bank2_b::a#3 // reg byte a 11103.0 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 // reg byte x 2002.0 +char func_rom_bank2_b::b#1 // reg byte x 202.0 +char func_rom_bank2_b::b#3 // reg byte x 11103.0 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 // reg byte a 2002.0 +char func_rom_bank2_b::return#1 // reg byte a 2221.0 +char func_rom_bank2_b::return#3 // reg byte a 202.0 +char func_rom_bank2_b::return#4 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::a +__constant char func_rom_bank2_c::a#0 = '0' // a +char func_rom_bank2_c::b +__constant char func_rom_bank2_c::b#0 = 7 // b +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::a +__constant char func_rom_bank2_d::a#0 = '0' // a +char func_rom_bank2_d::b +__constant char func_rom_bank2_d::b#0 = 7 // b +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::a +char func_rom_bank2_e::a#2 // reg byte a 101.0 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#2 // reg byte x 50.5 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 // reg byte a 28.5 +char func_rom_bank2_e::return#2 // reg byte a 22.0 +char func_rom_bank2_e::return#3 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::a +__constant char func_rom_bank2_f::a#0 = '0' // a +char func_rom_bank2_f::b +__constant char func_rom_bank2_f::b#0 = 7 // b +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_f::return#2 // reg byte a 4.0 void main() char main::$0 // reg byte a 4.0 -char main::$1 // reg byte a 4.0 char main::$10 // reg byte a 4.0 char main::$11 // reg byte a 4.0 +char main::$12 // reg byte a 4.0 +char main::$13 // reg byte a 4.0 char main::$2 // reg byte a 4.0 char main::$3 // reg byte a 4.0 char main::$4 // reg byte a 4.0 @@ -2131,511 +2518,603 @@ char main::$7 // reg byte a 4.0 char main::$8 // reg byte a 4.0 char main::$9 // reg byte a 4.0 -reg byte x [ func_bank1_a::a#4 ] -reg byte a [ func_bank1_a::b#4 ] -reg byte x [ func_bank1_b::a#2 ] -reg byte a [ func_bank1_b::b#2 ] -reg byte x [ func_bank2_a::a#4 ] -reg byte a [ func_bank2_a::b#4 ] -reg byte x [ func_bank2_b::a#2 ] -reg byte a [ func_bank2_b::b#2 ] -reg byte a [ func_bank1_a::return#10 ] +reg byte x [ func_ram_bank1_a::a#3 ] +reg byte a [ func_ram_bank1_a::b#3 ] +reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +reg byte x [ func_rom_bank2_a::a#3 ] +reg byte a [ func_rom_bank2_a::b#3 ] +reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +reg byte a [ func_rom_bank2_e::a#2 ] +reg byte x [ func_rom_bank2_e::b#2 ] +reg byte a [ func_main_a::a#3 ] +reg byte x [ func_main_a::b#3 ] +reg byte a [ func_ram_bank1_a::return#4 ] reg byte a [ main::$0 ] -reg byte a [ func_bank1_b::return#3 ] -reg byte a [ main::$1 ] -reg byte a [ func_bank1_c::return#2 ] +reg byte a [ func_ram_bank1_c::return#2 ] reg byte a [ main::$2 ] -reg byte a [ func_bank1_d::return#2 ] +reg byte a [ func_ram_bank1_d::return#2 ] reg byte a [ main::$3 ] -reg byte a [ func_bank1_e::return#2 ] +reg byte a [ func_ram_bank1_e::return#3 ] reg byte a [ main::$4 ] -reg byte a [ func_bank1_f::return#2 ] +reg byte a [ func_ram_bank1_f::return#2 ] reg byte a [ main::$5 ] -reg byte a [ func_bank2_a::return#10 ] +reg byte a [ func_rom_bank2_a::return#4 ] reg byte a [ main::$6 ] -reg byte a [ func_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_b::return#4 ] reg byte a [ main::$7 ] -reg byte a [ func_bank2_c::return#2 ] +reg byte a [ func_rom_bank2_c::return#2 ] reg byte a [ main::$8 ] -reg byte a [ func_bank2_d::return#2 ] +reg byte a [ func_rom_bank2_d::return#2 ] reg byte a [ main::$9 ] -reg byte a [ func_bank2_e::return#2 ] +reg byte a [ func_rom_bank2_e::return#3 ] reg byte a [ main::$10 ] -reg byte a [ func_bank2_f::return#2 ] +reg byte a [ func_rom_bank2_f::return#2 ] reg byte a [ main::$11 ] -reg byte a [ func_bank1_a::return#0 ] -reg byte a [ func_bank1_b::return#1 ] -reg byte a [ func_bank1_a::return#2 ] -reg byte a [ func_bank1_c::return#0 ] -reg byte a [ func_bank2_a::return#0 ] -reg byte a [ func_bank1_d::return#0 ] -reg byte a [ func_bank1_a::return#4 ] -reg byte a [ func_bank1_e::return#0 ] -reg byte a [ func_bank2_a::return#4 ] -reg byte a [ func_bank1_f::return#0 ] -reg byte a [ func_bank2_a::return#1 ] -reg byte a [ func_bank2_b::return#1 ] -reg byte a [ func_bank1_a::return#3 ] -reg byte a [ func_bank2_c::return#0 ] -reg byte a [ func_bank2_a::return#3 ] -reg byte a [ func_bank2_d::return#0 ] -reg byte a [ func_bank2_b::return#0 ] -reg byte a [ func_bank2_e::return#0 ] -reg byte a [ func_bank1_b::return#0 ] -reg byte a [ func_bank2_f::return#0 ] +reg byte a [ func_main_a::return#4 ] +reg byte a [ main::$12 ] +reg byte a [ func_main_b::return#2 ] +reg byte a [ main::$13 ] +reg byte a [ func_ram_bank1_a::return#0 ] +reg byte a [ func_ram_bank1_a::return#2 ] +reg byte a [ func_ram_bank1_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#0 ] +reg byte a [ func_ram_bank1_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#0 ] +reg byte a [ func_ram_bank1_e::return#0 ] +reg byte a [ func_main_a::return#0 ] +reg byte a [ func_ram_bank1_f::return#0 ] +reg byte a [ func_rom_bank2_a::return#1 ] +reg byte a [ func_rom_bank2_b::return#1 ] +reg byte a [ func_ram_bank1_a::return#3 ] +reg byte a [ func_rom_bank2_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#3 ] +reg byte a [ func_rom_bank2_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_e::return#0 ] +reg byte a [ func_main_a::return#1 ] +reg byte a [ func_rom_bank2_f::return#0 ] +reg byte a [ func_ram_bank1_e::return#2 ] +reg byte a [ func_main_a::return#2 ] +reg byte a [ func_rom_bank2_e::return#2 ] +reg byte a [ func_main_b::return#0 ] FINAL ASSEMBLER -Score: 326 +Score: 368 // File Comments -// Test a far call procedure with a calling convention phi +// The linker specification of the different segments. // Upstart .cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] + .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] // Global Constants & labels + // The target computer platform is the Commander X16, + // which implements banking in ram between 0xA0000 and 0xBFFF, + // and in rom between 0xC000 and 0xFFFF. .label SCREEN = $400 .segment Code // main +// Practically this means that the main() function is placed in main memory ... main: { - // func_bank1_a('0', 7) - // [1] call func_bank1_a - // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] - // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + // func_ram_bank1_a('0', 7) + // [1] call func_ram_bank1_a + // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] + // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #7 - // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #'0' jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a('0', 7) - // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + // func_ram_bank1_a('0', 7) + // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 // main::@1 - // [3] main::$0 = func_bank1_a::return#10 - // SCREEN[0] = func_bank1_a('0', 7) + // [3] main::$0 = func_ram_bank1_a::return#4 + // SCREEN[0] = func_ram_bank1_a('0', 7) // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - // far call sta SCREEN - // func_bank1_b('0', 7) - // [5] call func_bank1_b - // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] - // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 - lda #7 - // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank1_b - // func_bank1_b('0', 7) - // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + // func_ram_bank1_b('0', 7) + // [5] call func_ram_bank1_b + // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] + jsr func_ram_bank1_b // main::@2 - // [7] main::$1 = func_bank1_b::return#3 - // SCREEN[0] = func_bank1_b('0', 7) - // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa - // far call + // SCREEN[0] = func_ram_bank1_b('0', 7) + // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 + // Banked call to ram in bank 1 from main memory. + lda #func_ram_bank1_b.return sta SCREEN - // func_bank1_c('0', 7) - // [9] call func_bank1_c - // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize + // func_ram_bank1_c('0', 7) + // [7] call func_ram_bank1_c + // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize jsr $ff6e - .byte func_bank1_c + .byte func_ram_bank1_c .byte 1 - // func_bank1_c('0', 7) - // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + // func_ram_bank1_c('0', 7) + // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 // main::@3 - // [11] main::$2 = func_bank1_c::return#2 - // SCREEN[0] = func_bank1_c('0', 7) - // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // far call + // [9] main::$2 = func_ram_bank1_c::return#2 + // SCREEN[0] = func_ram_bank1_c('0', 7) + // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_d('0', 7) - // [13] call func_bank1_d - // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize + // func_ram_bank1_d('0', 7) + // [11] call func_ram_bank1_d + // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize jsr $ff6e - .byte func_bank1_d + .byte func_ram_bank1_d .byte 1 - // func_bank1_d('0', 7) - // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + // func_ram_bank1_d('0', 7) + // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 // main::@4 - // [15] main::$3 = func_bank1_d::return#2 - // SCREEN[0] = func_bank1_d('0', 7) - // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // far call + // [13] main::$3 = func_ram_bank1_d::return#2 + // SCREEN[0] = func_ram_bank1_d('0', 7) + // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_e('0', 7) - // [17] call func_bank1_e - // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] - jsr func_bank1_e - // func_bank1_e('0', 7) - // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + // func_ram_bank1_e('0', 7) + // [15] call func_ram_bank1_e + // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] + // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 + ldx #7 + // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + lda #'0' + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e('0', 7) + // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 // main::@5 - // [19] main::$4 = func_bank1_e::return#2 - // SCREEN[0] = func_bank1_e('0', 7) - // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // near call + // [17] main::$4 = func_ram_bank1_e::return#3 + // SCREEN[0] = func_ram_bank1_e('0', 7) + // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_f('0', 7) - // [21] call func_bank1_f - // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] - jsr func_bank1_f - // func_bank1_f('0', 7) - // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + // func_ram_bank1_f('0', 7) + // [19] call func_ram_bank1_f + // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_ram_bank1_f + .byte 1 + // func_ram_bank1_f('0', 7) + // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 // main::@6 - // [23] main::$5 = func_bank1_f::return#2 - // SCREEN[0] = func_bank1_f('0', 7) - // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // near call + // [21] main::$5 = func_ram_bank1_f::return#2 + // SCREEN[0] = func_ram_bank1_f('0', 7) + // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_a('0', 7) - // [25] call func_bank2_a - // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] - // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + // func_rom_bank2_a('0', 7) + // [23] call func_rom_bank2_a + // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] + // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #7 - // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #'0' jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // func_bank2_a('0', 7) - // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + // func_rom_bank2_a('0', 7) + // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 // main::@7 - // [27] main::$6 = func_bank2_a::return#10 - // SCREEN[0] = func_bank2_a('0', 7) - // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // far call + // [25] main::$6 = func_rom_bank2_a::return#4 + // SCREEN[0] = func_rom_bank2_a('0', 7) + // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_b('0', 7) - // [29] call func_bank2_b - // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] - // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 - lda #7 - // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank2_b - // func_bank2_b('0', 7) - // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + // func_rom_bank2_b('0', 7) + // [27] call func_rom_bank2_b + // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] + // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 + ldx #7 + // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_rom_bank2_b + // func_rom_bank2_b('0', 7) + // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 // main::@8 - // [31] main::$7 = func_bank2_b::return#3 - // SCREEN[0] = func_bank2_b('0', 7) - // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // far call + // [29] main::$7 = func_rom_bank2_b::return#4 + // SCREEN[0] = func_rom_bank2_b('0', 7) + // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_c('0', 7) - // [33] call func_bank2_c - // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize + // func_rom_bank2_c('0', 7) + // [31] call func_rom_bank2_c + // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize jsr $ff6e - .byte func_bank2_c + .byte func_rom_bank2_c .byte 2 - // func_bank2_c('0', 7) - // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + // func_rom_bank2_c('0', 7) + // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 // main::@9 - // [35] main::$8 = func_bank2_c::return#2 - // SCREEN[0] = func_bank2_c('0', 7) - // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // far call + // [33] main::$8 = func_rom_bank2_c::return#2 + // SCREEN[0] = func_rom_bank2_c('0', 7) + // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_d('0', 7) - // [37] call func_bank2_d - // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize + // func_rom_bank2_d('0', 7) + // [35] call func_rom_bank2_d + // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize jsr $ff6e - .byte func_bank2_d + .byte func_rom_bank2_d .byte 2 - // func_bank2_d('0', 7) - // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + // func_rom_bank2_d('0', 7) + // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 // main::@10 - // [39] main::$9 = func_bank2_d::return#2 - // SCREEN[0] = func_bank2_d('0', 7) - // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // far call + // [37] main::$9 = func_rom_bank2_d::return#2 + // SCREEN[0] = func_rom_bank2_d('0', 7) + // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_e('0', 7) - // [41] call func_bank2_e - // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize + // func_rom_bank2_e('0', 7) + // [39] call func_rom_bank2_e + // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] + // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #7 + // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #'0' jsr $ff6e - .byte func_bank2_e + .byte func_rom_bank2_e .byte 2 - // func_bank2_e('0', 7) - // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + // func_rom_bank2_e('0', 7) + // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 // main::@11 - // [43] main::$10 = func_bank2_e::return#2 - // SCREEN[0] = func_bank2_e('0', 7) - // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // far call + // [41] main::$10 = func_rom_bank2_e::return#3 + // SCREEN[0] = func_rom_bank2_e('0', 7) + // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_f('0', 7) - // [45] call func_bank2_f - // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize + // func_rom_bank2_f('0', 7) + // [43] call func_rom_bank2_f + // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize jsr $ff6e - .byte func_bank2_f + .byte func_rom_bank2_f .byte 2 - // func_bank2_f('0', 7) - // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + // func_rom_bank2_f('0', 7) + // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 // main::@12 - // [47] main::$11 = func_bank2_f::return#2 - // SCREEN[0] = func_bank2_f('0', 7) - // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // far call + // [45] main::$11 = func_rom_bank2_f::return#2 + // SCREEN[0] = func_rom_bank2_f('0', 7) + // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_a('0', 7) + // [47] call func_main_a + // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] + // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 + ldx #7 + // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_main_a + // func_main_a('0', 7) + // [48] func_main_a::return#4 = func_main_a::return#2 + // main::@13 + // [49] main::$12 = func_main_a::return#4 + // SCREEN[0] = func_main_a('0', 7) + // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_b('0', 7) + // [51] call func_main_b + // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] + jsr func_main_b + // func_main_b('0', 7) + // [52] func_main_b::return#2 = func_main_b::return#0 + // main::@14 + // [53] main::$13 = func_main_b::return#2 + // SCREEN[0] = func_main_b('0', 7) + // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa + // Near call in main memory from main memory. sta SCREEN // main::@return // } - // [49] return - rts -} -.segment stage - // func_bank1_a -// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) -func_bank1_a: { - // a+b - // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_bank1_a::@return - // } - // [52] return - rts -} -.segment platform - // func_bank1_b -// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) -func_bank1_b: { - // a+b - // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_bank1_b::@return - // } // [55] return rts } -.segment stage - // func_bank1_c -// __register(A) char func_bank1_c(char a, char b) -func_bank1_c: { +.segment Bank1 + // func_ram_bank1_a +// Functional code +// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) +func_ram_bank1_a: { + // a + b + // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_ram_bank1_a::@return + // } + // [58] return + rts +} +.segment Bank2 + // func_ram_bank1_b +// The sequent functions will consider no banking calculations anymore. +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +// char func_ram_bank1_b(char a, char b) +func_ram_bank1_b: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) - // [57] call func_bank1_a - // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] - // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_a - // func_bank1_a(a,b) - // [58] func_bank1_a::return#2 = func_bank1_a::return#0 - // func_bank1_c::@1 - // [59] func_bank1_c::return#0 = func_bank1_a::return#2 - // func_bank1_c::@return - // } + .label return = a+b + // func_ram_bank1_b::@return // [60] return rts } - // func_bank1_d -// __register(A) char func_bank1_d(char a, char b) -func_bank1_d: { +.segment Bank1 + // func_ram_bank1_c +// __register(A) char func_ram_bank1_c(char a, char b) +func_ram_bank1_c: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) - // [62] call func_bank2_a - // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] - // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + // func_ram_bank1_a(a, b) + // [62] call func_ram_bank1_a + // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] + // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // func_bank2_a(a,b) - // [63] func_bank2_a::return#0 = func_bank2_a::return#1 - // func_bank1_d::@1 - // [64] func_bank1_d::return#0 = func_bank2_a::return#0 - // func_bank1_d::@return + jsr func_ram_bank1_a + // func_ram_bank1_a(a, b) + // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 + // func_ram_bank1_c::@1 + // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 + // func_ram_bank1_c::@return // } // [65] return rts } -.segment platform - // func_bank1_e -// __register(A) char func_bank1_e(char a, char b) -func_bank1_e: { + // func_ram_bank1_d +// __register(A) char func_ram_bank1_d(char a, char b) +func_ram_bank1_d: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) - // [67] call func_bank1_a - // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] - // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + // func_rom_bank2_a(a, b) + // [67] call func_rom_bank2_a + // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] + // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #a jsr $ff6e - .byte func_bank1_a - .byte 1 - // func_bank1_a(a,b) - // [68] func_bank1_a::return#4 = func_bank1_a::return#0 - // func_bank1_e::@1 - // [69] func_bank1_e::return#0 = func_bank1_a::return#4 - // func_bank1_e::@return + .byte func_rom_bank2_a + .byte 2 + // func_rom_bank2_a(a, b) + // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 + // func_ram_bank1_d::@1 + // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 + // func_ram_bank1_d::@return // } // [70] return rts } - // func_bank1_f -// __register(A) char func_bank1_f(char a, char b) -func_bank1_f: { - .const a = '0' - .const b = 7 - // func_bank2_a(a,b) - // [72] call func_bank2_a - // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] - // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // func_bank2_a(a,b) - // [73] func_bank2_a::return#4 = func_bank2_a::return#1 - // func_bank1_f::@1 - // [74] func_bank1_f::return#0 = func_bank2_a::return#4 - // func_bank1_f::@return + // func_ram_bank1_e +// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) +func_ram_bank1_e: { + // func_rom_bank2_b(a, b) + // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + // [74] call func_rom_bank2_b + // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 + // func_ram_bank1_e::@1 + // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 + // func_ram_bank1_e::@return // } - // [75] return + // [77] return rts } - // func_bank2_a -// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) -func_bank2_a: { - // a+b - // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + // func_ram_bank1_f +// __register(A) char func_ram_bank1_f(char a, char b) +func_ram_bank1_f: { + .const a = '0' + .const b = 7 + // func_main_a(a, b) + // [79] call func_main_a + // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] + // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // func_main_a(a, b) + // [80] func_main_a::return#0 = func_main_a::return#2 + // func_ram_bank1_f::@1 + // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + // func_ram_bank1_f::@return + // } + // [82] return + rts +} +.segment Bank2 + // func_rom_bank2_a +// The sequent functions will be banked using call method rom in bank number 2. +// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) +func_rom_bank2_a: { + // a + b + // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa stx.z $ff clc adc.z $ff - // func_bank2_a::@return + // func_rom_bank2_a::@return // } - // [78] return + // [85] return rts } - // func_bank2_b -// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) -func_bank2_b: { - // a+b - // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + // func_rom_bank2_b +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) +func_rom_bank2_b: { + // a + b + // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx stx.z $ff clc adc.z $ff - // func_bank2_b::@return + // func_rom_bank2_b::@return // } - // [81] return + // [88] return rts } - // func_bank2_c -// __register(A) char func_bank2_c(char a, char b) -func_bank2_c: { + // func_rom_bank2_c +// __register(A) char func_rom_bank2_c(char a, char b) +func_rom_bank2_c: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) - // [83] call func_bank1_a - // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] - // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + // func_ram_bank1_a(a, b) + // [90] call func_ram_bank1_a + // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] + // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #a jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a(a,b) - // [84] func_bank1_a::return#3 = func_bank1_a::return#0 - // func_bank2_c::@1 - // [85] func_bank2_c::return#0 = func_bank1_a::return#3 - // func_bank2_c::@return + // func_ram_bank1_a(a, b) + // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 + // func_rom_bank2_c::@1 + // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 + // func_rom_bank2_c::@return // } - // [86] return + // [93] return rts } - // func_bank2_d -// __register(A) char func_bank2_d(char a, char b) -func_bank2_d: { + // func_rom_bank2_d +// __register(A) char func_rom_bank2_d(char a, char b) +func_rom_bank2_d: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) - // [88] call func_bank2_a - // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] - // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + // func_rom_bank2_a(a, b) + // [95] call func_rom_bank2_a + // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] + // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 ldx #a - jsr func_bank2_a - // func_bank2_a(a,b) - // [89] func_bank2_a::return#3 = func_bank2_a::return#1 - // func_bank2_d::@1 - // [90] func_bank2_d::return#0 = func_bank2_a::return#3 - // func_bank2_d::@return + jsr func_rom_bank2_a + // func_rom_bank2_a(a, b) + // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 + // func_rom_bank2_d::@1 + // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 + // func_rom_bank2_d::@return // } - // [91] return + // [98] return rts } - // func_bank2_e -// __register(A) char func_bank2_e(char a, char b) -func_bank2_e: { - .const a = '0' - .const b = 7 - // func_bank2_b(a,b) - // [93] call func_bank2_b - // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] - // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 - lda #b - // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank2_b - // func_bank2_b(a,b) - // [94] func_bank2_b::return#0 = func_bank2_b::return#1 - // func_bank2_e::@1 - // [95] func_bank2_e::return#0 = func_bank2_b::return#0 - // func_bank2_e::@return + // func_rom_bank2_e +// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) +func_rom_bank2_e: { + // func_rom_bank2_b(a, b) + // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + // [102] call func_rom_bank2_b + // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 + // func_rom_bank2_e::@1 + // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 + // func_rom_bank2_e::@return // } - // [96] return + // [105] return rts } - // func_bank2_f -// __register(A) char func_bank2_f(char a, char b) -func_bank2_f: { + // func_rom_bank2_f +// __register(A) char func_rom_bank2_f(char a, char b) +func_rom_bank2_f: { .const a = '0' .const b = 7 - // func_bank1_b(a,b) - // [98] call func_bank1_b - // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] - // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 - lda #b - // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_b - // func_bank1_b(a,b) - // [99] func_bank1_b::return#0 = func_bank1_b::return#1 - // func_bank2_f::@1 - // [100] func_bank2_f::return#0 = func_bank1_b::return#0 - // func_bank2_f::@return + // func_main_a(a, b) + // [107] call func_main_a + // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] + // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // func_main_a(a, b) + // [108] func_main_a::return#1 = func_main_a::return#2 + // func_rom_bank2_f::@1 + // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 + // func_rom_bank2_f::@return // } - // [101] return + // [110] return + rts +} +.segment Code + // func_main_a +// The sequent functions will be addressed in the default main memory location (segment Code). +// Allocated in main memory. +// __register(A) char func_main_a(__register(A) char a, __register(X) char b) +func_main_a: { + // func_ram_bank1_e(a, b) + // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + // [114] call func_ram_bank1_e + // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] + // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy + // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e(a, b) + // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + // func_main_a::@1 + // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + // func_main_a::@return + // } + // [117] return + rts +} + // func_main_b +// Allocated in main memory. +// __register(A) char func_main_b(char a, char b) +func_main_b: { + .const a = '0' + .const b = 7 + // func_rom_bank2_e(a, b) + // [119] call func_rom_bank2_e + // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] + // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #b + // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #a + jsr $ff6e + .byte func_rom_bank2_e + .byte 2 + // func_rom_bank2_e(a, b) + // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + // func_main_b::@1 + // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + // func_main_b::@return + // } + // [122] return rts } // File Data diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.sym b/src/test/ref/procedure-callingconvention-phi-bank-5.sym index c0905901f..4b1b61e72 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.sym +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.sym @@ -1,113 +1,137 @@ __constant char * const SCREEN = (char *) 1024 -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::a -char func_bank1_a::a#4 // reg byte x 101.0 -char func_bank1_a::b -char func_bank1_a::b#4 // reg byte a 101.0 -char func_bank1_a::return -char func_bank1_a::return#0 // reg byte a 22.66666666666666 -char func_bank1_a::return#10 // reg byte a 4.0 -char func_bank1_a::return#2 // reg byte a 22.0 -char func_bank1_a::return#3 // reg byte a 22.0 -char func_bank1_a::return#4 // reg byte a 22.0 -char func_bank1_b(char a , char b) -char func_bank1_b::a -char func_bank1_b::a#2 // reg byte x 101.0 -char func_bank1_b::b -char func_bank1_b::b#2 // reg byte a 101.0 -char func_bank1_b::return -char func_bank1_b::return#0 // reg byte a 22.0 -char func_bank1_b::return#1 // reg byte a 28.5 -char func_bank1_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::a -__constant char func_bank1_c::a#0 = '0' // a -char func_bank1_c::b -__constant char func_bank1_c::b#0 = 7 // b -char func_bank1_c::return -char func_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::a -__constant char func_bank1_d::a#0 = '0' // a -char func_bank1_d::b -__constant char func_bank1_d::b#0 = 7 // b -char func_bank1_d::return -char func_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_bank1_d::return#2 // reg byte a 4.0 -char func_bank1_e(char a , char b) -char func_bank1_e::a -__constant char func_bank1_e::a#0 = '0' // a -char func_bank1_e::b -__constant char func_bank1_e::b#0 = 7 // b -char func_bank1_e::return -char func_bank1_e::return#0 // reg byte a 4.333333333333333 -char func_bank1_e::return#2 // reg byte a 4.0 -char func_bank1_f(char a , char b) -char func_bank1_f::a -__constant char func_bank1_f::a#0 = '0' // a -char func_bank1_f::b -__constant char func_bank1_f::b#0 = 7 // b -char func_bank1_f::return -char func_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::a -char func_bank2_a::a#4 // reg byte x 101.0 -char func_bank2_a::b -char func_bank2_a::b#4 // reg byte a 101.0 -char func_bank2_a::return -char func_bank2_a::return#0 // reg byte a 22.0 -char func_bank2_a::return#1 // reg byte a 22.666666666666664 -char func_bank2_a::return#10 // reg byte a 4.0 -char func_bank2_a::return#3 // reg byte a 22.0 -char func_bank2_a::return#4 // reg byte a 22.0 -char func_bank2_b(char a , char b) -char func_bank2_b::a -char func_bank2_b::a#2 // reg byte x 101.0 -char func_bank2_b::b -char func_bank2_b::b#2 // reg byte a 101.0 -char func_bank2_b::return -char func_bank2_b::return#0 // reg byte a 22.0 -char func_bank2_b::return#1 // reg byte a 28.5 -char func_bank2_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::a -__constant char func_bank2_c::a#0 = '0' // a -char func_bank2_c::b -__constant char func_bank2_c::b#0 = 7 // b -char func_bank2_c::return -char func_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::a -__constant char func_bank2_d::a#0 = '0' // a -char func_bank2_d::b -__constant char func_bank2_d::b#0 = 7 // b -char func_bank2_d::return -char func_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::a -__constant char func_bank2_e::a#0 = '0' // a -char func_bank2_e::b -__constant char func_bank2_e::b#0 = 7 // b -char func_bank2_e::return -char func_bank2_e::return#0 // reg byte a 4.333333333333333 -char func_bank2_e::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::a -__constant char func_bank2_f::a#0 = '0' // a -char func_bank2_f::b -__constant char func_bank2_f::b#0 = 7 // b -char func_bank2_f::return -char func_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_bank2_f::return#2 // reg byte a 4.0 +char func_main_a(char a , char b) +char func_main_a::a +char func_main_a::a#3 // reg byte a 101.0 +char func_main_a::b +char func_main_a::b#3 // reg byte x 50.5 +char func_main_a::return +char func_main_a::return#0 // reg byte a 22.0 +char func_main_a::return#1 // reg byte a 22.0 +char func_main_a::return#2 // reg byte a 25.0 +char func_main_a::return#4 // reg byte a 4.0 +char func_main_b(char a , char b) +char func_main_b::a +__constant char func_main_b::a#0 = '0' // a +char func_main_b::b +__constant char func_main_b::b#0 = 7 // b +char func_main_b::return +char func_main_b::return#0 // reg byte a 4.333333333333333 +char func_main_b::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::a +char func_ram_bank1_a::a#3 // reg byte x 101.0 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#3 // reg byte a 101.0 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 +char func_ram_bank1_a::return#2 // reg byte a 22.0 +char func_ram_bank1_a::return#3 // reg byte a 22.0 +char func_ram_bank1_a::return#4 // reg byte a 4.0 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::a +__constant char func_ram_bank1_b::a#0 = '0' // a +char func_ram_bank1_b::b +__constant char func_ram_bank1_b::b#0 = 7 // b +char func_ram_bank1_b::return +__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::a +__constant char func_ram_bank1_c::a#0 = '0' // a +char func_ram_bank1_c::b +__constant char func_ram_bank1_c::b#0 = 7 // b +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::a +__constant char func_ram_bank1_d::a#0 = '0' // a +char func_ram_bank1_d::b +__constant char func_ram_bank1_d::b#0 = 7 // b +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_d::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 // reg byte a 101.0 +char func_ram_bank1_e::a#2 // reg byte a 1102.0 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 // reg byte x 202.0 +char func_ram_bank1_e::b#2 // reg byte x 551.0 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 // reg byte a 276.0 +char func_ram_bank1_e::return#2 // reg byte a 202.0 +char func_ram_bank1_e::return#3 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::a +__constant char func_ram_bank1_f::a#0 = '0' // a +char func_ram_bank1_f::b +__constant char func_ram_bank1_f::b#0 = 7 // b +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::a +char func_rom_bank2_a::a#3 // reg byte x 101.0 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#3 // reg byte a 101.0 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 // reg byte a 22.0 +char func_rom_bank2_a::return#1 // reg byte a 25.0 +char func_rom_bank2_a::return#3 // reg byte a 22.0 +char func_rom_bank2_a::return#4 // reg byte a 4.0 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 // reg byte a 1001.0 +char func_rom_bank2_b::a#1 // reg byte a 101.0 +char func_rom_bank2_b::a#3 // reg byte a 11103.0 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 // reg byte x 2002.0 +char func_rom_bank2_b::b#1 // reg byte x 202.0 +char func_rom_bank2_b::b#3 // reg byte x 11103.0 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 // reg byte a 2002.0 +char func_rom_bank2_b::return#1 // reg byte a 2221.0 +char func_rom_bank2_b::return#3 // reg byte a 202.0 +char func_rom_bank2_b::return#4 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::a +__constant char func_rom_bank2_c::a#0 = '0' // a +char func_rom_bank2_c::b +__constant char func_rom_bank2_c::b#0 = 7 // b +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::a +__constant char func_rom_bank2_d::a#0 = '0' // a +char func_rom_bank2_d::b +__constant char func_rom_bank2_d::b#0 = 7 // b +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::a +char func_rom_bank2_e::a#2 // reg byte a 101.0 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#2 // reg byte x 50.5 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 // reg byte a 28.5 +char func_rom_bank2_e::return#2 // reg byte a 22.0 +char func_rom_bank2_e::return#3 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::a +__constant char func_rom_bank2_f::a#0 = '0' // a +char func_rom_bank2_f::b +__constant char func_rom_bank2_f::b#0 = 7 // b +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_f::return#2 // reg byte a 4.0 void main() char main::$0 // reg byte a 4.0 -char main::$1 // reg byte a 4.0 char main::$10 // reg byte a 4.0 char main::$11 // reg byte a 4.0 +char main::$12 // reg byte a 4.0 +char main::$13 // reg byte a 4.0 char main::$2 // reg byte a 4.0 char main::$3 // reg byte a 4.0 char main::$4 // reg byte a 4.0 @@ -117,55 +141,64 @@ char main::$7 // reg byte a 4.0 char main::$8 // reg byte a 4.0 char main::$9 // reg byte a 4.0 -reg byte x [ func_bank1_a::a#4 ] -reg byte a [ func_bank1_a::b#4 ] -reg byte x [ func_bank1_b::a#2 ] -reg byte a [ func_bank1_b::b#2 ] -reg byte x [ func_bank2_a::a#4 ] -reg byte a [ func_bank2_a::b#4 ] -reg byte x [ func_bank2_b::a#2 ] -reg byte a [ func_bank2_b::b#2 ] -reg byte a [ func_bank1_a::return#10 ] +reg byte x [ func_ram_bank1_a::a#3 ] +reg byte a [ func_ram_bank1_a::b#3 ] +reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +reg byte x [ func_rom_bank2_a::a#3 ] +reg byte a [ func_rom_bank2_a::b#3 ] +reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +reg byte a [ func_rom_bank2_e::a#2 ] +reg byte x [ func_rom_bank2_e::b#2 ] +reg byte a [ func_main_a::a#3 ] +reg byte x [ func_main_a::b#3 ] +reg byte a [ func_ram_bank1_a::return#4 ] reg byte a [ main::$0 ] -reg byte a [ func_bank1_b::return#3 ] -reg byte a [ main::$1 ] -reg byte a [ func_bank1_c::return#2 ] +reg byte a [ func_ram_bank1_c::return#2 ] reg byte a [ main::$2 ] -reg byte a [ func_bank1_d::return#2 ] +reg byte a [ func_ram_bank1_d::return#2 ] reg byte a [ main::$3 ] -reg byte a [ func_bank1_e::return#2 ] +reg byte a [ func_ram_bank1_e::return#3 ] reg byte a [ main::$4 ] -reg byte a [ func_bank1_f::return#2 ] +reg byte a [ func_ram_bank1_f::return#2 ] reg byte a [ main::$5 ] -reg byte a [ func_bank2_a::return#10 ] +reg byte a [ func_rom_bank2_a::return#4 ] reg byte a [ main::$6 ] -reg byte a [ func_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_b::return#4 ] reg byte a [ main::$7 ] -reg byte a [ func_bank2_c::return#2 ] +reg byte a [ func_rom_bank2_c::return#2 ] reg byte a [ main::$8 ] -reg byte a [ func_bank2_d::return#2 ] +reg byte a [ func_rom_bank2_d::return#2 ] reg byte a [ main::$9 ] -reg byte a [ func_bank2_e::return#2 ] +reg byte a [ func_rom_bank2_e::return#3 ] reg byte a [ main::$10 ] -reg byte a [ func_bank2_f::return#2 ] +reg byte a [ func_rom_bank2_f::return#2 ] reg byte a [ main::$11 ] -reg byte a [ func_bank1_a::return#0 ] -reg byte a [ func_bank1_b::return#1 ] -reg byte a [ func_bank1_a::return#2 ] -reg byte a [ func_bank1_c::return#0 ] -reg byte a [ func_bank2_a::return#0 ] -reg byte a [ func_bank1_d::return#0 ] -reg byte a [ func_bank1_a::return#4 ] -reg byte a [ func_bank1_e::return#0 ] -reg byte a [ func_bank2_a::return#4 ] -reg byte a [ func_bank1_f::return#0 ] -reg byte a [ func_bank2_a::return#1 ] -reg byte a [ func_bank2_b::return#1 ] -reg byte a [ func_bank1_a::return#3 ] -reg byte a [ func_bank2_c::return#0 ] -reg byte a [ func_bank2_a::return#3 ] -reg byte a [ func_bank2_d::return#0 ] -reg byte a [ func_bank2_b::return#0 ] -reg byte a [ func_bank2_e::return#0 ] -reg byte a [ func_bank1_b::return#0 ] -reg byte a [ func_bank2_f::return#0 ] +reg byte a [ func_main_a::return#4 ] +reg byte a [ main::$12 ] +reg byte a [ func_main_b::return#2 ] +reg byte a [ main::$13 ] +reg byte a [ func_ram_bank1_a::return#0 ] +reg byte a [ func_ram_bank1_a::return#2 ] +reg byte a [ func_ram_bank1_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#0 ] +reg byte a [ func_ram_bank1_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#0 ] +reg byte a [ func_ram_bank1_e::return#0 ] +reg byte a [ func_main_a::return#0 ] +reg byte a [ func_ram_bank1_f::return#0 ] +reg byte a [ func_rom_bank2_a::return#1 ] +reg byte a [ func_rom_bank2_b::return#1 ] +reg byte a [ func_ram_bank1_a::return#3 ] +reg byte a [ func_rom_bank2_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#3 ] +reg byte a [ func_rom_bank2_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_e::return#0 ] +reg byte a [ func_main_a::return#1 ] +reg byte a [ func_rom_bank2_f::return#0 ] +reg byte a [ func_ram_bank1_e::return#2 ] +reg byte a [ func_main_a::return#2 ] +reg byte a [ func_rom_bank2_e::return#2 ] +reg byte a [ func_main_b::return#0 ] From c550a122dab070ce81e1af485648970b37cdd4e9 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Mon, 10 Apr 2023 07:19:35 +0200 Subject: [PATCH 21/50] Banking progress (cherry picked from commit b98f95facff43c7a0bb8f9e9f902b49cc10ef4fe) --- .gitignore | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 14e2eee75..0ae827ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /gen +**/.vscode/* */*.mon */*.vs */*.brk @@ -6,11 +7,12 @@ */*.sym */.tmpdirs */bin/ -/target/ +**/target/* */workspace.xml **/.DS_Store .project .tmpdirs **/.vscode/*.log /.idea/* -kickc.iml \ No newline at end of file +kickc.iml +/src/main/fragment/cache From a52b5dc4a949ba1ab22aa38bcd3bf08960879948 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Mon, 10 Apr 2023 07:22:06 +0200 Subject: [PATCH 22/50] Banking progress (cherry picked from commit d0abf45529c34e14ed3ce43b9be3a140f78bc4a9) --- .../kickc/passes/Pass4CodeGeneration.java | 45 +++-- .../kc/examples/cx16/banking/cx16-banking-0.c | 55 ++++++ .../kc/examples/cx16/banking/cx16-banking-0.h | 20 +++ .../examples/cx16/banking/cx16-banking-0.ld | 12 ++ .../kc/examples/cx16/banking/cx16-banking-1.c | 168 ++++++++++++++++++ .../banking/cx16-banking-recursive-near.c | 38 ++++ 6 files changed, 321 insertions(+), 17 deletions(-) create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.c create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.h create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.ld create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-1.c create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 07fa70e5f..4e435ea98 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -925,28 +925,39 @@ public class Pass4CodeGeneration { } } else if (statement instanceof StatementCallExecute) { // TODO: This part seems never to be executed! Old code? - StatementCallExecute call = (StatementCallExecute) statement; - RValue procedureRVal = call.getProcedureRVal(); - // Generate ASM for a call - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); - if (!(procedureRVal instanceof ProcedureRef)) { - asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); - } // StatementCallExecute call = (StatementCallExecute) statement; -// Procedure procedure = getScope().getProcedure(call.getProcedure()); -// Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. // RValue procedureRVal = call.getProcedureRVal(); -// // Same as PHI -// if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); -// } else { -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); -// } +// // Generate ASM for a call +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); // if (!(procedureRVal instanceof ProcedureRef)) { // asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); // } + StatementCallExecute call = (StatementCallExecute) statement; + ProcedureRef procedureRef = call.getProcedure(); + if(procedureRef != null) { + ProgramScope scope = getScope(); + Procedure procedure = scope.getProcedure(procedureRef); + Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. + RValue procedureRVal = call.getProcedureRVal(); + // Same as PHI + if (procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + } else { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + } + if (!(procedureRVal instanceof ProcedureRef)) { + asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); + } + } else { + RValue procedureRVal = call.getProcedureRVal(); + // Generate ASM for a call + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + if (!(procedureRVal instanceof ProcedureRef)) { + asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); + } + } } else if (statement instanceof StatementExprSideEffect) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program), program); } else if (statement instanceof StatementReturn) { diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.c b/src/test/kc/examples/cx16/banking/cx16-banking-0.c new file mode 100644 index 000000000..bab4d90a5 --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-0.c @@ -0,0 +1,55 @@ +/** + * @file cx16-banking-1.c + * @author your name (you@domain.com) + * @brief This program demonstrates a simple example of a banked call. + * @version 0.1 + * @date 2023-04-05 + * + * @copyright Copyright (c) 2023 + * + */ + +// The linker specification of the different segments. +#pragma link("cx16-banking-1.ld") +#pragma var_model(mem) + +#include +#include +#include +#include + +#include "cx16-banking-0.h" + + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in ram between 0xC000 and 0xFFFF. +#pragma target(cx16) + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. + +char __stackcall plus(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). +#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. + +void load_bank(char bank, char *file) { + bank_set_bram(bank); + cbm_k_setnam(file); + cbm_k_setlfs(1,8,2); + cbm_k_load((char*)0xA000, 0); + cbm_k_close(1); +} + +void main(void) { + + load_bank(1, "BANK1.BIN"); + + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.h b/src/test/kc/examples/cx16/banking/cx16-banking-0.h new file mode 100644 index 000000000..a52f107cb --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-0.h @@ -0,0 +1,20 @@ + + +// Function declarations +// char add_a(char a); +// char add_b(char a); +// char add_c(char a); +// char add_d(char a); +// char add_e(char a); +// char add_f(char a); + +// char add_m(char a); + +// char mul_a(char m); +// char mul_b(char m); +// char mul_c(char m); +// char mul_d(char m); +// char mul_e(char m); +// char mul_f(char m); + +// char mul_m(char m); diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.ld b/src/test/kc/examples/cx16/banking/cx16-banking-0.ld new file mode 100644 index 000000000..c0dedea43 --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-0.ld @@ -0,0 +1,12 @@ +.file [name="%O", type="prg", segments="Program"] +.file [name="BANK1.BIN", type="bin", segments="Bank1"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segment Basic +:BasicUpstart(%E) +.segment Code +.segment Data + diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-1.c b/src/test/kc/examples/cx16/banking/cx16-banking-1.c new file mode 100644 index 000000000..b95afbcef --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-1.c @@ -0,0 +1,168 @@ +/** + * @file cx16-banking-1.c + * @author your name (you@domain.com) + * @brief This program demonstrates a simple example of a banked call. + * @version 0.1 + * @date 2023-04-05 + * + * @copyright Copyright (c) 2023 + * + */ + +// The linker specification of the different segments. +#pragma link("cx16-banking-1.ld") +#pragma var_model(mem) + +#include +#include +#include +#include + +#include "cx16-banking-1.h" + + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in ram between 0xC000 and 0xFFFF. +#pragma target(cx16) + + +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. + + +// Functional code + +char add_a(char a) { + printf("add_a(%02x:%04p), ",bank_get_bram(), (void*)&add_a); + return a+1; +} + +char add_c(char a) { + printf("add_c(%02x:%04p), ",bank_get_bram(),(void*)&add_c); + return add_a(a)+1; // Non banked call in ram bank 1. +} + +char add_d(char a) { + printf("add_d(%02x:%04p), ",bank_get_bram(),(void*)&add_d); + return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2. +} + +char add_e(char a) { + printf("add_e(%02x:%04p), ",bank_get_bram(),(void*)&add_e); + return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2. +} + +char add_f(char a) { + printf("add_f(%02x:%04p), ",bank_get_bram(),(void*)&add_f); + return add_m(a)+1; // Non banked call fram ram bank 1 to main memory. +} + + +#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. +#pragma bank(ram, 2) // The sequent functions will be banked using call method ram in bank number 2. + +char mul_a(char m) { + printf("mul_a(%02x:%04p), ",bank_get_bram(),(void*)&mul_a); + return m * 2; +} + +char mul_c(char m) { + printf("mul_c(%02x:%04p), ",bank_get_bram(),(void*)&mul_c); + return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1. +} + +char mul_d(char m) { + printf("mul_d(%02x:%04p), ",bank_get_bram(),(void*)&mul_d); + return mul_a(m)*2; // Non banked call in ram bank 2. +} + +char mul_e(char a) { + printf("mul_e(%02x:%04p), ",bank_get_bram(),(void*)&mul_e); + return mul_b(a)*2; // Non Banked call in ram bank 2. +} + +char mul_f(char m) { + printf("mul_f(%02x:%04p), ",bank_get_bram(),(void*)&mul_f); + return add_m(m)*2; // Non banked call fram ram bank 2 to main memory. +} + + +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). +#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. + +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +char __bank(ram, 1) add_b(char a) { + printf("add_b(%02x:%04p), ",bank_get_bram(),(void*)&add_b); + return a+1; +} + +// The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram. +char __bank(ram, 2) mul_b(char m) { + printf("mul_b(%02x:%04p), ",bank_get_bram(),(void*)&mul_b); + return m*2; +} + +// Allocated in main memory. +char add_m(char a) { + printf("add_m(%02x:%04p), ",bank_get_bram(),(void*)&add_m); + return add_e(a)+1; // Banked call to ram in bank 1 fram main memory. +} + +// Allocated in main memory. +char mul_m(char m) { + printf("mul_m(%02x:%04p), ",bank_get_bram(),(void*)&mul_m); + return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory. +} + + +// Practically this means that the main() function is placed in main memory ... + +void load_bank(char bank, char *file) { + bank_set_bram(bank); + cbm_k_setnam(file); + cbm_k_setlfs(1,8,2); + cbm_k_load((char*)0xA000, 0); + cbm_k_close(1); +} + +void main(void) { + + clrscr(); + cx16_k_screen_set_charset(1,0); + + load_bank(1, "BANK1.BIN"); + load_bank(2, "BANK2.BIN"); + + bank_set_bram(0); + + asm{.byte $db} + __export char result = add_a(1); + printf("result = %u\n", result); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_b(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_c(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_d(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_e(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_f(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_a(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_b(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_c(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_d(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_e(1)); // banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_f(1)); // banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_m(1)); // Near call in main memory fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_m(1)); // Near call in main memory fram main memory. + } diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c b/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c new file mode 100644 index 000000000..e1987ae9d --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c @@ -0,0 +1,38 @@ +/** + * @file cx16-banking-1.c + * @author your name (you@domain.com) + * @brief This program demonstrates a simple example of a banked call. + * @version 0.1 + * @date 2023-04-05 + * + * @copyright Copyright (c) 2023 + * + */ + +// The linker specification of the different segments. +#pragma var_model(mem) + +#include +#include +#include +#include + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in ram between 0xC000 and 0xFFFF. +#pragma target(cx16) + +char __stackcall plus(char a, char b) { + if (a > 0) { + return a + plus(a - b, b); + } else { + return 0; + } +} + +void main(void) { + + char result = plus(4, 1); + printf("result = %u\n", result); +} + From b62430bfc36ff4e0940ee657d259f5d34a9eb935 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 08:35:18 +0200 Subject: [PATCH 23/50] - near, close, far implementation using fragments for phi calls - fragment consolidation - removal of platform - stackcall banked throws error - testing --- .../call_far_cx16_ram_finalize.asm | 0 .../call_far_cx16_ram_prepare.asm | 0 .../call_far_cx16_rom_finalize.asm | 0 .../call_far_cx16_rom_prepare.asm | 0 .../call_phi_close_cx16_ram.asm | 6 + .../call_phi_close_cx16_rom.asm | 7 + ..._execute.asm => call_phi_far_cx16_ram.asm} | 0 ..._execute.asm => call_phi_far_cx16_rom.asm} | 0 .../fragment/mos6502-common/call_phi_near.asm | 1 + src/test/kc/call-banked-phi-case-1-near-0.c | 14 + src/test/kc/call-banked-phi-case-1-near-1.c | 14 + src/test/kc/call-banked-phi-case-2-close-0.c | 17 + src/test/kc/call-banked-phi-case-2-close-1.c | 17 + src/test/kc/call-banked-phi-case-3-near-0.c | 22 + src/test/kc/call-banked-phi-case-3-near-1.c | 22 + src/test/kc/call-banked-phi-case-4-near-0.c | 21 + src/test/kc/call-banked-phi-case-4-near-1.c | 21 + src/test/kc/call-banked-phi-case-5-far-0.c | 21 + src/test/kc/call-banked-phi-case-5-far-1.c | 21 + src/test/kc/call-banked-phi-case-6-close-0.c | 20 + src/test/kc/call-banked-phi-case-6-close-1.c | 25 + ...vention-phi-bank.ld => call-banked-phi.ld} | 0 .../kc/call-banked-stack-case-2-close-0.c | 15 + src/test/kc/call-banked-stack-case-5-far-0.c | 20 + ...cx16-banking-0.ld => call-banked-stack.ld} | 5 +- .../kc/examples/cx16/banking/cx16-banking-0.c | 55 - .../{cx16-banking-1.c => cx16-banking.c} | 5 +- .../procedure-callingconvention-phi-bank-0.c | 15 - .../procedure-callingconvention-phi-bank-1.c | 18 - .../procedure-callingconvention-phi-bank-2.c | 19 - .../procedure-callingconvention-phi-bank-3.c | 21 - .../procedure-callingconvention-phi-bank-4.c | 20 - .../procedure-callingconvention-phi-bank-5.c | 119 - .../procedure-callingconvention-phi-bank-5.ld | 7 - .../ref/call-banked-phi-case-1-near-0.asm | 33 + ....cfg => call-banked-phi-case-1-near-0.cfg} | 0 ....log => call-banked-phi-case-1-near-0.log} | 40 +- ....sym => call-banked-phi-case-1-near-0.sym} | 0 .../ref/call-banked-phi-case-1-near-1.asm | 40 + .../ref/call-banked-phi-case-1-near-1.cfg | 29 + .../ref/call-banked-phi-case-1-near-1.log | 386 ++ .../ref/call-banked-phi-case-1-near-1.sym | 14 + .../ref/call-banked-phi-case-2-close-0.asm | 39 + ...cfg => call-banked-phi-case-2-close-0.cfg} | 0 ...log => call-banked-phi-case-2-close-0.log} | 73 +- ...sym => call-banked-phi-case-2-close-0.sym} | 0 .../ref/call-banked-phi-case-2-close-1.asm | 39 + ...cfg => call-banked-phi-case-2-close-1.cfg} | 0 ...log => call-banked-phi-case-2-close-1.log} | 73 +- ...sym => call-banked-phi-case-2-close-1.sym} | 0 .../ref/call-banked-phi-case-3-near-0.asm | 47 + ....cfg => call-banked-phi-case-3-near-0.cfg} | 13 +- ....log => call-banked-phi-case-3-near-0.log} | 222 +- ....sym => call-banked-phi-case-3-near-0.sym} | 6 +- .../ref/call-banked-phi-case-3-near-1.asm | 47 + ....cfg => call-banked-phi-case-3-near-1.cfg} | 13 +- .../ref/call-banked-phi-case-3-near-1.log | 401 +++ ....sym => call-banked-phi-case-3-near-1.sym} | 6 +- .../ref/call-banked-phi-case-4-near-0.asm | 46 + .../ref/call-banked-phi-case-4-near-0.cfg | 29 + .../ref/call-banked-phi-case-4-near-0.log | 399 +++ .../ref/call-banked-phi-case-4-near-0.sym | 14 + .../ref/call-banked-phi-case-4-near-1.asm | 46 + .../ref/call-banked-phi-case-4-near-1.cfg | 29 + .../ref/call-banked-phi-case-4-near-1.log | 399 +++ .../ref/call-banked-phi-case-4-near-1.sym | 14 + src/test/ref/call-banked-phi-case-5-far-0.asm | 50 + src/test/ref/call-banked-phi-case-5-far-0.cfg | 29 + src/test/ref/call-banked-phi-case-5-far-0.log | 407 +++ src/test/ref/call-banked-phi-case-5-far-0.sym | 14 + src/test/ref/call-banked-phi-case-5-far-1.asm | 50 + src/test/ref/call-banked-phi-case-5-far-1.cfg | 29 + src/test/ref/call-banked-phi-case-5-far-1.log | 407 +++ src/test/ref/call-banked-phi-case-5-far-1.sym | 14 + .../ref/call-banked-phi-case-6-close-0.asm | 52 + .../ref/call-banked-phi-case-6-close-0.cfg | 29 + .../ref/call-banked-phi-case-6-close-0.log | 412 +++ .../ref/call-banked-phi-case-6-close-0.sym | 14 + .../ref/call-banked-phi-case-6-close-1.asm | 52 + .../ref/call-banked-phi-case-6-close-1.cfg | 29 + .../ref/call-banked-phi-case-6-close-1.log | 412 +++ .../ref/call-banked-phi-case-6-close-1.sym | 14 + ...procedure-callingconvention-phi-bank-0.asm | 28 - ...procedure-callingconvention-phi-bank-1.asm | 31 - ...procedure-callingconvention-phi-bank-2.asm | 32 - ...procedure-callingconvention-phi-bank-3.asm | 32 - ...procedure-callingconvention-phi-bank-4.asm | 31 - ...procedure-callingconvention-phi-bank-4.log | 281 -- ...procedure-callingconvention-phi-bank-5.asm | 312 -- ...procedure-callingconvention-phi-bank-5.cfg | 267 -- ...procedure-callingconvention-phi-bank-5.log | 3121 ----------------- ...procedure-callingconvention-phi-bank-5.sym | 204 -- ...ocedure-callingconvention-stack-bank-0.asm | 45 - ...ocedure-callingconvention-stack-bank-0.cfg | 24 - ...ocedure-callingconvention-stack-bank-0.log | 350 -- ...ocedure-callingconvention-stack-bank-0.sym | 19 - ...ocedure-callingconvention-stack-bank-1.asm | 45 - ...ocedure-callingconvention-stack-bank-1.cfg | 24 - ...ocedure-callingconvention-stack-bank-1.log | 350 -- ...ocedure-callingconvention-stack-bank-1.sym | 19 - ...ocedure-callingconvention-stack-bank-2.asm | 74 - ...ocedure-callingconvention-stack-bank-2.cfg | 48 - ...ocedure-callingconvention-stack-bank-2.log | 595 ---- ...ocedure-callingconvention-stack-bank-2.sym | 32 - ...ocedure-callingconvention-stack-bank-3.asm | 77 - ...ocedure-callingconvention-stack-bank-3.cfg | 79 - ...ocedure-callingconvention-stack-bank-3.log | 650 ---- ...ocedure-callingconvention-stack-bank-3.sym | 19 - ...ocedure-callingconvention-stack-bank-4.asm | 111 - ...ocedure-callingconvention-stack-bank-4.cfg | 62 - ...ocedure-callingconvention-stack-bank-4.log | 710 ---- ...ocedure-callingconvention-stack-bank-4.sym | 30 - ...ocedure-callingconvention-stack-bank-5.asm | 50 - ...ocedure-callingconvention-stack-bank-5.cfg | 29 - ...ocedure-callingconvention-stack-bank-5.log | 408 --- ...ocedure-callingconvention-stack-bank-5.sym | 21 - 116 files changed, 4669 insertions(+), 8620 deletions(-) delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm create mode 100644 src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm create mode 100644 src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm rename src/main/fragment/mos6502-common/{call_far_cx16_ram_execute.asm => call_phi_far_cx16_ram.asm} (100%) rename src/main/fragment/mos6502-common/{call_far_cx16_rom_execute.asm => call_phi_far_cx16_rom.asm} (100%) create mode 100644 src/main/fragment/mos6502-common/call_phi_near.asm create mode 100644 src/test/kc/call-banked-phi-case-1-near-0.c create mode 100644 src/test/kc/call-banked-phi-case-1-near-1.c create mode 100644 src/test/kc/call-banked-phi-case-2-close-0.c create mode 100644 src/test/kc/call-banked-phi-case-2-close-1.c create mode 100644 src/test/kc/call-banked-phi-case-3-near-0.c create mode 100644 src/test/kc/call-banked-phi-case-3-near-1.c create mode 100644 src/test/kc/call-banked-phi-case-4-near-0.c create mode 100644 src/test/kc/call-banked-phi-case-4-near-1.c create mode 100644 src/test/kc/call-banked-phi-case-5-far-0.c create mode 100644 src/test/kc/call-banked-phi-case-5-far-1.c create mode 100644 src/test/kc/call-banked-phi-case-6-close-0.c create mode 100644 src/test/kc/call-banked-phi-case-6-close-1.c rename src/test/kc/{procedure-callingconvention-phi-bank.ld => call-banked-phi.ld} (100%) create mode 100644 src/test/kc/call-banked-stack-case-2-close-0.c create mode 100644 src/test/kc/call-banked-stack-case-5-far-0.c rename src/test/kc/{examples/cx16/banking/cx16-banking-0.ld => call-banked-stack.ld} (62%) delete mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.c rename src/test/kc/examples/cx16/banking/{cx16-banking-1.c => cx16-banking.c} (99%) delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-0.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-1.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-2.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-3.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-4.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-5.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-5.ld create mode 100644 src/test/ref/call-banked-phi-case-1-near-0.asm rename src/test/ref/{procedure-callingconvention-phi-bank-0.cfg => call-banked-phi-case-1-near-0.cfg} (100%) rename src/test/ref/{procedure-callingconvention-phi-bank-0.log => call-banked-phi-case-1-near-0.log} (83%) rename src/test/ref/{procedure-callingconvention-phi-bank-0.sym => call-banked-phi-case-1-near-0.sym} (100%) create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.asm create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.log create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.sym create mode 100644 src/test/ref/call-banked-phi-case-2-close-0.asm rename src/test/ref/{procedure-callingconvention-phi-bank-1.cfg => call-banked-phi-case-2-close-0.cfg} (100%) rename src/test/ref/{procedure-callingconvention-phi-bank-2.log => call-banked-phi-case-2-close-0.log} (79%) rename src/test/ref/{procedure-callingconvention-phi-bank-1.sym => call-banked-phi-case-2-close-0.sym} (100%) create mode 100644 src/test/ref/call-banked-phi-case-2-close-1.asm rename src/test/ref/{procedure-callingconvention-phi-bank-2.cfg => call-banked-phi-case-2-close-1.cfg} (100%) rename src/test/ref/{procedure-callingconvention-phi-bank-3.log => call-banked-phi-case-2-close-1.log} (79%) rename src/test/ref/{procedure-callingconvention-phi-bank-2.sym => call-banked-phi-case-2-close-1.sym} (100%) create mode 100644 src/test/ref/call-banked-phi-case-3-near-0.asm rename src/test/ref/{procedure-callingconvention-phi-bank-3.cfg => call-banked-phi-case-3-near-0.cfg} (63%) rename src/test/ref/{procedure-callingconvention-phi-bank-1.log => call-banked-phi-case-3-near-0.log} (52%) rename src/test/ref/{procedure-callingconvention-phi-bank-3.sym => call-banked-phi-case-3-near-0.sym} (62%) create mode 100644 src/test/ref/call-banked-phi-case-3-near-1.asm rename src/test/ref/{procedure-callingconvention-phi-bank-4.cfg => call-banked-phi-case-3-near-1.cfg} (63%) create mode 100644 src/test/ref/call-banked-phi-case-3-near-1.log rename src/test/ref/{procedure-callingconvention-phi-bank-4.sym => call-banked-phi-case-3-near-1.sym} (62%) create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.asm create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.cfg create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.log create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.sym create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.asm create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.log create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.sym create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.asm create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.cfg create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.log create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.sym create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.asm create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.log create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.sym create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.asm create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.cfg create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.log create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.sym create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.asm create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.log create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.sym delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.log delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.cfg delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.log delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.sym diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm new file mode 100644 index 000000000..38d40a072 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -0,0 +1,6 @@ +lda #{c1} +sta $0 +pha +jsr {la1} +pla +sta $0 diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm new file mode 100644 index 000000000..e19cf8ab7 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -0,0 +1,7 @@ +lda #{c1} +sta $1 +pha +jsr {la1} +pla +sta $1 + diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm rename to src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm rename to src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm diff --git a/src/main/fragment/mos6502-common/call_phi_near.asm b/src/main/fragment/mos6502-common/call_phi_near.asm new file mode 100644 index 000000000..71fb96bc2 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_phi_near.asm @@ -0,0 +1 @@ +jsr {la1} diff --git a/src/test/kc/call-banked-phi-case-1-near-0.c b/src/test/kc/call-banked-phi-case-1-near-0.c new file mode 100644 index 000000000..d63edd272 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-1-near-0.c @@ -0,0 +1,14 @@ +// Test a procedure with calling convention PHI - case #1 + +#pragma code_seg(Code) +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-1-near-1.c b/src/test/kc/call-banked-phi-case-1-near-1.c new file mode 100644 index 000000000..d63edd272 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-1-near-1.c @@ -0,0 +1,14 @@ +// Test a procedure with calling convention PHI - case #1 + +#pragma code_seg(Code) +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-2-close-0.c b/src/test/kc/call-banked-phi-case-2-close-0.c new file mode 100644 index 000000000..e70370ad4 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-2-close-0.c @@ -0,0 +1,17 @@ +// Test a procedure with calling convention PHI - case #2 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-2-close-1.c b/src/test/kc/call-banked-phi-case-2-close-1.c new file mode 100644 index 000000000..e70370ad4 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-2-close-1.c @@ -0,0 +1,17 @@ +// Test a procedure with calling convention PHI - case #2 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-3-near-0.c b/src/test/kc/call-banked-phi-case-3-near-0.c new file mode 100644 index 000000000..898758149 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-3-near-0.c @@ -0,0 +1,22 @@ +// Test a procedure with calling convention PHI - case #3 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +char min(char a, char b) { + return a+b; +} + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c new file mode 100644 index 000000000..898758149 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -0,0 +1,22 @@ +// Test a procedure with calling convention PHI - case #3 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +char min(char a, char b) { + return a+b; +} + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-4-near-0.c b/src/test/kc/call-banked-phi-case-4-near-0.c new file mode 100644 index 000000000..226122dad --- /dev/null +++ b/src/test/kc/call-banked-phi-case-4-near-0.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-4-near-1.c b/src/test/kc/call-banked-phi-case-4-near-1.c new file mode 100644 index 000000000..226122dad --- /dev/null +++ b/src/test/kc/call-banked-phi-case-4-near-1.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-5-far-0.c b/src/test/kc/call-banked-phi-case-5-far-0.c new file mode 100644 index 000000000..6393b4b2d --- /dev/null +++ b/src/test/kc/call-banked-phi-case-5-far-0.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank2) +char __bank(cx16_ram, 2) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-5-far-1.c b/src/test/kc/call-banked-phi-case-5-far-1.c new file mode 100644 index 000000000..6393b4b2d --- /dev/null +++ b/src/test/kc/call-banked-phi-case-5-far-1.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank2) +char __bank(cx16_ram, 2) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-6-close-0.c b/src/test/kc/call-banked-phi-case-6-close-0.c new file mode 100644 index 000000000..ec605c21b --- /dev/null +++ b/src/test/kc/call-banked-phi-case-6-close-0.c @@ -0,0 +1,20 @@ +// Test a procedure with calling convention PHI - case #6 + +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); // near call +} + +#pragma code_seg(ROM_Bank1) +__bank(cx16_rom, 1) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-6-close-1.c b/src/test/kc/call-banked-phi-case-6-close-1.c new file mode 100644 index 000000000..57f2afacb --- /dev/null +++ b/src/test/kc/call-banked-phi-case-6-close-1.c @@ -0,0 +1,25 @@ +// Test a procedure with calling convention PHI - case #6 + +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} + +#pragma code_seg(RAM_Bank1) +#pragma bank(cx16_ram, 1) +char plus(char a, char b) { + return min(a, b); // near call +} + +#pragma code_seg(ROM_Bank1) +#pragma bank(cx16_rom, 1) +char min(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) +#pragma nobank(dummy) diff --git a/src/test/kc/procedure-callingconvention-phi-bank.ld b/src/test/kc/call-banked-phi.ld similarity index 100% rename from src/test/kc/procedure-callingconvention-phi-bank.ld rename to src/test/kc/call-banked-phi.ld diff --git a/src/test/kc/call-banked-stack-case-2-close-0.c b/src/test/kc/call-banked-stack-case-2-close-0.c new file mode 100644 index 000000000..72a2fb9c8 --- /dev/null +++ b/src/test/kc/call-banked-stack-case-2-close-0.c @@ -0,0 +1,15 @@ +// Test a procedure with calling convention PHI - case #1 + +#pragma link("call-banked-stack.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // near stack call +} + +#pragma code_seg(Code) +__stackcall char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-stack-case-5-far-0.c b/src/test/kc/call-banked-stack-case-5-far-0.c new file mode 100644 index 000000000..28cbe7e53 --- /dev/null +++ b/src/test/kc/call-banked-stack-case-5-far-0.c @@ -0,0 +1,20 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); // far call +} + +#pragma code_seg(RAM_Bank2) +char __bank(cx16_ram, 2) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.ld b/src/test/kc/call-banked-stack.ld similarity index 62% rename from src/test/kc/examples/cx16/banking/cx16-banking-0.ld rename to src/test/kc/call-banked-stack.ld index c0dedea43..de9bdab5d 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking-0.ld +++ b/src/test/kc/call-banked-stack.ld @@ -1,10 +1,11 @@ .file [name="%O", type="prg", segments="Program"] -.file [name="BANK1.BIN", type="bin", segments="Bank1"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] .segment Basic :BasicUpstart(%E) .segment Code diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.c b/src/test/kc/examples/cx16/banking/cx16-banking-0.c deleted file mode 100644 index bab4d90a5..000000000 --- a/src/test/kc/examples/cx16/banking/cx16-banking-0.c +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @file cx16-banking-1.c - * @author your name (you@domain.com) - * @brief This program demonstrates a simple example of a banked call. - * @version 0.1 - * @date 2023-04-05 - * - * @copyright Copyright (c) 2023 - * - */ - -// The linker specification of the different segments. -#pragma link("cx16-banking-1.ld") -#pragma var_model(mem) - -#include -#include -#include -#include - -#include "cx16-banking-0.h" - - -// The target computer platform is the Commander X16, -// which implements banking in ram between 0xA0000 and 0xBFFF, -// and in ram between 0xC000 and 0xFFFF. -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. -#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. - -char __stackcall plus(char a, char b) { - return a+b; -} - -#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). -#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. - -void load_bank(char bank, char *file) { - bank_set_bram(bank); - cbm_k_setnam(file); - cbm_k_setlfs(1,8,2); - cbm_k_load((char*)0xA000, 0); - cbm_k_close(1); -} - -void main(void) { - - load_bank(1, "BANK1.BIN"); - - SCREEN[0] = plus('0', 7); -} - diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-1.c b/src/test/kc/examples/cx16/banking/cx16-banking.c similarity index 99% rename from src/test/kc/examples/cx16/banking/cx16-banking-1.c rename to src/test/kc/examples/cx16/banking/cx16-banking.c index b95afbcef..6e6b66d9a 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking-1.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -16,10 +16,7 @@ #include #include #include -#include - -#include "cx16-banking-1.h" - +#include // The target computer platform is the Commander X16, // which implements banking in ram between 0xA0000 and 0xBFFF, diff --git a/src/test/kc/procedure-callingconvention-phi-bank-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c deleted file mode 100644 index bee484e0f..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-0.c +++ /dev/null @@ -1,15 +0,0 @@ -// Test a procedure with calling convention PHI - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -char __bank(ram,2) plus(char a, char b) { - return a+b; -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c deleted file mode 100644 index bb4b31031..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-1.c +++ /dev/null @@ -1,18 +0,0 @@ -// Test a far call procedure with a calling convention PHI - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma bank(ram, 1) - -char plus(char a, char b) { - return a+b; -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-2.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c deleted file mode 100644 index 5f2053c4b..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-2.c +++ /dev/null @@ -1,19 +0,0 @@ -// Test a far call procedure with a calling convention PHI into ROM - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma bank(rom, 1) // test rom bank - -char plus(char a, char b) { - return a+b; -} - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c deleted file mode 100644 index 0dc59a663..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-3.c +++ /dev/null @@ -1,21 +0,0 @@ -// Test a far call procedure with a calling convention PHI - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma bank(rom, 2) // Test rom fragment - -char plus(char a, char b) { - return a+b; -} - -#pragma nobank(dummy) - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c deleted file mode 100644 index 31dc11f0e..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ /dev/null @@ -1,20 +0,0 @@ -// Test a far call procedure with a calling convention phi - -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -#pragma code_seg(stage) -#pragma bank(ram, 20) - -char plus(char a, char b) { - return a+b; -} - -#pragma nobank(dummy) - -void main(void) { - SCREEN[0] = plus('0', 7); -} - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c deleted file mode 100644 index ef564b56c..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.c +++ /dev/null @@ -1,119 +0,0 @@ - -// The linker specification of the different segments. -#pragma link("procedure-callingconvention-phi-bank-5.ld") - -// The target computer platform is the Commander X16, -// which implements banking in ram between 0xA0000 and 0xBFFF, -// and in rom between 0xC000 and 0xFFFF. -#pragma target(cx16) - -char *const SCREEN = (char *)0x0400; // Just for test purposes. - -#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. -#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. - -// Function declarations -char func_ram_bank1_a(char a, char b); -char __bank(ram, 1) func_ram_bank1_b(char a, char b); -char func_ram_bank1_c(char a, char b); -char func_ram_bank1_d(char a, char b); -char func_ram_bank1_e(char a, char b); -char func_ram_bank1_f(char a, char b); -char func_rom_bank2_a(char a, char b); -char __bank(rom, 2) func_rom_bank2_b(char a, char b); -char func_rom_bank2_c(char a, char b); -char func_rom_bank2_d(char a, char b); -char func_rom_bank2_e(char a, char b); -char func_rom_bank2_f(char a, char b); -char func_main_a(char a, char b); -char func_main_b(char a, char b); - -// Functional code - -char func_ram_bank1_a(char a, char b) { - return a + b; -} - -char func_ram_bank1_c(char a, char b) { - return func_ram_bank1_a(a, b); // Non banked call in ram bank 1. -} - -char func_ram_bank1_d(char a, char b) { - return func_rom_bank2_a(a, b); // Banked call from ram bank 1 to rom bank 2. -} - -char func_ram_bank1_e(char a, char b) { - return func_rom_bank2_b(a, b); // Banked call from ram bank 1 to rom bank 2. -} - -char func_ram_bank1_f(char a, char b) { - return func_main_a(a, b); // Non banked call from ram bank 1 to main memory. -} - - -#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. -#pragma bank(rom, 2) // The sequent functions will be banked using call method rom in bank number 2. - -char func_rom_bank2_a(char a, char b) { - return a + b; -} - -char func_rom_bank2_c(char a, char b) { - return func_ram_bank1_a(a, b); // Banked call from rom bank 2 to ram bank 1. -} - -char func_rom_bank2_d(char a, char b) { - return func_rom_bank2_a(a, b); // Non banked call in rom bank 2. -} - -char func_rom_bank2_e(char a, char b) { - return func_rom_bank2_b(a, b); // Non Banked call in rom bank 2. -} - -char func_rom_bank2_f(char a, char b) { - return func_main_a(a, b); // Non banked call from rom bank 2 to main memory. -} - - -#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. - -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -char __bank(ram, 1) func_ram_bank1_b(char a, char b) { - return a + b; -} - -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -char __bank(rom, 2) func_rom_bank2_b(char a, char b) { - return a + b; -} - -#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). - -// Allocated in main memory. -char func_main_a(char a, char b) { - return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory. -} - -// Allocated in main memory. -char func_main_b(char a, char b) { - return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory. -} - -// Practically this means that the main() function is placed in main memory ... - -void main(void) { - SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory. - SCREEN[0] = func_main_a('0', 7); // Near call in main memory from main memory. - SCREEN[0] = func_main_b('0', 7); // Near call in main memory from main memory. -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.ld b/src/test/kc/procedure-callingconvention-phi-bank-5.ld deleted file mode 100644 index b82b5d038..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.ld +++ /dev/null @@ -1,7 +0,0 @@ -.segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=%P] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - diff --git a/src/test/ref/call-banked-phi-case-1-near-0.asm b/src/test/ref/call-banked-phi-case-1-near-0.asm new file mode 100644 index 000000000..ed640af22 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-0.asm @@ -0,0 +1,33 @@ +// Test a procedure with calling convention PHI - case #1 + .file [name="call-banked-phi-case-1-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.cfg b/src/test/ref/call-banked-phi-case-1-near-0.cfg similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-0.cfg rename to src/test/ref/call-banked-phi-case-1-near-0.cfg diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log similarity index 83% rename from src/test/ref/procedure-callingconvention-phi-bank-0.log rename to src/test/ref/call-banked-phi-case-1-near-0.log index a8f414328..be8ee4301 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -157,24 +157,29 @@ Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a procedure with calling convention PHI +// Test a procedure with calling convention PHI - case #1 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-1-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize plus_from_main: jsr plus jmp __b1 @@ -231,25 +236,30 @@ FINAL ASSEMBLER Score: 24 // File Comments -// Test a procedure with calling convention PHI +// Test a procedure with calling convention PHI - case #1 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-1-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize jsr plus // main::@1 // SCREEN[0] = plus('0', 7) diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.sym b/src/test/ref/call-banked-phi-case-1-near-0.sym similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-0.sym rename to src/test/ref/call-banked-phi-case-1-near-0.sym diff --git a/src/test/ref/call-banked-phi-case-1-near-1.asm b/src/test/ref/call-banked-phi-case-1-near-1.asm new file mode 100644 index 000000000..9f70b48bb --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.asm @@ -0,0 +1,40 @@ +// Test a procedure with calling convention PHI - case #1 + .file [name="call-banked-phi-case-1-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-1-near-1.cfg b/src/test/ref/call-banked-phi-case-1-near-1.cfg new file mode 100644 index 000000000..0ae888575 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log new file mode 100644 index 000000000..b205976e7 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -0,0 +1,386 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 75 combination +Uplifting [plus] best 75 combination +Uplifting [min] best 75 combination +Uplifting [] best 75 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #1 + // Upstart + .file [name="call-banked-phi-case-1-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + plus_from_main: + jsr plus + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 36 + + // File Comments +// Test a procedure with calling convention PHI - case #1 + // Upstart + .file [name="call-banked-phi-case-1-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + jsr plus + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-1-near-1.sym b/src/test/ref/call-banked-phi-case-1-near-1.sym new file mode 100644 index 000000000..168bcee58 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm new file mode 100644 index 000000000..5fd130284 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -0,0 +1,39 @@ +// Test a procedure with calling convention PHI - case #2 + .file [name="call-banked-phi-case-2-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.cfg b/src/test/ref/call-banked-phi-case-2-close-0.cfg similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-1.cfg rename to src/test/ref/call-banked-phi-case-2-close-0.cfg diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.log b/src/test/ref/call-banked-phi-case-2-close-0.log similarity index 79% rename from src/test/ref/procedure-callingconvention-phi-bank-2.log rename to src/test/ref/call-banked-phi-case-2-close-0.log index adb898ed6..5d4cd8f5d 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -144,6 +144,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -151,35 +152,42 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [main] best 75 combination +Uplifting [plus] best 75 combination +Uplifting [] best 75 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention PHI into ROM +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize plus_from_main: - jsr $ff6e - .byte plus - .byte 1 + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 jmp __b1 // main::@1 __b1: @@ -192,8 +200,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// test rom bank // char plus(char a, char b) plus: { .const a = '0' @@ -232,32 +240,39 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 24 +Score: 39 // File Comments -// Test a far call procedure with a calling convention PHI into ROM +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte plus - .byte 1 + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -268,8 +283,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// test rom bank // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.sym b/src/test/ref/call-banked-phi-case-2-close-0.sym similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-1.sym rename to src/test/ref/call-banked-phi-case-2-close-0.sym diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm new file mode 100644 index 000000000..275c704c3 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -0,0 +1,39 @@ +// Test a procedure with calling convention PHI - case #2 + .file [name="call-banked-phi-case-2-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.cfg b/src/test/ref/call-banked-phi-case-2-close-1.cfg similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-2.cfg rename to src/test/ref/call-banked-phi-case-2-close-1.cfg diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.log b/src/test/ref/call-banked-phi-case-2-close-1.log similarity index 79% rename from src/test/ref/procedure-callingconvention-phi-bank-3.log rename to src/test/ref/call-banked-phi-case-2-close-1.log index f970e5bd6..6ddc743fb 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -144,6 +144,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -151,35 +152,42 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [main] best 75 combination +Uplifting [plus] best 75 combination +Uplifting [] best 75 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize plus_from_main: - jsr $ff6e - .byte plus - .byte 2 + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 jmp __b1 // main::@1 __b1: @@ -192,8 +200,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' @@ -232,32 +240,39 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 24 +Score: 39 // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte plus - .byte 2 + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -268,8 +283,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.sym b/src/test/ref/call-banked-phi-case-2-close-1.sym similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-2.sym rename to src/test/ref/call-banked-phi-case-2-close-1.sym diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm new file mode 100644 index 000000000..95e842b1a --- /dev/null +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -0,0 +1,47 @@ +// Test a procedure with calling convention PHI - case #3 + .file [name="call-banked-phi-case-3-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +.segment Code +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.cfg b/src/test/ref/call-banked-phi-case-3-near-0.cfg similarity index 63% rename from src/test/ref/procedure-callingconvention-phi-bank-3.cfg rename to src/test/ref/call-banked-phi-case-3-near-0.cfg index 1701ea88d..abba7b99a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-0.cfg @@ -5,7 +5,7 @@ main: scope:[main] from [1] call plus to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [2] *SCREEN = min::return#1 to:main::@return main::@return: scope:[main] from main::@1 [3] return @@ -14,7 +14,16 @@ main::@return: scope:[main] from main::@1 __bank(bank) char plus(char a , char b) plus: scope:[plus] from main [4] phi() + [5] call min to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.log b/src/test/ref/call-banked-phi-case-3-near-0.log similarity index 52% rename from src/test/ref/procedure-callingconvention-phi-bank-1.log rename to src/test/ref/call-banked-phi-case-3-near-0.log index f7e169609..37da8004c 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -22,15 +22,35 @@ __bank(bank) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 plus::return#1 = plus::$0 to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) plus::return#2 = plus::return#4 return to:@return +char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + void __start() __start: scope:[__start] from call main @@ -46,6 +66,20 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 __bank(bank) char plus(char a , char b) char plus::$0 char plus::a @@ -74,14 +108,21 @@ Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 Successful SSA optimization Pass2AliasElimination Identical Phi Values plus::a#1 plus::a#0 Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused procedure __start @@ -89,27 +130,40 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 Successful SSA optimization Pass2ConstantIdentification Constant plus::return#0 = plus::return#1 Successful SSA optimization Pass2ConstantIdentification Constant main::$0 = plus::return#0 Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min CALL GRAPH Calls in [main] to plus:1 +Calls in [plus] to min:5 Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 Adding NOP phi() at start of main Adding NOP phi() at start of plus +Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -119,7 +173,7 @@ main: scope:[main] from [1] call plus to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [2] *SCREEN = min::return#1 to:main::@return main::@return: scope:[main] from main::@1 [3] return @@ -128,14 +182,27 @@ main::@return: scope:[main] from main::@1 __bank(bank) char plus(char a , char b) plus: scope:[plus] from main [4] phi() + [5] call min to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return to:@return VARIABLE REGISTER WEIGHTS void main() +char min(char a , char b) +char min::a +char min::b +char min::return __bank(bank) char plus(char a , char b) char plus::a char plus::b @@ -144,47 +211,57 @@ char plus::return Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES Uplift Scope [main] Uplift Scope [plus] +Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #3 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-3-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize plus_from_main: - jsr $ff6e - .byte plus - .byte 1 + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return sta SCREEN jmp __breturn // main::@return @@ -192,16 +269,31 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus // char plus(char a, char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min jmp __breturn // plus::@return __breturn: - // [5] return + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return rts } // File Data @@ -210,71 +302,99 @@ ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn +Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b __constant char plus::b#0 = 7 // b char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 24 +Score: 51 // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #3 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-3-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte plus - .byte 1 + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 // main::@1 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return sta SCREEN // main::@return // } // [3] return rts } +.segment RAM_Bank1 // plus // char plus(char a, char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min // plus::@return - // [5] return + // } + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return rts } // File Data diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.sym b/src/test/ref/call-banked-phi-case-3-near-0.sym similarity index 62% rename from src/test/ref/procedure-callingconvention-phi-bank-3.sym rename to src/test/ref/call-banked-phi-case-3-near-0.sym index c79872a57..f7f6861a8 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.sym +++ b/src/test/ref/call-banked-phi-case-3-near-0.sym @@ -1,10 +1,14 @@ __constant char * const SCREEN = (char *) 1024 void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b __constant char plus::b#0 = 7 // b char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm new file mode 100644 index 000000000..0a949d112 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -0,0 +1,47 @@ +// Test a procedure with calling convention PHI - case #3 + .file [name="call-banked-phi-case-3-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +.segment Code +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg similarity index 63% rename from src/test/ref/procedure-callingconvention-phi-bank-4.cfg rename to src/test/ref/call-banked-phi-case-3-near-1.cfg index ce60f7fc8..abba7b99a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -5,7 +5,7 @@ main: scope:[main] from [1] call plus to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#0 + [2] *SCREEN = min::return#1 to:main::@return main::@return: scope:[main] from main::@1 [3] return @@ -14,7 +14,16 @@ main::@return: scope:[main] from main::@1 __bank(bank) char plus(char a , char b) plus: scope:[plus] from main [4] phi() + [5] call min to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return to:@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log new file mode 100644 index 000000000..26e30a500 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -0,0 +1,401 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #3 + // Upstart + .file [name="call-banked-phi-case-3-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #3 + // Upstart + .file [name="call-banked-phi-case-3-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym similarity index 62% rename from src/test/ref/procedure-callingconvention-phi-bank-4.sym rename to src/test/ref/call-banked-phi-case-3-near-1.sym index b274ece82..f7f6861a8 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,10 +1,14 @@ __constant char * const SCREEN = (char *) 1024 void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b __constant char plus::b#0 = 7 // b char plus::return -__constant char plus::return#0 = plus::a#0+plus::b#0 // return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm new file mode 100644 index 000000000..c26348046 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -0,0 +1,46 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-4-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-4-near-0.cfg b/src/test/ref/call-banked-phi-case-4-near-0.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log new file mode 100644 index 000000000..a484d0a46 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -0,0 +1,399 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-4-near-0.sym b/src/test/ref/call-banked-phi-case-4-near-0.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm new file mode 100644 index 000000000..36a00ae4a --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -0,0 +1,46 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-4-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-4-near-1.cfg b/src/test/ref/call-banked-phi-case-4-near-1.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log new file mode 100644 index 000000000..03c157545 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -0,0 +1,399 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-4-near-1.sym b/src/test/ref/call-banked-phi-case-4-near-1.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm new file mode 100644 index 000000000..ef978d27d --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -0,0 +1,50 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-5-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr $ff6e + .byte min + .byte 2 + // } + rts +} +.segment RAM_Bank2 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-5-far-0.cfg b/src/test/ref/call-banked-phi-case-5-far-0.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log new file mode 100644 index 000000000..ea2ec7bee --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -0,0 +1,407 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + min_from_plus: + jsr $ff6e + .byte min + .byte 2 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + jsr $ff6e + .byte min + .byte 2 + // plus::@return + // } + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-5-far-0.sym b/src/test/ref/call-banked-phi-case-5-far-0.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm new file mode 100644 index 000000000..02c828cfb --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -0,0 +1,50 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-5-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr $ff6e + .byte min + .byte 2 + // } + rts +} +.segment RAM_Bank2 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-5-far-1.cfg b/src/test/ref/call-banked-phi-case-5-far-1.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log new file mode 100644 index 000000000..4527d9a6f --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -0,0 +1,407 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + min_from_plus: + jsr $ff6e + .byte min + .byte 2 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + jsr $ff6e + .byte min + .byte 2 + // plus::@return + // } + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-5-far-1.sym b/src/test/ref/call-banked-phi-case-5-far-1.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm new file mode 100644 index 000000000..ab71f5d78 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -0,0 +1,52 @@ +// Test a procedure with calling convention PHI - case #6 + .file [name="call-banked-phi-case-6-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // } + rts +} +.segment ROM_Bank1 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-6-close-0.cfg b/src/test/ref/call-banked-phi-case-6-close-0.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log new file mode 100644 index 000000000..aba095156 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -0,0 +1,412 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 105 combination +Uplifting [plus] best 105 combination +Uplifting [min] best 105 combination +Uplifting [] best 105 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + min_from_plus: + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 66 + + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // plus::@return + // } + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-6-close-0.sym b/src/test/ref/call-banked-phi-case-6-close-0.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm new file mode 100644 index 000000000..3ab278c50 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -0,0 +1,52 @@ +// Test a procedure with calling convention PHI - case #6 + .file [name="call-banked-phi-case-6-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // } + rts +} +.segment ROM_Bank1 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-6-close-1.cfg b/src/test/ref/call-banked-phi-case-6-close-1.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log new file mode 100644 index 000000000..047340878 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -0,0 +1,412 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 105 combination +Uplifting [plus] best 105 combination +Uplifting [min] best 105 combination +Uplifting [] best 105 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + min_from_plus: + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 66 + + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // plus::@return + // } + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-6-close-1.sym b/src/test/ref/call-banked-phi-case-6-close-1.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.asm b/src/test/ref/procedure-callingconvention-phi-bank-0.asm deleted file mode 100644 index 4a72f9f2b..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.asm +++ /dev/null @@ -1,28 +0,0 @@ -// Test a procedure with calling convention PHI -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr plus - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.asm b/src/test/ref/procedure-callingconvention-phi-bank-1.asm deleted file mode 100644 index 2a8a6ff0a..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.asm +++ /dev/null @@ -1,31 +0,0 @@ -// Test a far call procedure with a calling convention PHI -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte 1 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.asm b/src/test/ref/procedure-callingconvention-phi-bank-2.asm deleted file mode 100644 index 25216b2f4..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.asm +++ /dev/null @@ -1,32 +0,0 @@ -// Test a far call procedure with a calling convention PHI into ROM -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte 1 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// test rom bank -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.asm b/src/test/ref/procedure-callingconvention-phi-bank-3.asm deleted file mode 100644 index ee036ece3..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.asm +++ /dev/null @@ -1,32 +0,0 @@ -// Test a far call procedure with a calling convention PHI -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte 2 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// Test rom fragment -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.asm b/src/test/ref/procedure-callingconvention-phi-bank-4.asm deleted file mode 100644 index e9d93e257..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.asm +++ /dev/null @@ -1,31 +0,0 @@ -// Test a far call procedure with a calling convention phi -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte $14 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.log b/src/test/ref/procedure-callingconvention-phi-bank-4.log deleted file mode 100644 index f7da854a2..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.log +++ /dev/null @@ -1,281 +0,0 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" - -CONTROL FLOW GRAPH SSA - -__bank(bank) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#3 = phi( plus/plus::return#0 ) - plus::return#1 = plus::return#3 - return - to:@return - -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#2 = plus::return#1 - to:main::@1 -main::@1: scope:[main] from main - plus::return#4 = phi( main/plus::return#2 ) - main::$0 = plus::return#4 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -void main() -char main::$0 -__bank(bank) char plus(char a , char b) -char plus::$0 -char plus::a -char plus::a#0 -char plus::a#1 -char plus::b -char plus::b#0 -char plus::b#1 -char plus::return -char plus::return#0 -char plus::return#1 -char plus::return#2 -char plus::return#3 -char plus::return#4 - -Adding number conversion cast (unumber) 7 in plus::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast plus::b#0 = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 -Alias plus::return#2 = plus::return#4 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant plus::a#0 = '0' -Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [8] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [0] plus::return#0 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#0 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#2 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#2 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#2 -Constant inlined plus::return#2 = plus::return#0 -Constant inlined main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of main -Adding NOP phi() at start of plus -CALL GRAPH -Calls in [main] to plus:1 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Adding NOP phi() at start of main -Adding NOP phi() at start of plus - -FINAL CONTROL FLOW GRAPH - -void main() -main: scope:[main] from - [0] phi() - [1] call plus - to:main::@1 -main::@1: scope:[main] from main - [2] *SCREEN = plus::return#0 - to:main::@return -main::@return: scope:[main] from main::@1 - [3] return - to:@return - -__bank(bank) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - to:plus::@return -plus::@return: scope:[plus] from plus - [5] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -__bank(bank) char plus(char a , char b) -char plus::a -char plus::b -char plus::return - -Initial phi equivalence classes -Complete equivalence classes -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = plus::return#0 [ ] ( [ ] { } ) always clobbers reg byte a - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] -Uplift Scope [main] -Uplift Scope [] - -Uplifting [plus] best 60 combination -Uplifting [main] best 60 combination -Uplifting [] best 60 combination - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a far call procedure with a calling convention phi - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - // Global Constants & labels - .label SCREEN = $400 -.segment stage - // main -main: { - // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize - plus_from_main: - jsr $ff6e - .byte plus - .byte $14 - jmp __b1 - // main::@1 - __b1: - // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - jmp __breturn - // plus::@return - __breturn: - // [5] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction plus_from_main: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void main() -__bank(bank) char plus(char a , char b) -char plus::a -__constant char plus::a#0 = '0' // a -char plus::b -__constant char plus::b#0 = 7 // b -char plus::return -__constant char plus::return#0 = plus::a#0+plus::b#0 // return - - - -FINAL ASSEMBLER -Score: 24 - - // File Comments -// Test a far call procedure with a calling convention phi - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - // Global Constants & labels - .label SCREEN = $400 -.segment stage - // main -main: { - // plus('0', 7) - // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte plus - .byte $14 - // main::@1 - // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - // main::@return - // } - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - // plus::@return - // [5] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.asm b/src/test/ref/procedure-callingconvention-phi-bank-5.asm deleted file mode 100644 index b1c97a971..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.asm +++ /dev/null @@ -1,312 +0,0 @@ -// The linker specification of the different segments. -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - - - // The target computer platform is the Commander X16, - // which implements banking in ram between 0xA0000 and 0xBFFF, - // and in rom between 0xC000 and 0xFFFF. - .label SCREEN = $400 -.segment Code -// Practically this means that the main() function is placed in main memory ... -main: { - // func_ram_bank1_a('0', 7) - lda #7 - ldx #'0' - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a('0', 7) - // SCREEN[0] = func_ram_bank1_a('0', 7) - sta SCREEN - // func_ram_bank1_b('0', 7) - jsr func_ram_bank1_b - // SCREEN[0] = func_ram_bank1_b('0', 7) - // Banked call to ram in bank 1 from main memory. - lda #func_ram_bank1_b.return - sta SCREEN - // func_ram_bank1_c('0', 7) - jsr $ff6e - .byte func_ram_bank1_c - .byte 1 - // func_ram_bank1_c('0', 7) - // SCREEN[0] = func_ram_bank1_c('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_d('0', 7) - jsr $ff6e - .byte func_ram_bank1_d - .byte 1 - // func_ram_bank1_d('0', 7) - // SCREEN[0] = func_ram_bank1_d('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_e('0', 7) - ldx #7 - lda #'0' - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e('0', 7) - // SCREEN[0] = func_ram_bank1_e('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_f('0', 7) - jsr $ff6e - .byte func_ram_bank1_f - .byte 1 - // func_ram_bank1_f('0', 7) - // SCREEN[0] = func_ram_bank1_f('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_a('0', 7) - lda #7 - ldx #'0' - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a('0', 7) - // SCREEN[0] = func_rom_bank2_a('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_b('0', 7) - ldx #7 - lda #'0' - jsr func_rom_bank2_b - // func_rom_bank2_b('0', 7) - // SCREEN[0] = func_rom_bank2_b('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_c('0', 7) - jsr $ff6e - .byte func_rom_bank2_c - .byte 2 - // func_rom_bank2_c('0', 7) - // SCREEN[0] = func_rom_bank2_c('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_d('0', 7) - jsr $ff6e - .byte func_rom_bank2_d - .byte 2 - // func_rom_bank2_d('0', 7) - // SCREEN[0] = func_rom_bank2_d('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_e('0', 7) - ldx #7 - lda #'0' - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e('0', 7) - // SCREEN[0] = func_rom_bank2_e('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_f('0', 7) - jsr $ff6e - .byte func_rom_bank2_f - .byte 2 - // func_rom_bank2_f('0', 7) - // SCREEN[0] = func_rom_bank2_f('0', 7) - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_a('0', 7) - ldx #7 - lda #'0' - jsr func_main_a - // func_main_a('0', 7) - // SCREEN[0] = func_main_a('0', 7) - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_b('0', 7) - jsr func_main_b - // func_main_b('0', 7) - // SCREEN[0] = func_main_b('0', 7) - // Near call in main memory from main memory. - sta SCREEN - // } - rts -} -.segment Bank1 -// Functional code -// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) -func_ram_bank1_a: { - // a + b - stx.z $ff - clc - adc.z $ff - // } - rts -} -.segment Bank2 -// The sequent functions will consider no banking calculations anymore. -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -// char func_ram_bank1_b(char a, char b) -func_ram_bank1_b: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} -.segment Bank1 -// __register(A) char func_ram_bank1_c(char a, char b) -func_ram_bank1_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - lda #b - ldx #a - jsr func_ram_bank1_a - // func_ram_bank1_a(a, b) - // } - rts -} -// __register(A) char func_ram_bank1_d(char a, char b) -func_ram_bank1_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - lda #b - ldx #a - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a(a, b) - // } - rts -} -// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) -func_ram_bank1_e: { - // func_rom_bank2_b(a, b) - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // } - rts -} -// __register(A) char func_ram_bank1_f(char a, char b) -func_ram_bank1_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - ldx #b - lda #a - jsr func_main_a - // func_main_a(a, b) - // } - rts -} -.segment Bank2 -// The sequent functions will be banked using call method rom in bank number 2. -// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) -func_rom_bank2_a: { - // a + b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) -func_rom_bank2_b: { - // a + b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// __register(A) char func_rom_bank2_c(char a, char b) -func_rom_bank2_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - lda #b - ldx #a - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a(a, b) - // } - rts -} -// __register(A) char func_rom_bank2_d(char a, char b) -func_rom_bank2_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - lda #b - ldx #a - jsr func_rom_bank2_a - // func_rom_bank2_a(a, b) - // } - rts -} -// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) -func_rom_bank2_e: { - // func_rom_bank2_b(a, b) - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // } - rts -} -// __register(A) char func_rom_bank2_f(char a, char b) -func_rom_bank2_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - ldx #b - lda #a - jsr func_main_a - // func_main_a(a, b) - // } - rts -} -.segment Code -// The sequent functions will be addressed in the default main memory location (segment Code). -// Allocated in main memory. -// __register(A) char func_main_a(__register(A) char a, __register(X) char b) -func_main_a: { - // func_ram_bank1_e(a, b) - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e(a, b) - // } - rts -} -// Allocated in main memory. -// __register(A) char func_main_b(char a, char b) -func_main_b: { - .const a = '0' - .const b = 7 - // func_rom_bank2_e(a, b) - ldx #b - lda #a - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e(a, b) - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg deleted file mode 100644 index 12023844b..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg +++ /dev/null @@ -1,267 +0,0 @@ - -void main() -main: scope:[main] from - [0] phi() - [1] call func_ram_bank1_a - [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - to:main::@1 -main::@1: scope:[main] from main - [3] main::$0 = func_ram_bank1_a::return#4 - [4] *SCREEN = main::$0 - [5] call func_ram_bank1_b - to:main::@2 -main::@2: scope:[main] from main::@1 - [6] *SCREEN = func_ram_bank1_b::return#0 - [7] call func_ram_bank1_c - [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - to:main::@3 -main::@3: scope:[main] from main::@2 - [9] main::$2 = func_ram_bank1_c::return#2 - [10] *SCREEN = main::$2 - [11] call func_ram_bank1_d - [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - to:main::@4 -main::@4: scope:[main] from main::@3 - [13] main::$3 = func_ram_bank1_d::return#2 - [14] *SCREEN = main::$3 - [15] call func_ram_bank1_e - [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - to:main::@5 -main::@5: scope:[main] from main::@4 - [17] main::$4 = func_ram_bank1_e::return#3 - [18] *SCREEN = main::$4 - [19] call func_ram_bank1_f - [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - to:main::@6 -main::@6: scope:[main] from main::@5 - [21] main::$5 = func_ram_bank1_f::return#2 - [22] *SCREEN = main::$5 - [23] call func_rom_bank2_a - [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - to:main::@7 -main::@7: scope:[main] from main::@6 - [25] main::$6 = func_rom_bank2_a::return#4 - [26] *SCREEN = main::$6 - [27] call func_rom_bank2_b - [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - to:main::@8 -main::@8: scope:[main] from main::@7 - [29] main::$7 = func_rom_bank2_b::return#4 - [30] *SCREEN = main::$7 - [31] call func_rom_bank2_c - [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - to:main::@9 -main::@9: scope:[main] from main::@8 - [33] main::$8 = func_rom_bank2_c::return#2 - [34] *SCREEN = main::$8 - [35] call func_rom_bank2_d - [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - to:main::@10 -main::@10: scope:[main] from main::@9 - [37] main::$9 = func_rom_bank2_d::return#2 - [38] *SCREEN = main::$9 - [39] call func_rom_bank2_e - [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - to:main::@11 -main::@11: scope:[main] from main::@10 - [41] main::$10 = func_rom_bank2_e::return#3 - [42] *SCREEN = main::$10 - [43] call func_rom_bank2_f - [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - to:main::@12 -main::@12: scope:[main] from main::@11 - [45] main::$11 = func_rom_bank2_f::return#2 - [46] *SCREEN = main::$11 - [47] call func_main_a - [48] func_main_a::return#4 = func_main_a::return#2 - to:main::@13 -main::@13: scope:[main] from main::@12 - [49] main::$12 = func_main_a::return#4 - [50] *SCREEN = main::$12 - [51] call func_main_b - [52] func_main_b::return#2 = func_main_b::return#0 - to:main::@14 -main::@14: scope:[main] from main::@13 - [53] main::$13 = func_main_b::return#2 - [54] *SCREEN = main::$13 - to:main::@return -main::@return: scope:[main] from main::@14 - [55] return - to:@return - -__bank(bank) char func_ram_bank1_a(char a , char b) -func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main - [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) - [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) - [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 - to:func_ram_bank1_a::@return -func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a - [58] return - to:@return - -char func_ram_bank1_b(char a , char b) -func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 - [59] phi() - to:func_ram_bank1_b::@return -func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b - [60] return - to:@return - -__bank(bank) char func_ram_bank1_c(char a , char b) -func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 - [61] phi() - [62] call func_ram_bank1_a - [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - to:func_ram_bank1_c::@1 -func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c - [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - to:func_ram_bank1_c::@return -func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 - [65] return - to:@return - -__bank(bank) char func_ram_bank1_d(char a , char b) -func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 - [66] phi() - [67] call func_rom_bank2_a - [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - to:func_ram_bank1_d::@1 -func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d - [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - to:func_ram_bank1_d::@return -func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 - [70] return - to:@return - -__bank(bank) char func_ram_bank1_e(char a , char b) -func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 - [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) - [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) - [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - [74] call func_rom_bank2_b - [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - to:func_ram_bank1_e::@1 -func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e - [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - to:func_ram_bank1_e::@return -func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 - [77] return - to:@return - -__bank(bank) char func_ram_bank1_f(char a , char b) -func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 - [78] phi() - [79] call func_main_a - [80] func_main_a::return#0 = func_main_a::return#2 - to:func_ram_bank1_f::@1 -func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f - [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - to:func_ram_bank1_f::@return -func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 - [82] return - to:@return - -__bank(bank) char func_rom_bank2_a(char a , char b) -func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 - [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) - [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) - [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 - to:func_rom_bank2_a::@return -func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a - [85] return - to:@return - -char func_rom_bank2_b(char a , char b) -func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 - [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) - [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) - [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 - to:func_rom_bank2_b::@return -func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b - [88] return - to:@return - -__bank(bank) char func_rom_bank2_c(char a , char b) -func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 - [89] phi() - [90] call func_ram_bank1_a - [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - to:func_rom_bank2_c::@1 -func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c - [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - to:func_rom_bank2_c::@return -func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 - [93] return - to:@return - -__bank(bank) char func_rom_bank2_d(char a , char b) -func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 - [94] phi() - [95] call func_rom_bank2_a - [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - to:func_rom_bank2_d::@1 -func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d - [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - to:func_rom_bank2_d::@return -func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 - [98] return - to:@return - -__bank(bank) char func_rom_bank2_e(char a , char b) -func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 - [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) - [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) - [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - [102] call func_rom_bank2_b - [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - to:func_rom_bank2_e::@1 -func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e - [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - to:func_rom_bank2_e::@return -func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 - [105] return - to:@return - -__bank(bank) char func_rom_bank2_f(char a , char b) -func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 - [106] phi() - [107] call func_main_a - [108] func_main_a::return#1 = func_main_a::return#2 - to:func_rom_bank2_f::@1 -func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f - [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - to:func_rom_bank2_f::@return -func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 - [110] return - to:@return - -char func_main_a(char a , char b) -func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 - [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) - [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) - [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - [114] call func_ram_bank1_e - [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - to:func_main_a::@1 -func_main_a::@1: scope:[func_main_a] from func_main_a - [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - to:func_main_a::@return -func_main_a::@return: scope:[func_main_a] from func_main_a::@1 - [117] return - to:@return - -char func_main_b(char a , char b) -func_main_b: scope:[func_main_b] from main::@13 - [118] phi() - [119] call func_rom_bank2_e - [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - to:func_main_b::@1 -func_main_b::@1: scope:[func_main_b] from func_main_b - [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - to:func_main_b::@return -func_main_b::@return: scope:[func_main_b] from func_main_b::@1 - [122] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.log b/src/test/ref/procedure-callingconvention-phi-bank-5.log deleted file mode 100644 index 7c7b8a77a..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.log +++ /dev/null @@ -1,3121 +0,0 @@ -Loading link script "procedure-callingconvention-phi-bank-5.ld" - -CONTROL FLOW GRAPH SSA - -__bank(bank) char func_ram_bank1_a(char a , char b) -func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main - func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_a::b#0, func_rom_bank2_c/func_ram_bank1_a::b#1, main/func_ram_bank1_a::b#2 ) - func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_a::a#0, func_rom_bank2_c/func_ram_bank1_a::a#1, main/func_ram_bank1_a::a#2 ) - func_ram_bank1_a::$0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 - func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 - to:func_ram_bank1_a::@return -func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a - func_ram_bank1_a::return#5 = phi( func_ram_bank1_a/func_ram_bank1_a::return#0 ) - func_ram_bank1_a::return#1 = func_ram_bank1_a::return#5 - return - to:@return - -char func_ram_bank1_b(char a , char b) -func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 - func_ram_bank1_b::b#1 = phi( main::@1/func_ram_bank1_b::b#0 ) - func_ram_bank1_b::a#1 = phi( main::@1/func_ram_bank1_b::a#0 ) - func_ram_bank1_b::$0 = func_ram_bank1_b::a#1 + func_ram_bank1_b::b#1 - func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 - to:func_ram_bank1_b::@return -func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b - func_ram_bank1_b::return#3 = phi( func_ram_bank1_b/func_ram_bank1_b::return#0 ) - func_ram_bank1_b::return#1 = func_ram_bank1_b::return#3 - return - to:@return - -__bank(bank) char func_ram_bank1_c(char a , char b) -func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 - func_ram_bank1_c::b#1 = phi( main::@2/func_ram_bank1_c::b#0 ) - func_ram_bank1_c::a#1 = phi( main::@2/func_ram_bank1_c::a#0 ) - func_ram_bank1_a::a#0 = func_ram_bank1_c::a#1 - func_ram_bank1_a::b#0 = func_ram_bank1_c::b#1 - call func_ram_bank1_a - func_ram_bank1_a::return#2 = func_ram_bank1_a::return#1 - to:func_ram_bank1_c::@1 -func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c - func_ram_bank1_a::return#6 = phi( func_ram_bank1_c/func_ram_bank1_a::return#2 ) - func_ram_bank1_c::$0 = func_ram_bank1_a::return#6 - func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 - to:func_ram_bank1_c::@return -func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 - func_ram_bank1_c::return#3 = phi( func_ram_bank1_c::@1/func_ram_bank1_c::return#0 ) - func_ram_bank1_c::return#1 = func_ram_bank1_c::return#3 - return - to:@return - -__bank(bank) char func_ram_bank1_d(char a , char b) -func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 - func_ram_bank1_d::b#1 = phi( main::@3/func_ram_bank1_d::b#0 ) - func_ram_bank1_d::a#1 = phi( main::@3/func_ram_bank1_d::a#0 ) - func_rom_bank2_a::a#0 = func_ram_bank1_d::a#1 - func_rom_bank2_a::b#0 = func_ram_bank1_d::b#1 - call func_rom_bank2_a - func_rom_bank2_a::return#0 = func_rom_bank2_a::return#2 - to:func_ram_bank1_d::@1 -func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d - func_rom_bank2_a::return#5 = phi( func_ram_bank1_d/func_rom_bank2_a::return#0 ) - func_ram_bank1_d::$0 = func_rom_bank2_a::return#5 - func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 - to:func_ram_bank1_d::@return -func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 - func_ram_bank1_d::return#3 = phi( func_ram_bank1_d::@1/func_ram_bank1_d::return#0 ) - func_ram_bank1_d::return#1 = func_ram_bank1_d::return#3 - return - to:@return - -__bank(bank) char func_ram_bank1_e(char a , char b) -func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 - func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/func_ram_bank1_e::b#1 ) - func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/func_ram_bank1_e::a#1 ) - func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - call func_rom_bank2_b - func_rom_bank2_b::return#0 = func_rom_bank2_b::return#2 - to:func_ram_bank1_e::@1 -func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e - func_rom_bank2_b::return#5 = phi( func_ram_bank1_e/func_rom_bank2_b::return#0 ) - func_ram_bank1_e::$0 = func_rom_bank2_b::return#5 - func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 - to:func_ram_bank1_e::@return -func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 - func_ram_bank1_e::return#4 = phi( func_ram_bank1_e::@1/func_ram_bank1_e::return#0 ) - func_ram_bank1_e::return#1 = func_ram_bank1_e::return#4 - return - to:@return - -__bank(bank) char func_ram_bank1_f(char a , char b) -func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 - func_ram_bank1_f::b#1 = phi( main::@5/func_ram_bank1_f::b#0 ) - func_ram_bank1_f::a#1 = phi( main::@5/func_ram_bank1_f::a#0 ) - func_main_a::a#0 = func_ram_bank1_f::a#1 - func_main_a::b#0 = func_ram_bank1_f::b#1 - call func_main_a - func_main_a::return#0 = func_main_a::return#3 - to:func_ram_bank1_f::@1 -func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f - func_main_a::return#5 = phi( func_ram_bank1_f/func_main_a::return#0 ) - func_ram_bank1_f::$0 = func_main_a::return#5 - func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 - to:func_ram_bank1_f::@return -func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 - func_ram_bank1_f::return#3 = phi( func_ram_bank1_f::@1/func_ram_bank1_f::return#0 ) - func_ram_bank1_f::return#1 = func_ram_bank1_f::return#3 - return - to:@return - -__bank(bank) char func_rom_bank2_a(char a , char b) -func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 - func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_rom_bank2_a::b#0, func_rom_bank2_d/func_rom_bank2_a::b#1, main::@6/func_rom_bank2_a::b#2 ) - func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_rom_bank2_a::a#0, func_rom_bank2_d/func_rom_bank2_a::a#1, main::@6/func_rom_bank2_a::a#2 ) - func_rom_bank2_a::$0 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 - func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 - to:func_rom_bank2_a::@return -func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a - func_rom_bank2_a::return#6 = phi( func_rom_bank2_a/func_rom_bank2_a::return#1 ) - func_rom_bank2_a::return#2 = func_rom_bank2_a::return#6 - return - to:@return - -char func_rom_bank2_b(char a , char b) -func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 - func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/func_rom_bank2_b::b#2 ) - func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/func_rom_bank2_b::a#2 ) - func_rom_bank2_b::$0 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 - func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 - to:func_rom_bank2_b::@return -func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b - func_rom_bank2_b::return#6 = phi( func_rom_bank2_b/func_rom_bank2_b::return#1 ) - func_rom_bank2_b::return#2 = func_rom_bank2_b::return#6 - return - to:@return - -__bank(bank) char func_rom_bank2_c(char a , char b) -func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 - func_rom_bank2_c::b#1 = phi( main::@8/func_rom_bank2_c::b#0 ) - func_rom_bank2_c::a#1 = phi( main::@8/func_rom_bank2_c::a#0 ) - func_ram_bank1_a::a#1 = func_rom_bank2_c::a#1 - func_ram_bank1_a::b#1 = func_rom_bank2_c::b#1 - call func_ram_bank1_a - func_ram_bank1_a::return#3 = func_ram_bank1_a::return#1 - to:func_rom_bank2_c::@1 -func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c - func_ram_bank1_a::return#7 = phi( func_rom_bank2_c/func_ram_bank1_a::return#3 ) - func_rom_bank2_c::$0 = func_ram_bank1_a::return#7 - func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 - to:func_rom_bank2_c::@return -func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 - func_rom_bank2_c::return#3 = phi( func_rom_bank2_c::@1/func_rom_bank2_c::return#0 ) - func_rom_bank2_c::return#1 = func_rom_bank2_c::return#3 - return - to:@return - -__bank(bank) char func_rom_bank2_d(char a , char b) -func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 - func_rom_bank2_d::b#1 = phi( main::@9/func_rom_bank2_d::b#0 ) - func_rom_bank2_d::a#1 = phi( main::@9/func_rom_bank2_d::a#0 ) - func_rom_bank2_a::a#1 = func_rom_bank2_d::a#1 - func_rom_bank2_a::b#1 = func_rom_bank2_d::b#1 - call func_rom_bank2_a - func_rom_bank2_a::return#3 = func_rom_bank2_a::return#2 - to:func_rom_bank2_d::@1 -func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d - func_rom_bank2_a::return#7 = phi( func_rom_bank2_d/func_rom_bank2_a::return#3 ) - func_rom_bank2_d::$0 = func_rom_bank2_a::return#7 - func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 - to:func_rom_bank2_d::@return -func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 - func_rom_bank2_d::return#3 = phi( func_rom_bank2_d::@1/func_rom_bank2_d::return#0 ) - func_rom_bank2_d::return#1 = func_rom_bank2_d::return#3 - return - to:@return - -__bank(bank) char func_rom_bank2_e(char a , char b) -func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 - func_rom_bank2_e::b#2 = phi( func_main_b/func_rom_bank2_e::b#0, main::@10/func_rom_bank2_e::b#1 ) - func_rom_bank2_e::a#2 = phi( func_main_b/func_rom_bank2_e::a#0, main::@10/func_rom_bank2_e::a#1 ) - func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - call func_rom_bank2_b - func_rom_bank2_b::return#3 = func_rom_bank2_b::return#2 - to:func_rom_bank2_e::@1 -func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e - func_rom_bank2_b::return#7 = phi( func_rom_bank2_e/func_rom_bank2_b::return#3 ) - func_rom_bank2_e::$0 = func_rom_bank2_b::return#7 - func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 - to:func_rom_bank2_e::@return -func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 - func_rom_bank2_e::return#4 = phi( func_rom_bank2_e::@1/func_rom_bank2_e::return#0 ) - func_rom_bank2_e::return#1 = func_rom_bank2_e::return#4 - return - to:@return - -__bank(bank) char func_rom_bank2_f(char a , char b) -func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 - func_rom_bank2_f::b#1 = phi( main::@11/func_rom_bank2_f::b#0 ) - func_rom_bank2_f::a#1 = phi( main::@11/func_rom_bank2_f::a#0 ) - func_main_a::a#1 = func_rom_bank2_f::a#1 - func_main_a::b#1 = func_rom_bank2_f::b#1 - call func_main_a - func_main_a::return#1 = func_main_a::return#3 - to:func_rom_bank2_f::@1 -func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f - func_main_a::return#6 = phi( func_rom_bank2_f/func_main_a::return#1 ) - func_rom_bank2_f::$0 = func_main_a::return#6 - func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 - to:func_rom_bank2_f::@return -func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 - func_rom_bank2_f::return#3 = phi( func_rom_bank2_f::@1/func_rom_bank2_f::return#0 ) - func_rom_bank2_f::return#1 = func_rom_bank2_f::return#3 - return - to:@return - -char func_main_a(char a , char b) -func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 - func_main_a::b#3 = phi( func_ram_bank1_f/func_main_a::b#0, func_rom_bank2_f/func_main_a::b#1, main::@12/func_main_a::b#2 ) - func_main_a::a#3 = phi( func_ram_bank1_f/func_main_a::a#0, func_rom_bank2_f/func_main_a::a#1, main::@12/func_main_a::a#2 ) - func_ram_bank1_e::a#0 = func_main_a::a#3 - func_ram_bank1_e::b#0 = func_main_a::b#3 - call func_ram_bank1_e - func_ram_bank1_e::return#2 = func_ram_bank1_e::return#1 - to:func_main_a::@1 -func_main_a::@1: scope:[func_main_a] from func_main_a - func_ram_bank1_e::return#5 = phi( func_main_a/func_ram_bank1_e::return#2 ) - func_main_a::$0 = func_ram_bank1_e::return#5 - func_main_a::return#2 = func_main_a::$0 - to:func_main_a::@return -func_main_a::@return: scope:[func_main_a] from func_main_a::@1 - func_main_a::return#7 = phi( func_main_a::@1/func_main_a::return#2 ) - func_main_a::return#3 = func_main_a::return#7 - return - to:@return - -char func_main_b(char a , char b) -func_main_b: scope:[func_main_b] from main::@13 - func_main_b::b#1 = phi( main::@13/func_main_b::b#0 ) - func_main_b::a#1 = phi( main::@13/func_main_b::a#0 ) - func_rom_bank2_e::a#0 = func_main_b::a#1 - func_rom_bank2_e::b#0 = func_main_b::b#1 - call func_rom_bank2_e - func_rom_bank2_e::return#2 = func_rom_bank2_e::return#1 - to:func_main_b::@1 -func_main_b::@1: scope:[func_main_b] from func_main_b - func_rom_bank2_e::return#5 = phi( func_main_b/func_rom_bank2_e::return#2 ) - func_main_b::$0 = func_rom_bank2_e::return#5 - func_main_b::return#0 = func_main_b::$0 - to:func_main_b::@return -func_main_b::@return: scope:[func_main_b] from func_main_b::@1 - func_main_b::return#3 = phi( func_main_b::@1/func_main_b::return#0 ) - func_main_b::return#1 = func_main_b::return#3 - return - to:@return - -void main() -main: scope:[main] from __start - func_ram_bank1_a::a#2 = '0' - func_ram_bank1_a::b#2 = 7 - call func_ram_bank1_a - func_ram_bank1_a::return#4 = func_ram_bank1_a::return#1 - to:main::@1 -main::@1: scope:[main] from main - func_ram_bank1_a::return#8 = phi( main/func_ram_bank1_a::return#4 ) - main::$0 = func_ram_bank1_a::return#8 - SCREEN[0] = main::$0 - func_ram_bank1_b::a#0 = '0' - func_ram_bank1_b::b#0 = 7 - call func_ram_bank1_b - func_ram_bank1_b::return#2 = func_ram_bank1_b::return#1 - to:main::@2 -main::@2: scope:[main] from main::@1 - func_ram_bank1_b::return#4 = phi( main::@1/func_ram_bank1_b::return#2 ) - main::$1 = func_ram_bank1_b::return#4 - SCREEN[0] = main::$1 - func_ram_bank1_c::a#0 = '0' - func_ram_bank1_c::b#0 = 7 - call func_ram_bank1_c - func_ram_bank1_c::return#2 = func_ram_bank1_c::return#1 - to:main::@3 -main::@3: scope:[main] from main::@2 - func_ram_bank1_c::return#4 = phi( main::@2/func_ram_bank1_c::return#2 ) - main::$2 = func_ram_bank1_c::return#4 - SCREEN[0] = main::$2 - func_ram_bank1_d::a#0 = '0' - func_ram_bank1_d::b#0 = 7 - call func_ram_bank1_d - func_ram_bank1_d::return#2 = func_ram_bank1_d::return#1 - to:main::@4 -main::@4: scope:[main] from main::@3 - func_ram_bank1_d::return#4 = phi( main::@3/func_ram_bank1_d::return#2 ) - main::$3 = func_ram_bank1_d::return#4 - SCREEN[0] = main::$3 - func_ram_bank1_e::a#1 = '0' - func_ram_bank1_e::b#1 = 7 - call func_ram_bank1_e - func_ram_bank1_e::return#3 = func_ram_bank1_e::return#1 - to:main::@5 -main::@5: scope:[main] from main::@4 - func_ram_bank1_e::return#6 = phi( main::@4/func_ram_bank1_e::return#3 ) - main::$4 = func_ram_bank1_e::return#6 - SCREEN[0] = main::$4 - func_ram_bank1_f::a#0 = '0' - func_ram_bank1_f::b#0 = 7 - call func_ram_bank1_f - func_ram_bank1_f::return#2 = func_ram_bank1_f::return#1 - to:main::@6 -main::@6: scope:[main] from main::@5 - func_ram_bank1_f::return#4 = phi( main::@5/func_ram_bank1_f::return#2 ) - main::$5 = func_ram_bank1_f::return#4 - SCREEN[0] = main::$5 - func_rom_bank2_a::a#2 = '0' - func_rom_bank2_a::b#2 = 7 - call func_rom_bank2_a - func_rom_bank2_a::return#4 = func_rom_bank2_a::return#2 - to:main::@7 -main::@7: scope:[main] from main::@6 - func_rom_bank2_a::return#8 = phi( main::@6/func_rom_bank2_a::return#4 ) - main::$6 = func_rom_bank2_a::return#8 - SCREEN[0] = main::$6 - func_rom_bank2_b::a#2 = '0' - func_rom_bank2_b::b#2 = 7 - call func_rom_bank2_b - func_rom_bank2_b::return#4 = func_rom_bank2_b::return#2 - to:main::@8 -main::@8: scope:[main] from main::@7 - func_rom_bank2_b::return#8 = phi( main::@7/func_rom_bank2_b::return#4 ) - main::$7 = func_rom_bank2_b::return#8 - SCREEN[0] = main::$7 - func_rom_bank2_c::a#0 = '0' - func_rom_bank2_c::b#0 = 7 - call func_rom_bank2_c - func_rom_bank2_c::return#2 = func_rom_bank2_c::return#1 - to:main::@9 -main::@9: scope:[main] from main::@8 - func_rom_bank2_c::return#4 = phi( main::@8/func_rom_bank2_c::return#2 ) - main::$8 = func_rom_bank2_c::return#4 - SCREEN[0] = main::$8 - func_rom_bank2_d::a#0 = '0' - func_rom_bank2_d::b#0 = 7 - call func_rom_bank2_d - func_rom_bank2_d::return#2 = func_rom_bank2_d::return#1 - to:main::@10 -main::@10: scope:[main] from main::@9 - func_rom_bank2_d::return#4 = phi( main::@9/func_rom_bank2_d::return#2 ) - main::$9 = func_rom_bank2_d::return#4 - SCREEN[0] = main::$9 - func_rom_bank2_e::a#1 = '0' - func_rom_bank2_e::b#1 = 7 - call func_rom_bank2_e - func_rom_bank2_e::return#3 = func_rom_bank2_e::return#1 - to:main::@11 -main::@11: scope:[main] from main::@10 - func_rom_bank2_e::return#6 = phi( main::@10/func_rom_bank2_e::return#3 ) - main::$10 = func_rom_bank2_e::return#6 - SCREEN[0] = main::$10 - func_rom_bank2_f::a#0 = '0' - func_rom_bank2_f::b#0 = 7 - call func_rom_bank2_f - func_rom_bank2_f::return#2 = func_rom_bank2_f::return#1 - to:main::@12 -main::@12: scope:[main] from main::@11 - func_rom_bank2_f::return#4 = phi( main::@11/func_rom_bank2_f::return#2 ) - main::$11 = func_rom_bank2_f::return#4 - SCREEN[0] = main::$11 - func_main_a::a#2 = '0' - func_main_a::b#2 = 7 - call func_main_a - func_main_a::return#4 = func_main_a::return#3 - to:main::@13 -main::@13: scope:[main] from main::@12 - func_main_a::return#8 = phi( main::@12/func_main_a::return#4 ) - main::$12 = func_main_a::return#8 - SCREEN[0] = main::$12 - func_main_b::a#0 = '0' - func_main_b::b#0 = 7 - call func_main_b - func_main_b::return#2 = func_main_b::return#1 - to:main::@14 -main::@14: scope:[main] from main::@13 - func_main_b::return#4 = phi( main::@13/func_main_b::return#2 ) - main::$13 = func_main_b::return#4 - SCREEN[0] = main::$13 - to:main::@return -main::@return: scope:[main] from main::@14 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -char func_main_a(char a , char b) -char func_main_a::$0 -char func_main_a::a -char func_main_a::a#0 -char func_main_a::a#1 -char func_main_a::a#2 -char func_main_a::a#3 -char func_main_a::b -char func_main_a::b#0 -char func_main_a::b#1 -char func_main_a::b#2 -char func_main_a::b#3 -char func_main_a::return -char func_main_a::return#0 -char func_main_a::return#1 -char func_main_a::return#2 -char func_main_a::return#3 -char func_main_a::return#4 -char func_main_a::return#5 -char func_main_a::return#6 -char func_main_a::return#7 -char func_main_a::return#8 -char func_main_b(char a , char b) -char func_main_b::$0 -char func_main_b::a -char func_main_b::a#0 -char func_main_b::a#1 -char func_main_b::b -char func_main_b::b#0 -char func_main_b::b#1 -char func_main_b::return -char func_main_b::return#0 -char func_main_b::return#1 -char func_main_b::return#2 -char func_main_b::return#3 -char func_main_b::return#4 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::$0 -char func_ram_bank1_a::a -char func_ram_bank1_a::a#0 -char func_ram_bank1_a::a#1 -char func_ram_bank1_a::a#2 -char func_ram_bank1_a::a#3 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#0 -char func_ram_bank1_a::b#1 -char func_ram_bank1_a::b#2 -char func_ram_bank1_a::b#3 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 -char func_ram_bank1_a::return#1 -char func_ram_bank1_a::return#2 -char func_ram_bank1_a::return#3 -char func_ram_bank1_a::return#4 -char func_ram_bank1_a::return#5 -char func_ram_bank1_a::return#6 -char func_ram_bank1_a::return#7 -char func_ram_bank1_a::return#8 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::$0 -char func_ram_bank1_b::a -char func_ram_bank1_b::a#0 -char func_ram_bank1_b::a#1 -char func_ram_bank1_b::b -char func_ram_bank1_b::b#0 -char func_ram_bank1_b::b#1 -char func_ram_bank1_b::return -char func_ram_bank1_b::return#0 -char func_ram_bank1_b::return#1 -char func_ram_bank1_b::return#2 -char func_ram_bank1_b::return#3 -char func_ram_bank1_b::return#4 -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::$0 -char func_ram_bank1_c::a -char func_ram_bank1_c::a#0 -char func_ram_bank1_c::a#1 -char func_ram_bank1_c::b -char func_ram_bank1_c::b#0 -char func_ram_bank1_c::b#1 -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 -char func_ram_bank1_c::return#1 -char func_ram_bank1_c::return#2 -char func_ram_bank1_c::return#3 -char func_ram_bank1_c::return#4 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::$0 -char func_ram_bank1_d::a -char func_ram_bank1_d::a#0 -char func_ram_bank1_d::a#1 -char func_ram_bank1_d::b -char func_ram_bank1_d::b#0 -char func_ram_bank1_d::b#1 -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 -char func_ram_bank1_d::return#1 -char func_ram_bank1_d::return#2 -char func_ram_bank1_d::return#3 -char func_ram_bank1_d::return#4 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::$0 -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 -char func_ram_bank1_e::a#1 -char func_ram_bank1_e::a#2 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 -char func_ram_bank1_e::b#1 -char func_ram_bank1_e::b#2 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 -char func_ram_bank1_e::return#1 -char func_ram_bank1_e::return#2 -char func_ram_bank1_e::return#3 -char func_ram_bank1_e::return#4 -char func_ram_bank1_e::return#5 -char func_ram_bank1_e::return#6 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::$0 -char func_ram_bank1_f::a -char func_ram_bank1_f::a#0 -char func_ram_bank1_f::a#1 -char func_ram_bank1_f::b -char func_ram_bank1_f::b#0 -char func_ram_bank1_f::b#1 -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 -char func_ram_bank1_f::return#1 -char func_ram_bank1_f::return#2 -char func_ram_bank1_f::return#3 -char func_ram_bank1_f::return#4 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::$0 -char func_rom_bank2_a::a -char func_rom_bank2_a::a#0 -char func_rom_bank2_a::a#1 -char func_rom_bank2_a::a#2 -char func_rom_bank2_a::a#3 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#0 -char func_rom_bank2_a::b#1 -char func_rom_bank2_a::b#2 -char func_rom_bank2_a::b#3 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 -char func_rom_bank2_a::return#1 -char func_rom_bank2_a::return#2 -char func_rom_bank2_a::return#3 -char func_rom_bank2_a::return#4 -char func_rom_bank2_a::return#5 -char func_rom_bank2_a::return#6 -char func_rom_bank2_a::return#7 -char func_rom_bank2_a::return#8 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::$0 -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 -char func_rom_bank2_b::a#1 -char func_rom_bank2_b::a#2 -char func_rom_bank2_b::a#3 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 -char func_rom_bank2_b::b#1 -char func_rom_bank2_b::b#2 -char func_rom_bank2_b::b#3 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 -char func_rom_bank2_b::return#1 -char func_rom_bank2_b::return#2 -char func_rom_bank2_b::return#3 -char func_rom_bank2_b::return#4 -char func_rom_bank2_b::return#5 -char func_rom_bank2_b::return#6 -char func_rom_bank2_b::return#7 -char func_rom_bank2_b::return#8 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::$0 -char func_rom_bank2_c::a -char func_rom_bank2_c::a#0 -char func_rom_bank2_c::a#1 -char func_rom_bank2_c::b -char func_rom_bank2_c::b#0 -char func_rom_bank2_c::b#1 -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 -char func_rom_bank2_c::return#1 -char func_rom_bank2_c::return#2 -char func_rom_bank2_c::return#3 -char func_rom_bank2_c::return#4 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::$0 -char func_rom_bank2_d::a -char func_rom_bank2_d::a#0 -char func_rom_bank2_d::a#1 -char func_rom_bank2_d::b -char func_rom_bank2_d::b#0 -char func_rom_bank2_d::b#1 -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 -char func_rom_bank2_d::return#1 -char func_rom_bank2_d::return#2 -char func_rom_bank2_d::return#3 -char func_rom_bank2_d::return#4 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::$0 -char func_rom_bank2_e::a -char func_rom_bank2_e::a#0 -char func_rom_bank2_e::a#1 -char func_rom_bank2_e::a#2 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#0 -char func_rom_bank2_e::b#1 -char func_rom_bank2_e::b#2 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 -char func_rom_bank2_e::return#1 -char func_rom_bank2_e::return#2 -char func_rom_bank2_e::return#3 -char func_rom_bank2_e::return#4 -char func_rom_bank2_e::return#5 -char func_rom_bank2_e::return#6 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::$0 -char func_rom_bank2_f::a -char func_rom_bank2_f::a#0 -char func_rom_bank2_f::a#1 -char func_rom_bank2_f::b -char func_rom_bank2_f::b#0 -char func_rom_bank2_f::b#1 -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 -char func_rom_bank2_f::return#1 -char func_rom_bank2_f::return#2 -char func_rom_bank2_f::return#3 -char func_rom_bank2_f::return#4 -void main() -char main::$0 -char main::$1 -char main::$10 -char main::$11 -char main::$12 -char main::$13 -char main::$2 -char main::$3 -char main::$4 -char main::$5 -char main::$6 -char main::$7 -char main::$8 -char main::$9 - -Adding number conversion cast (unumber) 7 in func_ram_bank1_a::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Adding number conversion cast (unumber) 7 in func_ram_bank1_b::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$1 -Adding number conversion cast (unumber) 7 in func_ram_bank1_c::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$2 -Adding number conversion cast (unumber) 7 in func_ram_bank1_d::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$3 -Adding number conversion cast (unumber) 7 in func_ram_bank1_e::b#1 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$4 -Adding number conversion cast (unumber) 7 in func_ram_bank1_f::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$5 -Adding number conversion cast (unumber) 7 in func_rom_bank2_a::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$6 -Adding number conversion cast (unumber) 7 in func_rom_bank2_b::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$7 -Adding number conversion cast (unumber) 7 in func_rom_bank2_c::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$8 -Adding number conversion cast (unumber) 7 in func_rom_bank2_d::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$9 -Adding number conversion cast (unumber) 7 in func_rom_bank2_e::b#1 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$10 -Adding number conversion cast (unumber) 7 in func_rom_bank2_f::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$11 -Adding number conversion cast (unumber) 7 in func_main_a::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$12 -Adding number conversion cast (unumber) 7 in func_main_b::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$13 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast func_ram_bank1_a::b#2 = (unumber)7 -Inlining cast func_ram_bank1_b::b#0 = (unumber)7 -Inlining cast func_ram_bank1_c::b#0 = (unumber)7 -Inlining cast func_ram_bank1_d::b#0 = (unumber)7 -Inlining cast func_ram_bank1_e::b#1 = (unumber)7 -Inlining cast func_ram_bank1_f::b#0 = (unumber)7 -Inlining cast func_rom_bank2_a::b#2 = (unumber)7 -Inlining cast func_rom_bank2_b::b#2 = (unumber)7 -Inlining cast func_rom_bank2_c::b#0 = (unumber)7 -Inlining cast func_rom_bank2_d::b#0 = (unumber)7 -Inlining cast func_rom_bank2_e::b#1 = (unumber)7 -Inlining cast func_rom_bank2_f::b#0 = (unumber)7 -Inlining cast func_main_a::b#2 = (unumber)7 -Inlining cast func_main_b::b#0 = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 func_ram_bank1_a::return#5 func_ram_bank1_a::return#1 -Alias func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 func_ram_bank1_b::return#3 func_ram_bank1_b::return#1 -Alias func_ram_bank1_a::return#2 = func_ram_bank1_a::return#6 -Alias func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 func_ram_bank1_c::return#3 func_ram_bank1_c::return#1 -Alias func_rom_bank2_a::return#0 = func_rom_bank2_a::return#5 -Alias func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 func_ram_bank1_d::return#3 func_ram_bank1_d::return#1 -Alias func_rom_bank2_b::return#0 = func_rom_bank2_b::return#5 -Alias func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 func_ram_bank1_e::return#4 func_ram_bank1_e::return#1 -Alias func_main_a::return#0 = func_main_a::return#5 -Alias func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 func_ram_bank1_f::return#3 func_ram_bank1_f::return#1 -Alias func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 func_rom_bank2_a::return#6 func_rom_bank2_a::return#2 -Alias func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 func_rom_bank2_b::return#6 func_rom_bank2_b::return#2 -Alias func_ram_bank1_a::return#3 = func_ram_bank1_a::return#7 -Alias func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 func_rom_bank2_c::return#3 func_rom_bank2_c::return#1 -Alias func_rom_bank2_a::return#3 = func_rom_bank2_a::return#7 -Alias func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 func_rom_bank2_d::return#3 func_rom_bank2_d::return#1 -Alias func_rom_bank2_b::return#3 = func_rom_bank2_b::return#7 -Alias func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 func_rom_bank2_e::return#4 func_rom_bank2_e::return#1 -Alias func_main_a::return#1 = func_main_a::return#6 -Alias func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 func_rom_bank2_f::return#3 func_rom_bank2_f::return#1 -Alias func_ram_bank1_e::return#2 = func_ram_bank1_e::return#5 -Alias func_main_a::return#2 = func_main_a::$0 func_main_a::return#7 func_main_a::return#3 -Alias func_rom_bank2_e::return#2 = func_rom_bank2_e::return#5 -Alias func_main_b::return#0 = func_main_b::$0 func_main_b::return#3 func_main_b::return#1 -Alias func_ram_bank1_a::return#4 = func_ram_bank1_a::return#8 -Alias func_ram_bank1_b::return#2 = func_ram_bank1_b::return#4 -Alias func_ram_bank1_c::return#2 = func_ram_bank1_c::return#4 -Alias func_ram_bank1_d::return#2 = func_ram_bank1_d::return#4 -Alias func_ram_bank1_e::return#3 = func_ram_bank1_e::return#6 -Alias func_ram_bank1_f::return#2 = func_ram_bank1_f::return#4 -Alias func_rom_bank2_a::return#4 = func_rom_bank2_a::return#8 -Alias func_rom_bank2_b::return#4 = func_rom_bank2_b::return#8 -Alias func_rom_bank2_c::return#2 = func_rom_bank2_c::return#4 -Alias func_rom_bank2_d::return#2 = func_rom_bank2_d::return#4 -Alias func_rom_bank2_e::return#3 = func_rom_bank2_e::return#6 -Alias func_rom_bank2_f::return#2 = func_rom_bank2_f::return#4 -Alias func_main_a::return#4 = func_main_a::return#8 -Alias func_main_b::return#2 = func_main_b::return#4 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values func_ram_bank1_b::a#1 func_ram_bank1_b::a#0 -Identical Phi Values func_ram_bank1_b::b#1 func_ram_bank1_b::b#0 -Identical Phi Values func_ram_bank1_c::a#1 func_ram_bank1_c::a#0 -Identical Phi Values func_ram_bank1_c::b#1 func_ram_bank1_c::b#0 -Identical Phi Values func_ram_bank1_d::a#1 func_ram_bank1_d::a#0 -Identical Phi Values func_ram_bank1_d::b#1 func_ram_bank1_d::b#0 -Identical Phi Values func_ram_bank1_f::a#1 func_ram_bank1_f::a#0 -Identical Phi Values func_ram_bank1_f::b#1 func_ram_bank1_f::b#0 -Identical Phi Values func_rom_bank2_c::a#1 func_rom_bank2_c::a#0 -Identical Phi Values func_rom_bank2_c::b#1 func_rom_bank2_c::b#0 -Identical Phi Values func_rom_bank2_d::a#1 func_rom_bank2_d::a#0 -Identical Phi Values func_rom_bank2_d::b#1 func_rom_bank2_d::b#0 -Identical Phi Values func_rom_bank2_f::a#1 func_rom_bank2_f::a#0 -Identical Phi Values func_rom_bank2_f::b#1 func_rom_bank2_f::b#0 -Identical Phi Values func_main_b::a#1 func_main_b::a#0 -Identical Phi Values func_main_b::b#1 func_main_b::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant func_ram_bank1_a::a#2 = '0' -Constant func_ram_bank1_a::b#2 = 7 -Constant func_ram_bank1_b::a#0 = '0' -Constant func_ram_bank1_b::b#0 = 7 -Constant func_ram_bank1_c::a#0 = '0' -Constant func_ram_bank1_c::b#0 = 7 -Constant func_ram_bank1_d::a#0 = '0' -Constant func_ram_bank1_d::b#0 = 7 -Constant func_ram_bank1_e::a#1 = '0' -Constant func_ram_bank1_e::b#1 = 7 -Constant func_ram_bank1_f::a#0 = '0' -Constant func_ram_bank1_f::b#0 = 7 -Constant func_rom_bank2_a::a#2 = '0' -Constant func_rom_bank2_a::b#2 = 7 -Constant func_rom_bank2_b::a#2 = '0' -Constant func_rom_bank2_b::b#2 = 7 -Constant func_rom_bank2_c::a#0 = '0' -Constant func_rom_bank2_c::b#0 = 7 -Constant func_rom_bank2_d::a#0 = '0' -Constant func_rom_bank2_d::b#0 = 7 -Constant func_rom_bank2_e::a#1 = '0' -Constant func_rom_bank2_e::b#1 = 7 -Constant func_rom_bank2_f::a#0 = '0' -Constant func_rom_bank2_f::b#0 = 7 -Constant func_main_a::a#2 = '0' -Constant func_main_a::b#2 = 7 -Constant func_main_b::a#0 = '0' -Constant func_main_b::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 -Constant func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 -Constant func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 -Constant func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 -Constant func_main_a::a#0 = func_ram_bank1_f::a#0 -Constant func_main_a::b#0 = func_ram_bank1_f::b#0 -Constant func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 -Constant func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 -Constant func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 -Constant func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 -Constant func_main_a::a#1 = func_rom_bank2_f::a#0 -Constant func_main_a::b#1 = func_rom_bank2_f::b#0 -Constant func_rom_bank2_e::a#0 = func_main_b::a#0 -Constant func_rom_bank2_e::b#0 = func_main_b::b#0 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [87] SCREEN[0] = main::$0 -Simplifying expression containing zero SCREEN in [93] SCREEN[0] = main::$1 -Simplifying expression containing zero SCREEN in [99] SCREEN[0] = main::$2 -Simplifying expression containing zero SCREEN in [105] SCREEN[0] = main::$3 -Simplifying expression containing zero SCREEN in [111] SCREEN[0] = main::$4 -Simplifying expression containing zero SCREEN in [117] SCREEN[0] = main::$5 -Simplifying expression containing zero SCREEN in [123] SCREEN[0] = main::$6 -Simplifying expression containing zero SCREEN in [129] SCREEN[0] = main::$7 -Simplifying expression containing zero SCREEN in [135] SCREEN[0] = main::$8 -Simplifying expression containing zero SCREEN in [141] SCREEN[0] = main::$9 -Simplifying expression containing zero SCREEN in [147] SCREEN[0] = main::$10 -Simplifying expression containing zero SCREEN in [153] SCREEN[0] = main::$11 -Simplifying expression containing zero SCREEN in [159] SCREEN[0] = main::$12 -Simplifying expression containing zero SCREEN in [165] SCREEN[0] = main::$13 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [3] func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0 + func_ram_bank1_b::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$1 = func_ram_bank1_b::return#2 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings func_ram_bank1_a::a#2 -Inlining constant with var siblings func_ram_bank1_a::b#2 -Inlining constant with var siblings func_ram_bank1_a::a#0 -Inlining constant with var siblings func_ram_bank1_a::b#0 -Inlining constant with var siblings func_ram_bank1_a::a#1 -Inlining constant with var siblings func_ram_bank1_a::b#1 -Inlining constant with different constant siblings func_ram_bank1_b::return#2 -Inlining constant with var siblings func_ram_bank1_e::a#1 -Inlining constant with var siblings func_ram_bank1_e::b#1 -Inlining constant with var siblings func_rom_bank2_a::a#2 -Inlining constant with var siblings func_rom_bank2_a::b#2 -Inlining constant with var siblings func_rom_bank2_a::a#0 -Inlining constant with var siblings func_rom_bank2_a::b#0 -Inlining constant with var siblings func_rom_bank2_a::a#1 -Inlining constant with var siblings func_rom_bank2_a::b#1 -Inlining constant with var siblings func_rom_bank2_b::a#2 -Inlining constant with var siblings func_rom_bank2_b::b#2 -Inlining constant with var siblings func_rom_bank2_e::a#1 -Inlining constant with var siblings func_rom_bank2_e::b#1 -Inlining constant with var siblings func_rom_bank2_e::a#0 -Inlining constant with var siblings func_rom_bank2_e::b#0 -Inlining constant with var siblings func_main_a::a#2 -Inlining constant with var siblings func_main_a::b#2 -Inlining constant with var siblings func_main_a::a#0 -Inlining constant with var siblings func_main_a::b#0 -Inlining constant with var siblings func_main_a::a#1 -Inlining constant with var siblings func_main_a::b#1 -Constant inlined func_rom_bank2_e::a#0 = func_main_b::a#0 -Constant inlined func_rom_bank2_e::b#0 = func_main_b::b#0 -Constant inlined func_rom_bank2_e::a#1 = '0' -Constant inlined func_rom_bank2_e::b#1 = 7 -Constant inlined func_ram_bank1_e::b#1 = 7 -Constant inlined func_ram_bank1_e::a#1 = '0' -Constant inlined func_main_a::a#0 = func_ram_bank1_f::a#0 -Constant inlined func_main_a::b#0 = func_ram_bank1_f::b#0 -Constant inlined func_main_a::a#1 = func_rom_bank2_f::a#0 -Constant inlined func_main_a::b#1 = func_rom_bank2_f::b#0 -Constant inlined func_main_a::a#2 = '0' -Constant inlined func_main_a::b#2 = 7 -Constant inlined func_ram_bank1_a::b#2 = 7 -Constant inlined func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 -Constant inlined func_ram_bank1_a::a#2 = '0' -Constant inlined func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 -Constant inlined func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 -Constant inlined func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 -Constant inlined func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 -Constant inlined func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 -Constant inlined func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 -Constant inlined func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 -Constant inlined func_rom_bank2_a::a#2 = '0' -Constant inlined func_rom_bank2_a::b#2 = 7 -Constant inlined main::$1 = func_ram_bank1_b::return#0 -Constant inlined func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 -Constant inlined func_rom_bank2_b::a#2 = '0' -Constant inlined func_rom_bank2_b::b#2 = 7 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of main -Adding NOP phi() at start of func_ram_bank1_b -Adding NOP phi() at start of func_ram_bank1_c -Adding NOP phi() at start of func_ram_bank1_d -Adding NOP phi() at start of func_ram_bank1_f -Adding NOP phi() at start of func_rom_bank2_c -Adding NOP phi() at start of func_rom_bank2_d -Adding NOP phi() at start of func_rom_bank2_f -Adding NOP phi() at start of func_main_b -CALL GRAPH -Calls in [main] to func_ram_bank1_a:1 func_ram_bank1_b:5 func_ram_bank1_c:7 func_ram_bank1_d:11 func_ram_bank1_e:15 func_ram_bank1_f:19 func_rom_bank2_a:23 func_rom_bank2_b:27 func_rom_bank2_c:31 func_rom_bank2_d:35 func_rom_bank2_e:39 func_rom_bank2_f:43 func_main_a:47 func_main_b:51 -Calls in [func_ram_bank1_c] to func_ram_bank1_a:62 -Calls in [func_ram_bank1_d] to func_rom_bank2_a:67 -Calls in [func_ram_bank1_e] to func_rom_bank2_b:76 -Calls in [func_ram_bank1_f] to func_main_a:81 -Calls in [func_rom_bank2_c] to func_ram_bank1_a:92 -Calls in [func_rom_bank2_d] to func_rom_bank2_a:97 -Calls in [func_rom_bank2_e] to func_rom_bank2_b:106 -Calls in [func_rom_bank2_f] to func_main_a:111 -Calls in [func_main_a] to func_ram_bank1_e:120 -Calls in [func_main_b] to func_rom_bank2_e:125 - -Created 12 initial phi equivalence classes -Coalesced [74] func_rom_bank2_b::a#4 = func_rom_bank2_b::a#0 -Coalesced [75] func_rom_bank2_b::b#4 = func_rom_bank2_b::b#0 -Coalesced [104] func_rom_bank2_b::a#5 = func_rom_bank2_b::a#1 -Coalesced [105] func_rom_bank2_b::b#5 = func_rom_bank2_b::b#1 -Coalesced [118] func_ram_bank1_e::a#3 = func_ram_bank1_e::a#0 -Coalesced [119] func_ram_bank1_e::b#3 = func_ram_bank1_e::b#0 -Coalesced down to 12 phi equivalence classes -Adding NOP phi() at start of main -Adding NOP phi() at start of func_ram_bank1_b -Adding NOP phi() at start of func_ram_bank1_c -Adding NOP phi() at start of func_ram_bank1_d -Adding NOP phi() at start of func_ram_bank1_f -Adding NOP phi() at start of func_rom_bank2_c -Adding NOP phi() at start of func_rom_bank2_d -Adding NOP phi() at start of func_rom_bank2_f -Adding NOP phi() at start of func_main_b - -FINAL CONTROL FLOW GRAPH - -void main() -main: scope:[main] from - [0] phi() - [1] call func_ram_bank1_a - [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - to:main::@1 -main::@1: scope:[main] from main - [3] main::$0 = func_ram_bank1_a::return#4 - [4] *SCREEN = main::$0 - [5] call func_ram_bank1_b - to:main::@2 -main::@2: scope:[main] from main::@1 - [6] *SCREEN = func_ram_bank1_b::return#0 - [7] call func_ram_bank1_c - [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - to:main::@3 -main::@3: scope:[main] from main::@2 - [9] main::$2 = func_ram_bank1_c::return#2 - [10] *SCREEN = main::$2 - [11] call func_ram_bank1_d - [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - to:main::@4 -main::@4: scope:[main] from main::@3 - [13] main::$3 = func_ram_bank1_d::return#2 - [14] *SCREEN = main::$3 - [15] call func_ram_bank1_e - [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - to:main::@5 -main::@5: scope:[main] from main::@4 - [17] main::$4 = func_ram_bank1_e::return#3 - [18] *SCREEN = main::$4 - [19] call func_ram_bank1_f - [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - to:main::@6 -main::@6: scope:[main] from main::@5 - [21] main::$5 = func_ram_bank1_f::return#2 - [22] *SCREEN = main::$5 - [23] call func_rom_bank2_a - [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - to:main::@7 -main::@7: scope:[main] from main::@6 - [25] main::$6 = func_rom_bank2_a::return#4 - [26] *SCREEN = main::$6 - [27] call func_rom_bank2_b - [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - to:main::@8 -main::@8: scope:[main] from main::@7 - [29] main::$7 = func_rom_bank2_b::return#4 - [30] *SCREEN = main::$7 - [31] call func_rom_bank2_c - [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - to:main::@9 -main::@9: scope:[main] from main::@8 - [33] main::$8 = func_rom_bank2_c::return#2 - [34] *SCREEN = main::$8 - [35] call func_rom_bank2_d - [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - to:main::@10 -main::@10: scope:[main] from main::@9 - [37] main::$9 = func_rom_bank2_d::return#2 - [38] *SCREEN = main::$9 - [39] call func_rom_bank2_e - [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - to:main::@11 -main::@11: scope:[main] from main::@10 - [41] main::$10 = func_rom_bank2_e::return#3 - [42] *SCREEN = main::$10 - [43] call func_rom_bank2_f - [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - to:main::@12 -main::@12: scope:[main] from main::@11 - [45] main::$11 = func_rom_bank2_f::return#2 - [46] *SCREEN = main::$11 - [47] call func_main_a - [48] func_main_a::return#4 = func_main_a::return#2 - to:main::@13 -main::@13: scope:[main] from main::@12 - [49] main::$12 = func_main_a::return#4 - [50] *SCREEN = main::$12 - [51] call func_main_b - [52] func_main_b::return#2 = func_main_b::return#0 - to:main::@14 -main::@14: scope:[main] from main::@13 - [53] main::$13 = func_main_b::return#2 - [54] *SCREEN = main::$13 - to:main::@return -main::@return: scope:[main] from main::@14 - [55] return - to:@return - -__bank(bank) char func_ram_bank1_a(char a , char b) -func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main - [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) - [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) - [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 - to:func_ram_bank1_a::@return -func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a - [58] return - to:@return - -char func_ram_bank1_b(char a , char b) -func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 - [59] phi() - to:func_ram_bank1_b::@return -func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b - [60] return - to:@return - -__bank(bank) char func_ram_bank1_c(char a , char b) -func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 - [61] phi() - [62] call func_ram_bank1_a - [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - to:func_ram_bank1_c::@1 -func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c - [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - to:func_ram_bank1_c::@return -func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 - [65] return - to:@return - -__bank(bank) char func_ram_bank1_d(char a , char b) -func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 - [66] phi() - [67] call func_rom_bank2_a - [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - to:func_ram_bank1_d::@1 -func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d - [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - to:func_ram_bank1_d::@return -func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 - [70] return - to:@return - -__bank(bank) char func_ram_bank1_e(char a , char b) -func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 - [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) - [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) - [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - [74] call func_rom_bank2_b - [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - to:func_ram_bank1_e::@1 -func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e - [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - to:func_ram_bank1_e::@return -func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 - [77] return - to:@return - -__bank(bank) char func_ram_bank1_f(char a , char b) -func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 - [78] phi() - [79] call func_main_a - [80] func_main_a::return#0 = func_main_a::return#2 - to:func_ram_bank1_f::@1 -func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f - [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - to:func_ram_bank1_f::@return -func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 - [82] return - to:@return - -__bank(bank) char func_rom_bank2_a(char a , char b) -func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 - [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) - [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) - [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 - to:func_rom_bank2_a::@return -func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a - [85] return - to:@return - -char func_rom_bank2_b(char a , char b) -func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 - [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) - [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) - [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 - to:func_rom_bank2_b::@return -func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b - [88] return - to:@return - -__bank(bank) char func_rom_bank2_c(char a , char b) -func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 - [89] phi() - [90] call func_ram_bank1_a - [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - to:func_rom_bank2_c::@1 -func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c - [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - to:func_rom_bank2_c::@return -func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 - [93] return - to:@return - -__bank(bank) char func_rom_bank2_d(char a , char b) -func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 - [94] phi() - [95] call func_rom_bank2_a - [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - to:func_rom_bank2_d::@1 -func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d - [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - to:func_rom_bank2_d::@return -func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 - [98] return - to:@return - -__bank(bank) char func_rom_bank2_e(char a , char b) -func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 - [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) - [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) - [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - [102] call func_rom_bank2_b - [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - to:func_rom_bank2_e::@1 -func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e - [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - to:func_rom_bank2_e::@return -func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 - [105] return - to:@return - -__bank(bank) char func_rom_bank2_f(char a , char b) -func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 - [106] phi() - [107] call func_main_a - [108] func_main_a::return#1 = func_main_a::return#2 - to:func_rom_bank2_f::@1 -func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f - [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - to:func_rom_bank2_f::@return -func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 - [110] return - to:@return - -char func_main_a(char a , char b) -func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 - [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) - [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) - [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - [114] call func_ram_bank1_e - [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - to:func_main_a::@1 -func_main_a::@1: scope:[func_main_a] from func_main_a - [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - to:func_main_a::@return -func_main_a::@return: scope:[func_main_a] from func_main_a::@1 - [117] return - to:@return - -char func_main_b(char a , char b) -func_main_b: scope:[func_main_b] from main::@13 - [118] phi() - [119] call func_rom_bank2_e - [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - to:func_main_b::@1 -func_main_b::@1: scope:[func_main_b] from func_main_b - [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - to:func_main_b::@return -func_main_b::@return: scope:[func_main_b] from func_main_b::@1 - [122] return - to:@return - - -VARIABLE REGISTER WEIGHTS -char func_main_a(char a , char b) -char func_main_a::a -char func_main_a::a#3 // 101.0 -char func_main_a::b -char func_main_a::b#3 // 50.5 -char func_main_a::return -char func_main_a::return#0 // 22.0 -char func_main_a::return#1 // 22.0 -char func_main_a::return#2 // 25.0 -char func_main_a::return#4 // 4.0 -char func_main_b(char a , char b) -char func_main_b::a -char func_main_b::b -char func_main_b::return -char func_main_b::return#0 // 4.333333333333333 -char func_main_b::return#2 // 4.0 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::a -char func_ram_bank1_a::a#3 // 101.0 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#3 // 101.0 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 // 24.999999999999996 -char func_ram_bank1_a::return#2 // 22.0 -char func_ram_bank1_a::return#3 // 22.0 -char func_ram_bank1_a::return#4 // 4.0 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::a -char func_ram_bank1_b::b -char func_ram_bank1_b::return -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::a -char func_ram_bank1_c::b -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 // 4.333333333333333 -char func_ram_bank1_c::return#2 // 4.0 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::a -char func_ram_bank1_d::b -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 // 4.333333333333333 -char func_ram_bank1_d::return#2 // 4.0 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 // 101.0 -char func_ram_bank1_e::a#2 // 1102.0 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 // 202.0 -char func_ram_bank1_e::b#2 // 551.0 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 // 276.0 -char func_ram_bank1_e::return#2 // 202.0 -char func_ram_bank1_e::return#3 // 4.0 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::a -char func_ram_bank1_f::b -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 // 4.333333333333333 -char func_ram_bank1_f::return#2 // 4.0 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::a -char func_rom_bank2_a::a#3 // 101.0 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#3 // 101.0 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 // 22.0 -char func_rom_bank2_a::return#1 // 25.0 -char func_rom_bank2_a::return#3 // 22.0 -char func_rom_bank2_a::return#4 // 4.0 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 // 1001.0 -char func_rom_bank2_b::a#1 // 101.0 -char func_rom_bank2_b::a#3 // 11103.0 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 // 2002.0 -char func_rom_bank2_b::b#1 // 202.0 -char func_rom_bank2_b::b#3 // 11103.0 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 // 2002.0 -char func_rom_bank2_b::return#1 // 2221.0 -char func_rom_bank2_b::return#3 // 202.0 -char func_rom_bank2_b::return#4 // 4.0 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::a -char func_rom_bank2_c::b -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 // 4.333333333333333 -char func_rom_bank2_c::return#2 // 4.0 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::a -char func_rom_bank2_d::b -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 // 4.333333333333333 -char func_rom_bank2_d::return#2 // 4.0 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::a -char func_rom_bank2_e::a#2 // 101.0 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#2 // 50.5 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 // 28.5 -char func_rom_bank2_e::return#2 // 22.0 -char func_rom_bank2_e::return#3 // 4.0 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::a -char func_rom_bank2_f::b -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 // 4.333333333333333 -char func_rom_bank2_f::return#2 // 4.0 -void main() -char main::$0 // 4.0 -char main::$10 // 4.0 -char main::$11 // 4.0 -char main::$12 // 4.0 -char main::$13 // 4.0 -char main::$2 // 4.0 -char main::$3 // 4.0 -char main::$4 // 4.0 -char main::$5 // 4.0 -char main::$6 // 4.0 -char main::$7 // 4.0 -char main::$8 // 4.0 -char main::$9 // 4.0 - -Initial phi equivalence classes -[ func_ram_bank1_a::a#3 ] -[ func_ram_bank1_a::b#3 ] -[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -[ func_rom_bank2_a::a#3 ] -[ func_rom_bank2_a::b#3 ] -[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -[ func_rom_bank2_e::a#2 ] -[ func_rom_bank2_e::b#2 ] -[ func_main_a::a#3 ] -[ func_main_a::b#3 ] -Added variable func_ram_bank1_a::return#4 to live range equivalence class [ func_ram_bank1_a::return#4 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Added variable func_ram_bank1_c::return#2 to live range equivalence class [ func_ram_bank1_c::return#2 ] -Added variable main::$2 to live range equivalence class [ main::$2 ] -Added variable func_ram_bank1_d::return#2 to live range equivalence class [ func_ram_bank1_d::return#2 ] -Added variable main::$3 to live range equivalence class [ main::$3 ] -Added variable func_ram_bank1_e::return#3 to live range equivalence class [ func_ram_bank1_e::return#3 ] -Added variable main::$4 to live range equivalence class [ main::$4 ] -Added variable func_ram_bank1_f::return#2 to live range equivalence class [ func_ram_bank1_f::return#2 ] -Added variable main::$5 to live range equivalence class [ main::$5 ] -Added variable func_rom_bank2_a::return#4 to live range equivalence class [ func_rom_bank2_a::return#4 ] -Added variable main::$6 to live range equivalence class [ main::$6 ] -Added variable func_rom_bank2_b::return#4 to live range equivalence class [ func_rom_bank2_b::return#4 ] -Added variable main::$7 to live range equivalence class [ main::$7 ] -Added variable func_rom_bank2_c::return#2 to live range equivalence class [ func_rom_bank2_c::return#2 ] -Added variable main::$8 to live range equivalence class [ main::$8 ] -Added variable func_rom_bank2_d::return#2 to live range equivalence class [ func_rom_bank2_d::return#2 ] -Added variable main::$9 to live range equivalence class [ main::$9 ] -Added variable func_rom_bank2_e::return#3 to live range equivalence class [ func_rom_bank2_e::return#3 ] -Added variable main::$10 to live range equivalence class [ main::$10 ] -Added variable func_rom_bank2_f::return#2 to live range equivalence class [ func_rom_bank2_f::return#2 ] -Added variable main::$11 to live range equivalence class [ main::$11 ] -Added variable func_main_a::return#4 to live range equivalence class [ func_main_a::return#4 ] -Added variable main::$12 to live range equivalence class [ main::$12 ] -Added variable func_main_b::return#2 to live range equivalence class [ func_main_b::return#2 ] -Added variable main::$13 to live range equivalence class [ main::$13 ] -Added variable func_ram_bank1_a::return#0 to live range equivalence class [ func_ram_bank1_a::return#0 ] -Added variable func_ram_bank1_a::return#2 to live range equivalence class [ func_ram_bank1_a::return#2 ] -Added variable func_ram_bank1_c::return#0 to live range equivalence class [ func_ram_bank1_c::return#0 ] -Added variable func_rom_bank2_a::return#0 to live range equivalence class [ func_rom_bank2_a::return#0 ] -Added variable func_ram_bank1_d::return#0 to live range equivalence class [ func_ram_bank1_d::return#0 ] -Added variable func_rom_bank2_b::return#0 to live range equivalence class [ func_rom_bank2_b::return#0 ] -Added variable func_ram_bank1_e::return#0 to live range equivalence class [ func_ram_bank1_e::return#0 ] -Added variable func_main_a::return#0 to live range equivalence class [ func_main_a::return#0 ] -Added variable func_ram_bank1_f::return#0 to live range equivalence class [ func_ram_bank1_f::return#0 ] -Added variable func_rom_bank2_a::return#1 to live range equivalence class [ func_rom_bank2_a::return#1 ] -Added variable func_rom_bank2_b::return#1 to live range equivalence class [ func_rom_bank2_b::return#1 ] -Added variable func_ram_bank1_a::return#3 to live range equivalence class [ func_ram_bank1_a::return#3 ] -Added variable func_rom_bank2_c::return#0 to live range equivalence class [ func_rom_bank2_c::return#0 ] -Added variable func_rom_bank2_a::return#3 to live range equivalence class [ func_rom_bank2_a::return#3 ] -Added variable func_rom_bank2_d::return#0 to live range equivalence class [ func_rom_bank2_d::return#0 ] -Added variable func_rom_bank2_b::return#3 to live range equivalence class [ func_rom_bank2_b::return#3 ] -Added variable func_rom_bank2_e::return#0 to live range equivalence class [ func_rom_bank2_e::return#0 ] -Added variable func_main_a::return#1 to live range equivalence class [ func_main_a::return#1 ] -Added variable func_rom_bank2_f::return#0 to live range equivalence class [ func_rom_bank2_f::return#0 ] -Added variable func_ram_bank1_e::return#2 to live range equivalence class [ func_ram_bank1_e::return#2 ] -Added variable func_main_a::return#2 to live range equivalence class [ func_main_a::return#2 ] -Added variable func_rom_bank2_e::return#2 to live range equivalence class [ func_rom_bank2_e::return#2 ] -Added variable func_main_b::return#0 to live range equivalence class [ func_main_b::return#0 ] -Complete equivalence classes -[ func_ram_bank1_a::a#3 ] -[ func_ram_bank1_a::b#3 ] -[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -[ func_rom_bank2_a::a#3 ] -[ func_rom_bank2_a::b#3 ] -[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -[ func_rom_bank2_e::a#2 ] -[ func_rom_bank2_e::b#2 ] -[ func_main_a::a#3 ] -[ func_main_a::b#3 ] -[ func_ram_bank1_a::return#4 ] -[ main::$0 ] -[ func_ram_bank1_c::return#2 ] -[ main::$2 ] -[ func_ram_bank1_d::return#2 ] -[ main::$3 ] -[ func_ram_bank1_e::return#3 ] -[ main::$4 ] -[ func_ram_bank1_f::return#2 ] -[ main::$5 ] -[ func_rom_bank2_a::return#4 ] -[ main::$6 ] -[ func_rom_bank2_b::return#4 ] -[ main::$7 ] -[ func_rom_bank2_c::return#2 ] -[ main::$8 ] -[ func_rom_bank2_d::return#2 ] -[ main::$9 ] -[ func_rom_bank2_e::return#3 ] -[ main::$10 ] -[ func_rom_bank2_f::return#2 ] -[ main::$11 ] -[ func_main_a::return#4 ] -[ main::$12 ] -[ func_main_b::return#2 ] -[ main::$13 ] -[ func_ram_bank1_a::return#0 ] -[ func_ram_bank1_a::return#2 ] -[ func_ram_bank1_c::return#0 ] -[ func_rom_bank2_a::return#0 ] -[ func_ram_bank1_d::return#0 ] -[ func_rom_bank2_b::return#0 ] -[ func_ram_bank1_e::return#0 ] -[ func_main_a::return#0 ] -[ func_ram_bank1_f::return#0 ] -[ func_rom_bank2_a::return#1 ] -[ func_rom_bank2_b::return#1 ] -[ func_ram_bank1_a::return#3 ] -[ func_rom_bank2_c::return#0 ] -[ func_rom_bank2_a::return#3 ] -[ func_rom_bank2_d::return#0 ] -[ func_rom_bank2_b::return#3 ] -[ func_rom_bank2_e::return#0 ] -[ func_main_a::return#1 ] -[ func_rom_bank2_f::return#0 ] -[ func_ram_bank1_e::return#2 ] -[ func_main_a::return#2 ] -[ func_rom_bank2_e::return#2 ] -[ func_main_b::return#0 ] -Allocated zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -Allocated zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -Allocated zp[1]:4 [ func_rom_bank2_b::return#1 ] -Allocated zp[1]:5 [ func_rom_bank2_b::return#0 ] -Allocated zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -Allocated zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -Allocated zp[1]:8 [ func_ram_bank1_e::return#0 ] -Allocated zp[1]:9 [ func_rom_bank2_b::return#3 ] -Allocated zp[1]:10 [ func_ram_bank1_e::return#2 ] -Allocated zp[1]:11 [ func_ram_bank1_a::a#3 ] -Allocated zp[1]:12 [ func_ram_bank1_a::b#3 ] -Allocated zp[1]:13 [ func_rom_bank2_a::a#3 ] -Allocated zp[1]:14 [ func_rom_bank2_a::b#3 ] -Allocated zp[1]:15 [ func_rom_bank2_e::a#2 ] -Allocated zp[1]:16 [ func_main_a::a#3 ] -Allocated zp[1]:17 [ func_rom_bank2_e::b#2 ] -Allocated zp[1]:18 [ func_main_a::b#3 ] -Allocated zp[1]:19 [ func_rom_bank2_e::return#0 ] -Allocated zp[1]:20 [ func_rom_bank2_a::return#1 ] -Allocated zp[1]:21 [ func_main_a::return#2 ] -Allocated zp[1]:22 [ func_ram_bank1_a::return#0 ] -Allocated zp[1]:23 [ func_ram_bank1_a::return#2 ] -Allocated zp[1]:24 [ func_rom_bank2_a::return#0 ] -Allocated zp[1]:25 [ func_main_a::return#0 ] -Allocated zp[1]:26 [ func_ram_bank1_a::return#3 ] -Allocated zp[1]:27 [ func_rom_bank2_a::return#3 ] -Allocated zp[1]:28 [ func_main_a::return#1 ] -Allocated zp[1]:29 [ func_rom_bank2_e::return#2 ] -Allocated zp[1]:30 [ func_ram_bank1_c::return#0 ] -Allocated zp[1]:31 [ func_ram_bank1_d::return#0 ] -Allocated zp[1]:32 [ func_ram_bank1_f::return#0 ] -Allocated zp[1]:33 [ func_rom_bank2_c::return#0 ] -Allocated zp[1]:34 [ func_rom_bank2_d::return#0 ] -Allocated zp[1]:35 [ func_rom_bank2_f::return#0 ] -Allocated zp[1]:36 [ func_main_b::return#0 ] -Allocated zp[1]:37 [ func_ram_bank1_a::return#4 ] -Allocated zp[1]:38 [ main::$0 ] -Allocated zp[1]:39 [ func_ram_bank1_c::return#2 ] -Allocated zp[1]:40 [ main::$2 ] -Allocated zp[1]:41 [ func_ram_bank1_d::return#2 ] -Allocated zp[1]:42 [ main::$3 ] -Allocated zp[1]:43 [ func_ram_bank1_e::return#3 ] -Allocated zp[1]:44 [ main::$4 ] -Allocated zp[1]:45 [ func_ram_bank1_f::return#2 ] -Allocated zp[1]:46 [ main::$5 ] -Allocated zp[1]:47 [ func_rom_bank2_a::return#4 ] -Allocated zp[1]:48 [ main::$6 ] -Allocated zp[1]:49 [ func_rom_bank2_b::return#4 ] -Allocated zp[1]:50 [ main::$7 ] -Allocated zp[1]:51 [ func_rom_bank2_c::return#2 ] -Allocated zp[1]:52 [ main::$8 ] -Allocated zp[1]:53 [ func_rom_bank2_d::return#2 ] -Allocated zp[1]:54 [ main::$9 ] -Allocated zp[1]:55 [ func_rom_bank2_e::return#3 ] -Allocated zp[1]:56 [ main::$10 ] -Allocated zp[1]:57 [ func_rom_bank2_f::return#2 ] -Allocated zp[1]:58 [ main::$11 ] -Allocated zp[1]:59 [ func_main_a::return#4 ] -Allocated zp[1]:60 [ main::$12 ] -Allocated zp[1]:61 [ func_main_b::return#2 ] -Allocated zp[1]:62 [ main::$13 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] *SCREEN = func_ram_bank1_b::return#0 [ ] ( [ ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } } ) always clobbers reg byte a -Statement [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 [ func_ram_bank1_a::return#0 ] ( func_ram_bank1_a:1 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#4 } } func_ram_bank1_c:7::func_ram_bank1_a:62 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#2 } } func_rom_bank2_c:31::func_ram_bank1_a:90 [ func_ram_bank1_a::return#0 ] { { func_rom_bank2_c::return#0 = func_rom_bank2_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#3 } } ) always clobbers reg byte a -Statement [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 [ func_rom_bank2_a::return#1 ] ( func_rom_bank2_a:23 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#4 } } func_ram_bank1_d:11::func_rom_bank2_a:67 [ func_rom_bank2_a::return#1 ] { { func_ram_bank1_d::return#0 = func_ram_bank1_d::return#2 } { func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 } } func_rom_bank2_d:35::func_rom_bank2_a:95 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_d::return#0 = func_rom_bank2_d::return#2 } { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#3 } } ) always clobbers reg byte a -Statement [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 [ func_rom_bank2_b::return#1 ] ( func_rom_bank2_b:27 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#4 } } func_ram_bank1_e:15::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#3 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_main_a:47::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_main_a::return#2 = func_main_a::return#4 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_ram_bank1_f:19::func_main_a:79::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_f::return#0 = func_ram_bank1_f::return#2 } { func_main_a::return#0 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_f:43::func_main_a:107::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_f::return#0 = func_rom_bank2_f::return#2 } { func_main_a::return#1 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_e:39::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#3 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } func_main_b:51::func_rom_bank2_e:119::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_main_b::return#0 = func_main_b::return#2 } { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#2 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } ) always clobbers reg byte a -Potential registers zp[1]:11 [ func_ram_bank1_a::a#3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:12 [ func_ram_bank1_a::b#3 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:13 [ func_rom_bank2_a::a#3 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:14 [ func_rom_bank2_a::b#3 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:15 [ func_rom_bank2_e::a#2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:17 [ func_rom_bank2_e::b#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:16 [ func_main_a::a#3 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:18 [ func_main_a::b#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:37 [ func_ram_bank1_a::return#4 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:38 [ main::$0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ func_ram_bank1_c::return#2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:40 [ main::$2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:41 [ func_ram_bank1_d::return#2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:42 [ main::$3 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:43 [ func_ram_bank1_e::return#3 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:44 [ main::$4 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:45 [ func_ram_bank1_f::return#2 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:46 [ main::$5 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ func_rom_bank2_a::return#4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:48 [ main::$6 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:49 [ func_rom_bank2_b::return#4 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:50 [ main::$7 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:51 [ func_rom_bank2_c::return#2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:52 [ main::$8 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:53 [ func_rom_bank2_d::return#2 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:54 [ main::$9 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:55 [ func_rom_bank2_e::return#3 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:56 [ main::$10 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:57 [ func_rom_bank2_f::return#2 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:58 [ main::$11 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:59 [ func_main_a::return#4 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:60 [ main::$12 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:61 [ func_main_b::return#2 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:62 [ main::$13 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:22 [ func_ram_bank1_a::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:23 [ func_ram_bank1_a::return#2 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ func_ram_bank1_c::return#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:24 [ func_rom_bank2_a::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:31 [ func_ram_bank1_d::return#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ func_rom_bank2_b::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ func_ram_bank1_e::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:25 [ func_main_a::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:32 [ func_ram_bank1_f::return#0 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:20 [ func_rom_bank2_a::return#1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ func_rom_bank2_b::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:26 [ func_ram_bank1_a::return#3 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ func_rom_bank2_c::return#0 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:27 [ func_rom_bank2_a::return#3 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:34 [ func_rom_bank2_d::return#0 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ func_rom_bank2_b::return#3 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:19 [ func_rom_bank2_e::return#0 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:28 [ func_main_a::return#1 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ func_rom_bank2_f::return#0 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:10 [ func_ram_bank1_e::return#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:21 [ func_main_a::return#2 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:29 [ func_rom_bank2_e::return#2 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:36 [ func_main_b::return#0 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [func_rom_bank2_b] 13,307: zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] 12,205: zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] 2,221: zp[1]:4 [ func_rom_bank2_b::return#1 ] 2,002: zp[1]:5 [ func_rom_bank2_b::return#0 ] 202: zp[1]:9 [ func_rom_bank2_b::return#3 ] 4: zp[1]:49 [ func_rom_bank2_b::return#4 ] -Uplift Scope [func_ram_bank1_e] 1,203: zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] 753: zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] 276: zp[1]:8 [ func_ram_bank1_e::return#0 ] 202: zp[1]:10 [ func_ram_bank1_e::return#2 ] 4: zp[1]:43 [ func_ram_bank1_e::return#3 ] -Uplift Scope [func_ram_bank1_a] 101: zp[1]:11 [ func_ram_bank1_a::a#3 ] 101: zp[1]:12 [ func_ram_bank1_a::b#3 ] 25: zp[1]:22 [ func_ram_bank1_a::return#0 ] 22: zp[1]:23 [ func_ram_bank1_a::return#2 ] 22: zp[1]:26 [ func_ram_bank1_a::return#3 ] 4: zp[1]:37 [ func_ram_bank1_a::return#4 ] -Uplift Scope [func_rom_bank2_a] 101: zp[1]:13 [ func_rom_bank2_a::a#3 ] 101: zp[1]:14 [ func_rom_bank2_a::b#3 ] 25: zp[1]:20 [ func_rom_bank2_a::return#1 ] 22: zp[1]:24 [ func_rom_bank2_a::return#0 ] 22: zp[1]:27 [ func_rom_bank2_a::return#3 ] 4: zp[1]:47 [ func_rom_bank2_a::return#4 ] -Uplift Scope [func_main_a] 101: zp[1]:16 [ func_main_a::a#3 ] 50.5: zp[1]:18 [ func_main_a::b#3 ] 25: zp[1]:21 [ func_main_a::return#2 ] 22: zp[1]:25 [ func_main_a::return#0 ] 22: zp[1]:28 [ func_main_a::return#1 ] 4: zp[1]:59 [ func_main_a::return#4 ] -Uplift Scope [func_rom_bank2_e] 101: zp[1]:15 [ func_rom_bank2_e::a#2 ] 50.5: zp[1]:17 [ func_rom_bank2_e::b#2 ] 28.5: zp[1]:19 [ func_rom_bank2_e::return#0 ] 22: zp[1]:29 [ func_rom_bank2_e::return#2 ] 4: zp[1]:55 [ func_rom_bank2_e::return#3 ] -Uplift Scope [main] 4: zp[1]:38 [ main::$0 ] 4: zp[1]:40 [ main::$2 ] 4: zp[1]:42 [ main::$3 ] 4: zp[1]:44 [ main::$4 ] 4: zp[1]:46 [ main::$5 ] 4: zp[1]:48 [ main::$6 ] 4: zp[1]:50 [ main::$7 ] 4: zp[1]:52 [ main::$8 ] 4: zp[1]:54 [ main::$9 ] 4: zp[1]:56 [ main::$10 ] 4: zp[1]:58 [ main::$11 ] 4: zp[1]:60 [ main::$12 ] 4: zp[1]:62 [ main::$13 ] -Uplift Scope [func_ram_bank1_c] 4.33: zp[1]:30 [ func_ram_bank1_c::return#0 ] 4: zp[1]:39 [ func_ram_bank1_c::return#2 ] -Uplift Scope [func_ram_bank1_d] 4.33: zp[1]:31 [ func_ram_bank1_d::return#0 ] 4: zp[1]:41 [ func_ram_bank1_d::return#2 ] -Uplift Scope [func_ram_bank1_f] 4.33: zp[1]:32 [ func_ram_bank1_f::return#0 ] 4: zp[1]:45 [ func_ram_bank1_f::return#2 ] -Uplift Scope [func_rom_bank2_c] 4.33: zp[1]:33 [ func_rom_bank2_c::return#0 ] 4: zp[1]:51 [ func_rom_bank2_c::return#2 ] -Uplift Scope [func_rom_bank2_d] 4.33: zp[1]:34 [ func_rom_bank2_d::return#0 ] 4: zp[1]:53 [ func_rom_bank2_d::return#2 ] -Uplift Scope [func_rom_bank2_f] 4.33: zp[1]:35 [ func_rom_bank2_f::return#0 ] 4: zp[1]:57 [ func_rom_bank2_f::return#2 ] -Uplift Scope [func_main_b] 4.33: zp[1]:36 [ func_main_b::return#0 ] 4: zp[1]:61 [ func_main_b::return#2 ] -Uplift Scope [func_ram_bank1_b] -Uplift Scope [] - -Uplifting [func_rom_bank2_b] best 914 combination reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] reg byte a [ func_rom_bank2_b::return#1 ] reg byte a [ func_rom_bank2_b::return#0 ] zp[1]:9 [ func_rom_bank2_b::return#3 ] zp[1]:49 [ func_rom_bank2_b::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_ram_bank1_e] best 881 combination reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] reg byte a [ func_ram_bank1_e::return#0 ] reg byte a [ func_ram_bank1_e::return#2 ] zp[1]:43 [ func_ram_bank1_e::return#3 ] -Limited combination testing to 100 combinations of 1024 possible. -Uplifting [func_ram_bank1_a] best 845 combination reg byte x [ func_ram_bank1_a::a#3 ] reg byte a [ func_ram_bank1_a::b#3 ] reg byte a [ func_ram_bank1_a::return#0 ] reg byte a [ func_ram_bank1_a::return#2 ] zp[1]:26 [ func_ram_bank1_a::return#3 ] zp[1]:37 [ func_ram_bank1_a::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_rom_bank2_a] best 809 combination reg byte x [ func_rom_bank2_a::a#3 ] reg byte a [ func_rom_bank2_a::b#3 ] reg byte a [ func_rom_bank2_a::return#1 ] reg byte a [ func_rom_bank2_a::return#0 ] zp[1]:27 [ func_rom_bank2_a::return#3 ] zp[1]:47 [ func_rom_bank2_a::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_main_a] best 767 combination reg byte a [ func_main_a::a#3 ] reg byte x [ func_main_a::b#3 ] reg byte a [ func_main_a::return#2 ] reg byte a [ func_main_a::return#0 ] zp[1]:28 [ func_main_a::return#1 ] zp[1]:59 [ func_main_a::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_rom_bank2_e] best 734 combination reg byte a [ func_rom_bank2_e::a#2 ] reg byte x [ func_rom_bank2_e::b#2 ] reg byte a [ func_rom_bank2_e::return#0 ] reg byte a [ func_rom_bank2_e::return#2 ] zp[1]:55 [ func_rom_bank2_e::return#3 ] -Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 710 combination reg byte a [ main::$0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte a [ main::$4 ] zp[1]:46 [ main::$5 ] zp[1]:48 [ main::$6 ] zp[1]:50 [ main::$7 ] zp[1]:52 [ main::$8 ] zp[1]:54 [ main::$9 ] zp[1]:56 [ main::$10 ] zp[1]:58 [ main::$11 ] zp[1]:60 [ main::$12 ] zp[1]:62 [ main::$13 ] -Limited combination testing to 100 combinations of 67108864 possible. -Uplifting [func_ram_bank1_c] best 698 combination reg byte a [ func_ram_bank1_c::return#0 ] reg byte a [ func_ram_bank1_c::return#2 ] -Uplifting [func_ram_bank1_d] best 686 combination reg byte a [ func_ram_bank1_d::return#0 ] reg byte a [ func_ram_bank1_d::return#2 ] -Uplifting [func_ram_bank1_f] best 674 combination reg byte a [ func_ram_bank1_f::return#0 ] reg byte a [ func_ram_bank1_f::return#2 ] -Uplifting [func_rom_bank2_c] best 662 combination reg byte a [ func_rom_bank2_c::return#0 ] reg byte a [ func_rom_bank2_c::return#2 ] -Uplifting [func_rom_bank2_d] best 650 combination reg byte a [ func_rom_bank2_d::return#0 ] reg byte a [ func_rom_bank2_d::return#2 ] -Uplifting [func_rom_bank2_f] best 638 combination reg byte a [ func_rom_bank2_f::return#0 ] reg byte a [ func_rom_bank2_f::return#2 ] -Uplifting [func_main_b] best 626 combination reg byte a [ func_main_b::return#0 ] reg byte a [ func_main_b::return#2 ] -Uplifting [func_ram_bank1_b] best 626 combination -Uplifting [] best 626 combination -Attempting to uplift remaining variables inzp[1]:9 [ func_rom_bank2_b::return#3 ] -Uplifting [func_rom_bank2_b] best 620 combination reg byte a [ func_rom_bank2_b::return#3 ] -Attempting to uplift remaining variables inzp[1]:26 [ func_ram_bank1_a::return#3 ] -Uplifting [func_ram_bank1_a] best 614 combination reg byte a [ func_ram_bank1_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:27 [ func_rom_bank2_a::return#3 ] -Uplifting [func_rom_bank2_a] best 608 combination reg byte a [ func_rom_bank2_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:28 [ func_main_a::return#1 ] -Uplifting [func_main_a] best 602 combination reg byte a [ func_main_a::return#1 ] -Attempting to uplift remaining variables inzp[1]:37 [ func_ram_bank1_a::return#4 ] -Uplifting [func_ram_bank1_a] best 596 combination reg byte a [ func_ram_bank1_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:43 [ func_ram_bank1_e::return#3 ] -Uplifting [func_ram_bank1_e] best 590 combination reg byte a [ func_ram_bank1_e::return#3 ] -Attempting to uplift remaining variables inzp[1]:46 [ main::$5 ] -Uplifting [main] best 584 combination reg byte a [ main::$5 ] -Attempting to uplift remaining variables inzp[1]:47 [ func_rom_bank2_a::return#4 ] -Uplifting [func_rom_bank2_a] best 578 combination reg byte a [ func_rom_bank2_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:48 [ main::$6 ] -Uplifting [main] best 572 combination reg byte a [ main::$6 ] -Attempting to uplift remaining variables inzp[1]:49 [ func_rom_bank2_b::return#4 ] -Uplifting [func_rom_bank2_b] best 566 combination reg byte a [ func_rom_bank2_b::return#4 ] -Attempting to uplift remaining variables inzp[1]:50 [ main::$7 ] -Uplifting [main] best 560 combination reg byte a [ main::$7 ] -Attempting to uplift remaining variables inzp[1]:52 [ main::$8 ] -Uplifting [main] best 554 combination reg byte a [ main::$8 ] -Attempting to uplift remaining variables inzp[1]:54 [ main::$9 ] -Uplifting [main] best 548 combination reg byte a [ main::$9 ] -Attempting to uplift remaining variables inzp[1]:55 [ func_rom_bank2_e::return#3 ] -Uplifting [func_rom_bank2_e] best 542 combination reg byte a [ func_rom_bank2_e::return#3 ] -Attempting to uplift remaining variables inzp[1]:56 [ main::$10 ] -Uplifting [main] best 536 combination reg byte a [ main::$10 ] -Attempting to uplift remaining variables inzp[1]:58 [ main::$11 ] -Uplifting [main] best 530 combination reg byte a [ main::$11 ] -Attempting to uplift remaining variables inzp[1]:59 [ func_main_a::return#4 ] -Uplifting [func_main_a] best 524 combination reg byte a [ func_main_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:60 [ main::$12 ] -Uplifting [main] best 518 combination reg byte a [ main::$12 ] -Attempting to uplift remaining variables inzp[1]:62 [ main::$13 ] -Uplifting [main] best 512 combination reg byte a [ main::$13 ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// The linker specification of the different segments. - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - - - // Global Constants & labels - // The target computer platform is the Commander X16, - // which implements banking in ram between 0xA0000 and 0xBFFF, - // and in rom between 0xC000 and 0xFFFF. - .label SCREEN = $400 -.segment Code - // main -// Practically this means that the main() function is placed in main memory ... -main: { - // [1] call func_ram_bank1_a - // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] - func_ram_bank1_a_from_main: - // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #7 - // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #'0' - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - jmp __b1 - // main::@1 - __b1: - // [3] main::$0 = func_ram_bank1_a::return#4 - // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // [5] call func_ram_bank1_b - // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] - func_ram_bank1_b_from___b1: - jsr func_ram_bank1_b - jmp __b2 - // main::@2 - __b2: - // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 - // Banked call to ram in bank 1 from main memory. - lda #func_ram_bank1_b.return - sta SCREEN - // [7] call func_ram_bank1_c - // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize - func_ram_bank1_c_from___b2: - jsr $ff6e - .byte func_ram_bank1_c - .byte 1 - // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - jmp __b3 - // main::@3 - __b3: - // [9] main::$2 = func_ram_bank1_c::return#2 - // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [11] call func_ram_bank1_d - // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize - func_ram_bank1_d_from___b3: - jsr $ff6e - .byte func_ram_bank1_d - .byte 1 - // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - jmp __b4 - // main::@4 - __b4: - // [13] main::$3 = func_ram_bank1_d::return#2 - // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [15] call func_ram_bank1_e - // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] - func_ram_bank1_e_from___b4: - // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 - ldx #7 - // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - lda #'0' - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - jmp __b5 - // main::@5 - __b5: - // [17] main::$4 = func_ram_bank1_e::return#3 - // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [19] call func_ram_bank1_f - // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize - func_ram_bank1_f_from___b5: - jsr $ff6e - .byte func_ram_bank1_f - .byte 1 - // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - jmp __b6 - // main::@6 - __b6: - // [21] main::$5 = func_ram_bank1_f::return#2 - // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [23] call func_rom_bank2_a - // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] - func_rom_bank2_a_from___b6: - // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #7 - // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #'0' - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - jmp __b7 - // main::@7 - __b7: - // [25] main::$6 = func_rom_bank2_a::return#4 - // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [27] call func_rom_bank2_b - // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] - func_rom_bank2_b_from___b7: - // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 - ldx #7 - // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_rom_bank2_b - // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - jmp __b8 - // main::@8 - __b8: - // [29] main::$7 = func_rom_bank2_b::return#4 - // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [31] call func_rom_bank2_c - // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize - func_rom_bank2_c_from___b8: - jsr $ff6e - .byte func_rom_bank2_c - .byte 2 - // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - jmp __b9 - // main::@9 - __b9: - // [33] main::$8 = func_rom_bank2_c::return#2 - // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [35] call func_rom_bank2_d - // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize - func_rom_bank2_d_from___b9: - jsr $ff6e - .byte func_rom_bank2_d - .byte 2 - // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - jmp __b10 - // main::@10 - __b10: - // [37] main::$9 = func_rom_bank2_d::return#2 - // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [39] call func_rom_bank2_e - // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] - func_rom_bank2_e_from___b10: - // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #7 - // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #'0' - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - jmp __b11 - // main::@11 - __b11: - // [41] main::$10 = func_rom_bank2_e::return#3 - // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [43] call func_rom_bank2_f - // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize - func_rom_bank2_f_from___b11: - jsr $ff6e - .byte func_rom_bank2_f - .byte 2 - // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - jmp __b12 - // main::@12 - __b12: - // [45] main::$11 = func_rom_bank2_f::return#2 - // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // [47] call func_main_a - // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] - func_main_a_from___b12: - // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 - ldx #7 - // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_main_a - // [48] func_main_a::return#4 = func_main_a::return#2 - jmp __b13 - // main::@13 - __b13: - // [49] main::$12 = func_main_a::return#4 - // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // [51] call func_main_b - // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] - func_main_b_from___b13: - jsr func_main_b - // [52] func_main_b::return#2 = func_main_b::return#0 - jmp __b14 - // main::@14 - __b14: - // [53] main::$13 = func_main_b::return#2 - // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa - // Near call in main memory from main memory. - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [55] return - rts -} -.segment Bank1 - // func_ram_bank1_a -// Functional code -// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) -func_ram_bank1_a: { - // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_ram_bank1_a::@return - __breturn: - // [58] return - rts -} -.segment Bank2 - // func_ram_bank1_b -// The sequent functions will consider no banking calculations anymore. -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -// char func_ram_bank1_b(char a, char b) -func_ram_bank1_b: { - .const a = '0' - .const b = 7 - .label return = a+b - jmp __breturn - // func_ram_bank1_b::@return - __breturn: - // [60] return - rts -} -.segment Bank1 - // func_ram_bank1_c -// __register(A) char func_ram_bank1_c(char a, char b) -func_ram_bank1_c: { - .const a = '0' - .const b = 7 - // [62] call func_ram_bank1_a - // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] - func_ram_bank1_a_from_func_ram_bank1_c: - // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_ram_bank1_a - // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - jmp __b1 - // func_ram_bank1_c::@1 - __b1: - // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - jmp __breturn - // func_ram_bank1_c::@return - __breturn: - // [65] return - rts -} - // func_ram_bank1_d -// __register(A) char func_ram_bank1_d(char a, char b) -func_ram_bank1_d: { - .const a = '0' - .const b = 7 - // [67] call func_rom_bank2_a - // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] - func_rom_bank2_a_from_func_ram_bank1_d: - // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #a - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - jmp __b1 - // func_ram_bank1_d::@1 - __b1: - // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - jmp __breturn - // func_ram_bank1_d::@return - __breturn: - // [70] return - rts -} - // func_ram_bank1_e -// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) -func_ram_bank1_e: { - // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - // [74] call func_rom_bank2_b - // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] - func_rom_bank2_b_from_func_ram_bank1_e: - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - jmp __b1 - // func_ram_bank1_e::@1 - __b1: - // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - jmp __breturn - // func_ram_bank1_e::@return - __breturn: - // [77] return - rts -} - // func_ram_bank1_f -// __register(A) char func_ram_bank1_f(char a, char b) -func_ram_bank1_f: { - .const a = '0' - .const b = 7 - // [79] call func_main_a - // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] - func_main_a_from_func_ram_bank1_f: - // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // [80] func_main_a::return#0 = func_main_a::return#2 - jmp __b1 - // func_ram_bank1_f::@1 - __b1: - // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - jmp __breturn - // func_ram_bank1_f::@return - __breturn: - // [82] return - rts -} -.segment Bank2 - // func_rom_bank2_a -// The sequent functions will be banked using call method rom in bank number 2. -// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) -func_rom_bank2_a: { - // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_rom_bank2_a::@return - __breturn: - // [85] return - rts -} - // func_rom_bank2_b -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) -func_rom_bank2_b: { - // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_rom_bank2_b::@return - __breturn: - // [88] return - rts -} - // func_rom_bank2_c -// __register(A) char func_rom_bank2_c(char a, char b) -func_rom_bank2_c: { - .const a = '0' - .const b = 7 - // [90] call func_ram_bank1_a - // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] - func_ram_bank1_a_from_func_rom_bank2_c: - // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - jmp __b1 - // func_rom_bank2_c::@1 - __b1: - // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - jmp __breturn - // func_rom_bank2_c::@return - __breturn: - // [93] return - rts -} - // func_rom_bank2_d -// __register(A) char func_rom_bank2_d(char a, char b) -func_rom_bank2_d: { - .const a = '0' - .const b = 7 - // [95] call func_rom_bank2_a - // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] - func_rom_bank2_a_from_func_rom_bank2_d: - // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_rom_bank2_a - // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - jmp __b1 - // func_rom_bank2_d::@1 - __b1: - // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - jmp __breturn - // func_rom_bank2_d::@return - __breturn: - // [98] return - rts -} - // func_rom_bank2_e -// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) -func_rom_bank2_e: { - // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - // [102] call func_rom_bank2_b - // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] - func_rom_bank2_b_from_func_rom_bank2_e: - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - jmp __b1 - // func_rom_bank2_e::@1 - __b1: - // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - jmp __breturn - // func_rom_bank2_e::@return - __breturn: - // [105] return - rts -} - // func_rom_bank2_f -// __register(A) char func_rom_bank2_f(char a, char b) -func_rom_bank2_f: { - .const a = '0' - .const b = 7 - // [107] call func_main_a - // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] - func_main_a_from_func_rom_bank2_f: - // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // [108] func_main_a::return#1 = func_main_a::return#2 - jmp __b1 - // func_rom_bank2_f::@1 - __b1: - // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - jmp __breturn - // func_rom_bank2_f::@return - __breturn: - // [110] return - rts -} -.segment Code - // func_main_a -// The sequent functions will be addressed in the default main memory location (segment Code). -// Allocated in main memory. -// __register(A) char func_main_a(__register(A) char a, __register(X) char b) -func_main_a: { - // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - // [114] call func_ram_bank1_e - // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] - func_ram_bank1_e_from_func_main_a: - // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy - // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - jmp __b1 - // func_main_a::@1 - __b1: - // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - jmp __breturn - // func_main_a::@return - __breturn: - // [117] return - rts -} - // func_main_b -// Allocated in main memory. -// __register(A) char func_main_b(char a, char b) -func_main_b: { - .const a = '0' - .const b = 7 - // [119] call func_rom_bank2_e - // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] - func_rom_bank2_e_from_func_main_b: - // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #b - // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #a - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - jmp __b1 - // func_main_b::@1 - __b1: - // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - jmp __breturn - // func_main_b::@return - __breturn: - // [122] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b10 -Removing instruction jmp __b11 -Removing instruction jmp __b12 -Removing instruction jmp __b13 -Removing instruction jmp __b14 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction func_ram_bank1_a_from_main: -Removing instruction __b1: -Removing instruction func_ram_bank1_b_from___b1: -Removing instruction __b2: -Removing instruction func_ram_bank1_c_from___b2: -Removing instruction __b3: -Removing instruction func_ram_bank1_d_from___b3: -Removing instruction __b4: -Removing instruction func_ram_bank1_e_from___b4: -Removing instruction __b5: -Removing instruction func_ram_bank1_f_from___b5: -Removing instruction __b6: -Removing instruction func_rom_bank2_a_from___b6: -Removing instruction __b7: -Removing instruction func_rom_bank2_b_from___b7: -Removing instruction __b8: -Removing instruction func_rom_bank2_c_from___b8: -Removing instruction __b9: -Removing instruction func_rom_bank2_d_from___b9: -Removing instruction __b10: -Removing instruction func_rom_bank2_e_from___b10: -Removing instruction __b11: -Removing instruction func_rom_bank2_f_from___b11: -Removing instruction __b12: -Removing instruction func_main_a_from___b12: -Removing instruction __b13: -Removing instruction func_main_b_from___b13: -Removing instruction __b14: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction func_ram_bank1_a_from_func_ram_bank1_c: -Removing instruction __b1: -Removing instruction func_rom_bank2_a_from_func_ram_bank1_d: -Removing instruction __b1: -Removing instruction func_rom_bank2_b_from_func_ram_bank1_e: -Removing instruction __b1: -Removing instruction func_main_a_from_func_ram_bank1_f: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction func_ram_bank1_a_from_func_rom_bank2_c: -Removing instruction __b1: -Removing instruction func_rom_bank2_a_from_func_rom_bank2_d: -Removing instruction __b1: -Removing instruction func_rom_bank2_b_from_func_rom_bank2_e: -Removing instruction __b1: -Removing instruction func_main_a_from_func_rom_bank2_f: -Removing instruction __b1: -Removing instruction func_ram_bank1_e_from_func_main_a: -Removing instruction __b1: -Removing instruction func_rom_bank2_e_from_func_main_b: -Removing instruction __b1: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -char func_main_a(char a , char b) -char func_main_a::a -char func_main_a::a#3 // reg byte a 101.0 -char func_main_a::b -char func_main_a::b#3 // reg byte x 50.5 -char func_main_a::return -char func_main_a::return#0 // reg byte a 22.0 -char func_main_a::return#1 // reg byte a 22.0 -char func_main_a::return#2 // reg byte a 25.0 -char func_main_a::return#4 // reg byte a 4.0 -char func_main_b(char a , char b) -char func_main_b::a -__constant char func_main_b::a#0 = '0' // a -char func_main_b::b -__constant char func_main_b::b#0 = 7 // b -char func_main_b::return -char func_main_b::return#0 // reg byte a 4.333333333333333 -char func_main_b::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::a -char func_ram_bank1_a::a#3 // reg byte x 101.0 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#3 // reg byte a 101.0 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 -char func_ram_bank1_a::return#2 // reg byte a 22.0 -char func_ram_bank1_a::return#3 // reg byte a 22.0 -char func_ram_bank1_a::return#4 // reg byte a 4.0 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::a -__constant char func_ram_bank1_b::a#0 = '0' // a -char func_ram_bank1_b::b -__constant char func_ram_bank1_b::b#0 = 7 // b -char func_ram_bank1_b::return -__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::a -__constant char func_ram_bank1_c::a#0 = '0' // a -char func_ram_bank1_c::b -__constant char func_ram_bank1_c::b#0 = 7 // b -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::a -__constant char func_ram_bank1_d::a#0 = '0' // a -char func_ram_bank1_d::b -__constant char func_ram_bank1_d::b#0 = 7 // b -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_d::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 // reg byte a 101.0 -char func_ram_bank1_e::a#2 // reg byte a 1102.0 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 // reg byte x 202.0 -char func_ram_bank1_e::b#2 // reg byte x 551.0 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 // reg byte a 276.0 -char func_ram_bank1_e::return#2 // reg byte a 202.0 -char func_ram_bank1_e::return#3 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::a -__constant char func_ram_bank1_f::a#0 = '0' // a -char func_ram_bank1_f::b -__constant char func_ram_bank1_f::b#0 = 7 // b -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::a -char func_rom_bank2_a::a#3 // reg byte x 101.0 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#3 // reg byte a 101.0 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 // reg byte a 22.0 -char func_rom_bank2_a::return#1 // reg byte a 25.0 -char func_rom_bank2_a::return#3 // reg byte a 22.0 -char func_rom_bank2_a::return#4 // reg byte a 4.0 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 // reg byte a 1001.0 -char func_rom_bank2_b::a#1 // reg byte a 101.0 -char func_rom_bank2_b::a#3 // reg byte a 11103.0 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 // reg byte x 2002.0 -char func_rom_bank2_b::b#1 // reg byte x 202.0 -char func_rom_bank2_b::b#3 // reg byte x 11103.0 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 // reg byte a 2002.0 -char func_rom_bank2_b::return#1 // reg byte a 2221.0 -char func_rom_bank2_b::return#3 // reg byte a 202.0 -char func_rom_bank2_b::return#4 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::a -__constant char func_rom_bank2_c::a#0 = '0' // a -char func_rom_bank2_c::b -__constant char func_rom_bank2_c::b#0 = 7 // b -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::a -__constant char func_rom_bank2_d::a#0 = '0' // a -char func_rom_bank2_d::b -__constant char func_rom_bank2_d::b#0 = 7 // b -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::a -char func_rom_bank2_e::a#2 // reg byte a 101.0 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#2 // reg byte x 50.5 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 // reg byte a 28.5 -char func_rom_bank2_e::return#2 // reg byte a 22.0 -char func_rom_bank2_e::return#3 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::a -__constant char func_rom_bank2_f::a#0 = '0' // a -char func_rom_bank2_f::b -__constant char func_rom_bank2_f::b#0 = 7 // b -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_f::return#2 // reg byte a 4.0 -void main() -char main::$0 // reg byte a 4.0 -char main::$10 // reg byte a 4.0 -char main::$11 // reg byte a 4.0 -char main::$12 // reg byte a 4.0 -char main::$13 // reg byte a 4.0 -char main::$2 // reg byte a 4.0 -char main::$3 // reg byte a 4.0 -char main::$4 // reg byte a 4.0 -char main::$5 // reg byte a 4.0 -char main::$6 // reg byte a 4.0 -char main::$7 // reg byte a 4.0 -char main::$8 // reg byte a 4.0 -char main::$9 // reg byte a 4.0 - -reg byte x [ func_ram_bank1_a::a#3 ] -reg byte a [ func_ram_bank1_a::b#3 ] -reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -reg byte x [ func_rom_bank2_a::a#3 ] -reg byte a [ func_rom_bank2_a::b#3 ] -reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -reg byte a [ func_rom_bank2_e::a#2 ] -reg byte x [ func_rom_bank2_e::b#2 ] -reg byte a [ func_main_a::a#3 ] -reg byte x [ func_main_a::b#3 ] -reg byte a [ func_ram_bank1_a::return#4 ] -reg byte a [ main::$0 ] -reg byte a [ func_ram_bank1_c::return#2 ] -reg byte a [ main::$2 ] -reg byte a [ func_ram_bank1_d::return#2 ] -reg byte a [ main::$3 ] -reg byte a [ func_ram_bank1_e::return#3 ] -reg byte a [ main::$4 ] -reg byte a [ func_ram_bank1_f::return#2 ] -reg byte a [ main::$5 ] -reg byte a [ func_rom_bank2_a::return#4 ] -reg byte a [ main::$6 ] -reg byte a [ func_rom_bank2_b::return#4 ] -reg byte a [ main::$7 ] -reg byte a [ func_rom_bank2_c::return#2 ] -reg byte a [ main::$8 ] -reg byte a [ func_rom_bank2_d::return#2 ] -reg byte a [ main::$9 ] -reg byte a [ func_rom_bank2_e::return#3 ] -reg byte a [ main::$10 ] -reg byte a [ func_rom_bank2_f::return#2 ] -reg byte a [ main::$11 ] -reg byte a [ func_main_a::return#4 ] -reg byte a [ main::$12 ] -reg byte a [ func_main_b::return#2 ] -reg byte a [ main::$13 ] -reg byte a [ func_ram_bank1_a::return#0 ] -reg byte a [ func_ram_bank1_a::return#2 ] -reg byte a [ func_ram_bank1_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#0 ] -reg byte a [ func_ram_bank1_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#0 ] -reg byte a [ func_ram_bank1_e::return#0 ] -reg byte a [ func_main_a::return#0 ] -reg byte a [ func_ram_bank1_f::return#0 ] -reg byte a [ func_rom_bank2_a::return#1 ] -reg byte a [ func_rom_bank2_b::return#1 ] -reg byte a [ func_ram_bank1_a::return#3 ] -reg byte a [ func_rom_bank2_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#3 ] -reg byte a [ func_rom_bank2_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#3 ] -reg byte a [ func_rom_bank2_e::return#0 ] -reg byte a [ func_main_a::return#1 ] -reg byte a [ func_rom_bank2_f::return#0 ] -reg byte a [ func_ram_bank1_e::return#2 ] -reg byte a [ func_main_a::return#2 ] -reg byte a [ func_rom_bank2_e::return#2 ] -reg byte a [ func_main_b::return#0 ] - - -FINAL ASSEMBLER -Score: 368 - - // File Comments -// The linker specification of the different segments. - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - - - // Global Constants & labels - // The target computer platform is the Commander X16, - // which implements banking in ram between 0xA0000 and 0xBFFF, - // and in rom between 0xC000 and 0xFFFF. - .label SCREEN = $400 -.segment Code - // main -// Practically this means that the main() function is placed in main memory ... -main: { - // func_ram_bank1_a('0', 7) - // [1] call func_ram_bank1_a - // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] - // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #7 - // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #'0' - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a('0', 7) - // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - // main::@1 - // [3] main::$0 = func_ram_bank1_a::return#4 - // SCREEN[0] = func_ram_bank1_a('0', 7) - // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // func_ram_bank1_b('0', 7) - // [5] call func_ram_bank1_b - // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] - jsr func_ram_bank1_b - // main::@2 - // SCREEN[0] = func_ram_bank1_b('0', 7) - // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 - // Banked call to ram in bank 1 from main memory. - lda #func_ram_bank1_b.return - sta SCREEN - // func_ram_bank1_c('0', 7) - // [7] call func_ram_bank1_c - // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_c - .byte 1 - // func_ram_bank1_c('0', 7) - // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - // main::@3 - // [9] main::$2 = func_ram_bank1_c::return#2 - // SCREEN[0] = func_ram_bank1_c('0', 7) - // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_d('0', 7) - // [11] call func_ram_bank1_d - // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_d - .byte 1 - // func_ram_bank1_d('0', 7) - // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - // main::@4 - // [13] main::$3 = func_ram_bank1_d::return#2 - // SCREEN[0] = func_ram_bank1_d('0', 7) - // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_e('0', 7) - // [15] call func_ram_bank1_e - // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] - // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 - ldx #7 - // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - lda #'0' - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e('0', 7) - // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - // main::@5 - // [17] main::$4 = func_ram_bank1_e::return#3 - // SCREEN[0] = func_ram_bank1_e('0', 7) - // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_f('0', 7) - // [19] call func_ram_bank1_f - // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_f - .byte 1 - // func_ram_bank1_f('0', 7) - // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - // main::@6 - // [21] main::$5 = func_ram_bank1_f::return#2 - // SCREEN[0] = func_ram_bank1_f('0', 7) - // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_a('0', 7) - // [23] call func_rom_bank2_a - // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] - // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #7 - // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #'0' - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a('0', 7) - // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - // main::@7 - // [25] main::$6 = func_rom_bank2_a::return#4 - // SCREEN[0] = func_rom_bank2_a('0', 7) - // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_b('0', 7) - // [27] call func_rom_bank2_b - // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] - // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 - ldx #7 - // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_rom_bank2_b - // func_rom_bank2_b('0', 7) - // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - // main::@8 - // [29] main::$7 = func_rom_bank2_b::return#4 - // SCREEN[0] = func_rom_bank2_b('0', 7) - // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_c('0', 7) - // [31] call func_rom_bank2_c - // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte func_rom_bank2_c - .byte 2 - // func_rom_bank2_c('0', 7) - // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - // main::@9 - // [33] main::$8 = func_rom_bank2_c::return#2 - // SCREEN[0] = func_rom_bank2_c('0', 7) - // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_d('0', 7) - // [35] call func_rom_bank2_d - // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte func_rom_bank2_d - .byte 2 - // func_rom_bank2_d('0', 7) - // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - // main::@10 - // [37] main::$9 = func_rom_bank2_d::return#2 - // SCREEN[0] = func_rom_bank2_d('0', 7) - // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_e('0', 7) - // [39] call func_rom_bank2_e - // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] - // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #7 - // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #'0' - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e('0', 7) - // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - // main::@11 - // [41] main::$10 = func_rom_bank2_e::return#3 - // SCREEN[0] = func_rom_bank2_e('0', 7) - // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_f('0', 7) - // [43] call func_rom_bank2_f - // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte func_rom_bank2_f - .byte 2 - // func_rom_bank2_f('0', 7) - // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - // main::@12 - // [45] main::$11 = func_rom_bank2_f::return#2 - // SCREEN[0] = func_rom_bank2_f('0', 7) - // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_a('0', 7) - // [47] call func_main_a - // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] - // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 - ldx #7 - // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_main_a - // func_main_a('0', 7) - // [48] func_main_a::return#4 = func_main_a::return#2 - // main::@13 - // [49] main::$12 = func_main_a::return#4 - // SCREEN[0] = func_main_a('0', 7) - // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_b('0', 7) - // [51] call func_main_b - // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] - jsr func_main_b - // func_main_b('0', 7) - // [52] func_main_b::return#2 = func_main_b::return#0 - // main::@14 - // [53] main::$13 = func_main_b::return#2 - // SCREEN[0] = func_main_b('0', 7) - // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa - // Near call in main memory from main memory. - sta SCREEN - // main::@return - // } - // [55] return - rts -} -.segment Bank1 - // func_ram_bank1_a -// Functional code -// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) -func_ram_bank1_a: { - // a + b - // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_ram_bank1_a::@return - // } - // [58] return - rts -} -.segment Bank2 - // func_ram_bank1_b -// The sequent functions will consider no banking calculations anymore. -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -// char func_ram_bank1_b(char a, char b) -func_ram_bank1_b: { - .const a = '0' - .const b = 7 - .label return = a+b - // func_ram_bank1_b::@return - // [60] return - rts -} -.segment Bank1 - // func_ram_bank1_c -// __register(A) char func_ram_bank1_c(char a, char b) -func_ram_bank1_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - // [62] call func_ram_bank1_a - // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] - // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_ram_bank1_a - // func_ram_bank1_a(a, b) - // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - // func_ram_bank1_c::@1 - // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - // func_ram_bank1_c::@return - // } - // [65] return - rts -} - // func_ram_bank1_d -// __register(A) char func_ram_bank1_d(char a, char b) -func_ram_bank1_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - // [67] call func_rom_bank2_a - // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] - // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #a - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a(a, b) - // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - // func_ram_bank1_d::@1 - // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - // func_ram_bank1_d::@return - // } - // [70] return - rts -} - // func_ram_bank1_e -// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) -func_ram_bank1_e: { - // func_rom_bank2_b(a, b) - // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - // [74] call func_rom_bank2_b - // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - // func_ram_bank1_e::@1 - // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - // func_ram_bank1_e::@return - // } - // [77] return - rts -} - // func_ram_bank1_f -// __register(A) char func_ram_bank1_f(char a, char b) -func_ram_bank1_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - // [79] call func_main_a - // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] - // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // func_main_a(a, b) - // [80] func_main_a::return#0 = func_main_a::return#2 - // func_ram_bank1_f::@1 - // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - // func_ram_bank1_f::@return - // } - // [82] return - rts -} -.segment Bank2 - // func_rom_bank2_a -// The sequent functions will be banked using call method rom in bank number 2. -// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) -func_rom_bank2_a: { - // a + b - // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_rom_bank2_a::@return - // } - // [85] return - rts -} - // func_rom_bank2_b -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) -func_rom_bank2_b: { - // a + b - // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff - clc - adc.z $ff - // func_rom_bank2_b::@return - // } - // [88] return - rts -} - // func_rom_bank2_c -// __register(A) char func_rom_bank2_c(char a, char b) -func_rom_bank2_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - // [90] call func_ram_bank1_a - // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] - // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a(a, b) - // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - // func_rom_bank2_c::@1 - // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - // func_rom_bank2_c::@return - // } - // [93] return - rts -} - // func_rom_bank2_d -// __register(A) char func_rom_bank2_d(char a, char b) -func_rom_bank2_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - // [95] call func_rom_bank2_a - // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] - // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_rom_bank2_a - // func_rom_bank2_a(a, b) - // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - // func_rom_bank2_d::@1 - // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - // func_rom_bank2_d::@return - // } - // [98] return - rts -} - // func_rom_bank2_e -// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) -func_rom_bank2_e: { - // func_rom_bank2_b(a, b) - // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - // [102] call func_rom_bank2_b - // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - // func_rom_bank2_e::@1 - // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - // func_rom_bank2_e::@return - // } - // [105] return - rts -} - // func_rom_bank2_f -// __register(A) char func_rom_bank2_f(char a, char b) -func_rom_bank2_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - // [107] call func_main_a - // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] - // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // func_main_a(a, b) - // [108] func_main_a::return#1 = func_main_a::return#2 - // func_rom_bank2_f::@1 - // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - // func_rom_bank2_f::@return - // } - // [110] return - rts -} -.segment Code - // func_main_a -// The sequent functions will be addressed in the default main memory location (segment Code). -// Allocated in main memory. -// __register(A) char func_main_a(__register(A) char a, __register(X) char b) -func_main_a: { - // func_ram_bank1_e(a, b) - // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - // [114] call func_ram_bank1_e - // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] - // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy - // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e(a, b) - // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - // func_main_a::@1 - // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - // func_main_a::@return - // } - // [117] return - rts -} - // func_main_b -// Allocated in main memory. -// __register(A) char func_main_b(char a, char b) -func_main_b: { - .const a = '0' - .const b = 7 - // func_rom_bank2_e(a, b) - // [119] call func_rom_bank2_e - // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] - // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #b - // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #a - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e(a, b) - // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - // func_main_b::@1 - // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - // func_main_b::@return - // } - // [122] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.sym b/src/test/ref/procedure-callingconvention-phi-bank-5.sym deleted file mode 100644 index 4b1b61e72..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.sym +++ /dev/null @@ -1,204 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -char func_main_a(char a , char b) -char func_main_a::a -char func_main_a::a#3 // reg byte a 101.0 -char func_main_a::b -char func_main_a::b#3 // reg byte x 50.5 -char func_main_a::return -char func_main_a::return#0 // reg byte a 22.0 -char func_main_a::return#1 // reg byte a 22.0 -char func_main_a::return#2 // reg byte a 25.0 -char func_main_a::return#4 // reg byte a 4.0 -char func_main_b(char a , char b) -char func_main_b::a -__constant char func_main_b::a#0 = '0' // a -char func_main_b::b -__constant char func_main_b::b#0 = 7 // b -char func_main_b::return -char func_main_b::return#0 // reg byte a 4.333333333333333 -char func_main_b::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::a -char func_ram_bank1_a::a#3 // reg byte x 101.0 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#3 // reg byte a 101.0 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 -char func_ram_bank1_a::return#2 // reg byte a 22.0 -char func_ram_bank1_a::return#3 // reg byte a 22.0 -char func_ram_bank1_a::return#4 // reg byte a 4.0 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::a -__constant char func_ram_bank1_b::a#0 = '0' // a -char func_ram_bank1_b::b -__constant char func_ram_bank1_b::b#0 = 7 // b -char func_ram_bank1_b::return -__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::a -__constant char func_ram_bank1_c::a#0 = '0' // a -char func_ram_bank1_c::b -__constant char func_ram_bank1_c::b#0 = 7 // b -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::a -__constant char func_ram_bank1_d::a#0 = '0' // a -char func_ram_bank1_d::b -__constant char func_ram_bank1_d::b#0 = 7 // b -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_d::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 // reg byte a 101.0 -char func_ram_bank1_e::a#2 // reg byte a 1102.0 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 // reg byte x 202.0 -char func_ram_bank1_e::b#2 // reg byte x 551.0 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 // reg byte a 276.0 -char func_ram_bank1_e::return#2 // reg byte a 202.0 -char func_ram_bank1_e::return#3 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::a -__constant char func_ram_bank1_f::a#0 = '0' // a -char func_ram_bank1_f::b -__constant char func_ram_bank1_f::b#0 = 7 // b -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::a -char func_rom_bank2_a::a#3 // reg byte x 101.0 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#3 // reg byte a 101.0 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 // reg byte a 22.0 -char func_rom_bank2_a::return#1 // reg byte a 25.0 -char func_rom_bank2_a::return#3 // reg byte a 22.0 -char func_rom_bank2_a::return#4 // reg byte a 4.0 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 // reg byte a 1001.0 -char func_rom_bank2_b::a#1 // reg byte a 101.0 -char func_rom_bank2_b::a#3 // reg byte a 11103.0 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 // reg byte x 2002.0 -char func_rom_bank2_b::b#1 // reg byte x 202.0 -char func_rom_bank2_b::b#3 // reg byte x 11103.0 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 // reg byte a 2002.0 -char func_rom_bank2_b::return#1 // reg byte a 2221.0 -char func_rom_bank2_b::return#3 // reg byte a 202.0 -char func_rom_bank2_b::return#4 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::a -__constant char func_rom_bank2_c::a#0 = '0' // a -char func_rom_bank2_c::b -__constant char func_rom_bank2_c::b#0 = 7 // b -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::a -__constant char func_rom_bank2_d::a#0 = '0' // a -char func_rom_bank2_d::b -__constant char func_rom_bank2_d::b#0 = 7 // b -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::a -char func_rom_bank2_e::a#2 // reg byte a 101.0 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#2 // reg byte x 50.5 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 // reg byte a 28.5 -char func_rom_bank2_e::return#2 // reg byte a 22.0 -char func_rom_bank2_e::return#3 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::a -__constant char func_rom_bank2_f::a#0 = '0' // a -char func_rom_bank2_f::b -__constant char func_rom_bank2_f::b#0 = 7 // b -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_f::return#2 // reg byte a 4.0 -void main() -char main::$0 // reg byte a 4.0 -char main::$10 // reg byte a 4.0 -char main::$11 // reg byte a 4.0 -char main::$12 // reg byte a 4.0 -char main::$13 // reg byte a 4.0 -char main::$2 // reg byte a 4.0 -char main::$3 // reg byte a 4.0 -char main::$4 // reg byte a 4.0 -char main::$5 // reg byte a 4.0 -char main::$6 // reg byte a 4.0 -char main::$7 // reg byte a 4.0 -char main::$8 // reg byte a 4.0 -char main::$9 // reg byte a 4.0 - -reg byte x [ func_ram_bank1_a::a#3 ] -reg byte a [ func_ram_bank1_a::b#3 ] -reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -reg byte x [ func_rom_bank2_a::a#3 ] -reg byte a [ func_rom_bank2_a::b#3 ] -reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -reg byte a [ func_rom_bank2_e::a#2 ] -reg byte x [ func_rom_bank2_e::b#2 ] -reg byte a [ func_main_a::a#3 ] -reg byte x [ func_main_a::b#3 ] -reg byte a [ func_ram_bank1_a::return#4 ] -reg byte a [ main::$0 ] -reg byte a [ func_ram_bank1_c::return#2 ] -reg byte a [ main::$2 ] -reg byte a [ func_ram_bank1_d::return#2 ] -reg byte a [ main::$3 ] -reg byte a [ func_ram_bank1_e::return#3 ] -reg byte a [ main::$4 ] -reg byte a [ func_ram_bank1_f::return#2 ] -reg byte a [ main::$5 ] -reg byte a [ func_rom_bank2_a::return#4 ] -reg byte a [ main::$6 ] -reg byte a [ func_rom_bank2_b::return#4 ] -reg byte a [ main::$7 ] -reg byte a [ func_rom_bank2_c::return#2 ] -reg byte a [ main::$8 ] -reg byte a [ func_rom_bank2_d::return#2 ] -reg byte a [ main::$9 ] -reg byte a [ func_rom_bank2_e::return#3 ] -reg byte a [ main::$10 ] -reg byte a [ func_rom_bank2_f::return#2 ] -reg byte a [ main::$11 ] -reg byte a [ func_main_a::return#4 ] -reg byte a [ main::$12 ] -reg byte a [ func_main_b::return#2 ] -reg byte a [ main::$13 ] -reg byte a [ func_ram_bank1_a::return#0 ] -reg byte a [ func_ram_bank1_a::return#2 ] -reg byte a [ func_ram_bank1_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#0 ] -reg byte a [ func_ram_bank1_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#0 ] -reg byte a [ func_ram_bank1_e::return#0 ] -reg byte a [ func_main_a::return#0 ] -reg byte a [ func_ram_bank1_f::return#0 ] -reg byte a [ func_rom_bank2_a::return#1 ] -reg byte a [ func_rom_bank2_b::return#1 ] -reg byte a [ func_ram_bank1_a::return#3 ] -reg byte a [ func_rom_bank2_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#3 ] -reg byte a [ func_rom_bank2_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#3 ] -reg byte a [ func_rom_bank2_e::return#0 ] -reg byte a [ func_main_a::return#1 ] -reg byte a [ func_rom_bank2_f::return#0 ] -reg byte a [ func_ram_bank1_e::return#2 ] -reg byte a [ func_main_a::return#2 ] -reg byte a [ func_rom_bank2_e::return#2 ] -reg byte a [ func_main_b::return#0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.asm b/src/test/ref/procedure-callingconvention-stack-bank-0.asm deleted file mode 100644 index ec687e5fb..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - jsr plus - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.cfg b/src/test/ref/procedure-callingconvention-stack-bank-0.cfg deleted file mode 100644 index e23f2647e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.log b/src/test/ref/procedure-callingconvention-stack-bank-0.log deleted file mode 100644 index de9b614ed..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.log +++ /dev/null @@ -1,350 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Uplifting [main] best 73 combination reg byte a [ main::$0 ] -Uplifting [] best 73 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 67 - - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.sym b/src/test/ref/procedure-callingconvention-stack-bank-0.sym deleted file mode 100644 index 30874c0fd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.asm b/src/test/ref/procedure-callingconvention-stack-bank-1.asm deleted file mode 100644 index ec687e5fb..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - jsr plus - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.cfg b/src/test/ref/procedure-callingconvention-stack-bank-1.cfg deleted file mode 100644 index e23f2647e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.log b/src/test/ref/procedure-callingconvention-stack-bank-1.log deleted file mode 100644 index de9b614ed..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.log +++ /dev/null @@ -1,350 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Uplifting [main] best 73 combination reg byte a [ main::$0 ] -Uplifting [] best 73 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 67 - - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.sym b/src/test/ref/procedure-callingconvention-stack-bank-1.sym deleted file mode 100644 index 30874c0fd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.asm b/src/test/ref/procedure-callingconvention-stack-bank-2.asm deleted file mode 100644 index 10a9f97c1..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.asm +++ /dev/null @@ -1,74 +0,0 @@ -// Test a procedure with calling convention stack -// A slightly more complex call -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code -__start: { - // char i = 0 - lda #0 - sta.z i - jsr main - rts -} -.segment stage -// this should give a pragma error during compile, as test is not declared yet. -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - inc.z i - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - .label a = 3 - lda #0 - sta.z a - __b1: - // char v = a+1 - ldx.z a - inx - // char w = plus('0', v) - lda #'0' - pha - txa - pha - jsr plus - pla - pla - // w+a - clc - adc.z a - // SCREEN[i] = w+a - ldy.z i - sta SCREEN,y - // for(char a:0..1) - inc.z a - lda #2 - cmp.z a - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.cfg b/src/test/ref/procedure-callingconvention-stack-bank-2.cfg deleted file mode 100644 index ff4b58982..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.cfg +++ /dev/null @@ -1,48 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.log b/src/test/ref/procedure-callingconvention-stack-bank-2.log deleted file mode 100644 index 4a6f3d67b..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.log +++ /dev/null @@ -1,595 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Converting variable modified inside __stackcall procedure plus() to load/store i -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Inlined call call __init -Eliminating unused variable with no statement main::$0 -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::w = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = main::v - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start::@1 - main::a#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) - main::v#0 = main::a#2 + 1 - stackpush(char) = '0' - stackpush(char) = main::v#0 - callexecute plus - sideeffect stackpullpadding(1) - main::w#0 = stackpull(char) - main::$2 = main::w#0 + main::a#2 - SCREEN[i] = main::$2 - main::a#1 = main::a#2 + rangenext(0,1) - main::$3 = main::a#1 != rangelast(0,1) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - i = ++ i - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - call main - to:__start::@2 -__start::@2: scope:[__start] from __start::@1 - to:__start::@return -__start::@return: scope:[__start] from __start::@2 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i -void main() -char main::$2 -bool main::$3 -char main::a -char main::a#0 -char main::a#1 -char main::a#2 -char main::v -char main::v#0 -char main::w -char main::w#0 -__stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::a#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ -Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 -Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::a#0 -Constant inlined main::a#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of __start::@2 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to plus:17 - -Created 1 initial phi equivalence classes -Coalesced [25] main::a#3 = main::a#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label __start::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus - -VARIABLE REGISTER WEIGHTS -void __start() -__loadstore char i // 105.24999999999999 -void main() -char main::$2 // 202.0 -char main::a -char main::a#1 // 151.5 -char main::a#2 // 44.888888888888886 -char main::v -char main::v#0 // 101.0 -char main::w -char main::w#0 // 202.0 -__stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 667.3333333333334 -char plus::b -char plus::b#0 // 1001.0 -char plus::return -char plus::return#0 // 2002.0 - -Initial phi equivalence classes -[ main::a#2 main::a#1 ] -Added variable i to live range equivalence class [ i ] -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::v#0 to live range equivalence class [ main::v#0 ] -Added variable main::w#0 to live range equivalence class [ main::w#0 ] -Added variable main::$2 to live range equivalence class [ main::$2 ] -Complete equivalence classes -[ main::a#2 main::a#1 ] -[ i ] -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::v#0 ] -[ main::w#0 ] -[ main::$2 ] -Allocated zp[1]:2 [ plus::return#0 ] -Allocated zp[1]:3 [ plus::b#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::w#0 ] -Allocated zp[1]:6 [ main::$2 ] -Allocated zp[1]:7 [ main::a#2 main::a#1 ] -Allocated zp[1]:8 [ i ] -Allocated zp[1]:9 [ main::v#0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , -Potential registers zp[1]:8 [ i ] : zp[1]:8 , -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] -Uplift Scope [] 105.25: zp[1]:8 [ i ] -Uplift Scope [__start] - -Uplifting [plus] best 945 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] -Uplifting [main] best 785 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] -Uplifting [] best 785 combination zp[1]:8 [ i ] -Uplifting [__start] best 785 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Uplifting [plus] best 785 combination zp[1]:4 [ plus::a#0 ] -Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] -Uplifting [main] best 785 combination zp[1]:7 [ main::a#2 main::a#1 ] -Attempting to uplift remaining variables inzp[1]:8 [ i ] -Uplifting [] best 785 combination zp[1]:8 [ i ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] -Allocated (was zp[1]:8) zp[1]:4 [ i ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} -.segment stage - // plus -// this should give a pragma error during compile, as test is not declared yet. -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - jmp __b1 - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [23] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction main_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] - - -FINAL ASSEMBLER -Score: 656 - - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char i = 0 - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [4] return - rts -} -.segment stage - // plus -// this should give a pragma error during compile, as test is not declared yet. -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // return a+b; - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // char v = a+1 - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // char w = plus('0', v) - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // w+a - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // SCREEN[i] = w+a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // for(char a:0..1) - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1 - // main::@return - // } - // [23] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.sym b/src/test/ref/procedure-callingconvention-stack-bank-2.sym deleted file mode 100644 index 0e71cf52f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.sym +++ /dev/null @@ -1,32 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.asm b/src/test/ref/procedure-callingconvention-stack-bank-3.asm deleted file mode 100644 index b16c0e558..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.asm +++ /dev/null @@ -1,77 +0,0 @@ -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .label SCREEN = $400 - .label val = 2 -.segment Code -__start: { - // char val = 0 - lda #0 - sta.z val - jsr main - rts -} -printother: { - ldx #0 - __b1: - // (SCREEN+40)[i]++; - inc SCREEN+$28,x - // for(char i:0..5) - inx - cpx #6 - bne __b1 - // } - rts -} -.segment platform -incval: { - // val++; - inc.z val - // } - rts -} -.segment stage -printval: { - // SCREEN[0] = val - lda.z val - sta SCREEN - // } - rts -} -.segment platform -ival: { - // incval() - jsr incval - // } - rts -} -.segment stage -pval: { - // printval() - jsr printval - // } - rts -} -main: { - ldy #0 - __b1: - // pval() - jsr pval - // printother() - jsr printother - // ival() - jsr ival - // for(char i:0..5) - iny - cpy #6 - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.cfg b/src/test/ref/procedure-callingconvention-stack-bank-3.cfg deleted file mode 100644 index 01f3d9e0f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.cfg +++ /dev/null @@ -1,79 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.log b/src/test/ref/procedure-callingconvention-stack-bank-3.log deleted file mode 100644 index 3037f5b3b..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.log +++ /dev/null @@ -1,650 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Converting variable modified inside __stackcall procedure main() to load/store val -Inlined call call __init -Calling convention __stackcall adding prepare/execute/finalize for call pval -Calling convention __stackcall adding prepare/execute/finalize for call printother -Calling convention __stackcall adding prepare/execute/finalize for call ival -Calling convention __stackcall adding prepare/execute/finalize for call printval -Calling convention __stackcall adding prepare/execute/finalize for call incval -Calling convention __stackcall adding prepare/execute/finalize for call main - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) - callexecute pval - callexecute printother - callexecute ival - main::i#1 = main::i#2 + rangenext(0,5) - main::$3 = main::i#1 != rangelast(0,5) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__stackcall void pval() -pval: scope:[pval] from - callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - return - to:@return - -__stackcall void ival() -ival: scope:[ival] from - callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - return - to:@return - -__stackcall void printval() -printval: scope:[printval] from - SCREEN[0] = val - to:printval::@return -printval::@return: scope:[printval] from printval - return - to:@return - -__stackcall void incval() -incval: scope:[incval] from - val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - return - to:@return - -__stackcall void printother() -printother: scope:[printother] from - printother::i#0 = 0 - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) - (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - printother::i#1 = printother::i#2 + rangenext(0,5) - printother::$1 = printother::i#1 != rangelast(0,5) - if(printother::$1) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -bool main::$3 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -__stackcall void printother() -bool printother::$1 -char printother::i -char printother::i#0 -char printother::i#1 -char printother::i#2 -__stackcall void printval() -__stackcall void pval() -__loadstore char val - -Adding number conversion cast (unumber) 0 in SCREEN[0] = val -Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 -Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Constant printother::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ -Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 -Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ -Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 -Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val -Successful SSA optimization PassNSimplifyExpressionWithZero -Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 -Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 6 -Simplifying constant integer cast 6 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 6 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::i#0 -Inlining constant with var siblings printother::i#0 -Constant inlined main::i#0 = 0 -Constant inlined printother::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [ival] to incval:17 -Calls in [pval] to printval:20 -Calls in [main] to pval:24 printother:25 ival:26 - -Created 2 initial phi equivalence classes -Coalesced [11] printother::i#3 = printother::i#1 -Coalesced [30] main::i#3 = main::i#1 -Coalesced down to 2 phi equivalence classes -Culled Empty Block label printother::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval - -VARIABLE REGISTER WEIGHTS -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // 151.5 -char main::i#2 // 50.5 -__stackcall void printother() -char printother::i -char printother::i#1 // 15001.5 -char printother::i#2 // 20002.0 -__stackcall void printval() -__stackcall void pval() -__loadstore char val // 1579.2105263157896 - -Initial phi equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -Added variable val to live range equivalence class [ val ] -Complete equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -[ val ] -Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] -Allocated zp[1]:3 [ val ] -Allocated zp[1]:4 [ main::i#2 main::i#1 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ val ] : zp[1]:3 , - -REGISTER UPLIFT SCOPES -Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] -Uplift Scope [] 1,579.21: zp[1]:3 [ val ] -Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] -Uplift Scope [pval] -Uplift Scope [ival] -Uplift Scope [printval] -Uplift Scope [incval] -Uplift Scope [__start] - -Uplifting [printother] best 815 combination reg byte x [ printother::i#2 printother::i#1 ] -Uplifting [] best 815 combination zp[1]:3 [ val ] -Uplifting [main] best 725 combination reg byte y [ main::i#2 main::i#1 ] -Uplifting [pval] best 725 combination -Uplifting [ival] best 725 combination -Uplifting [printval] best 725 combination -Uplifting [incval] best 725 combination -Uplifting [__start] best 725 combination -Attempting to uplift remaining variables inzp[1]:3 [ val ] -Uplifting [] best 725 combination zp[1]:3 [ val ] -Allocated (was zp[1]:3) zp[1]:2 [ val ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - __b1_from_printother: - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - __b1_from___b1: - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - jmp __b1 - // printother::@1 - __b1: - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1_from___b1 - jmp __breturn - // printother::@return - __breturn: - // [10] return - rts -} -.segment platform - // incval -incval: { - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - jmp __breturn - // incval::@return - __breturn: - // [12] return - rts -} -.segment stage - // printval -printval: { - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - jmp __breturn - // printval::@return - __breturn: - // [14] return - rts -} -.segment platform - // ival -ival: { - // [16] callexecute incval -- call_vprc1 - jsr incval - jmp __breturn - // ival::@return - __breturn: - // [17] return - rts -} -.segment stage - // pval -pval: { - // [19] callexecute printval -- call_vprc1 - jsr printval - jmp __breturn - // pval::@return - __breturn: - // [20] return - rts -} - // main -main: { - // [22] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b1 - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [23] callexecute pval -- call_vprc1 - jsr pval - // [24] callexecute printother -- call_vprc1 - jsr printother - // [25] callexecute ival -- call_vprc1 - jsr ival - // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy - iny - // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #6 - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [28] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction __b1_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __b1_from_printother: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // reg byte y 151.5 -char main::i#2 // reg byte y 50.5 -__stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__stackcall void printval() -__stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -reg byte y [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] - - -FINAL ASSEMBLER -Score: 497 - - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - // __start::__init1 - // char val = 0 - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - // printother::@1 - __b1: - // (SCREEN+40)[i]++; - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // for(char i:0..5) - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1 - // printother::@return - // } - // [10] return - rts -} -.segment platform - // incval -incval: { - // val++; - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - // incval::@return - // } - // [12] return - rts -} -.segment stage - // printval -printval: { - // SCREEN[0] = val - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - // printval::@return - // } - // [14] return - rts -} -.segment platform - // ival -ival: { - // incval() - // [16] callexecute incval -- call_vprc1 - jsr incval - // ival::@return - // } - // [17] return - rts -} -.segment stage - // pval -pval: { - // printval() - // [19] callexecute printval -- call_vprc1 - jsr printval - // pval::@return - // } - // [20] return - rts -} - // main -main: { - // [22] phi from main to main::@1 [phi:main->main::@1] - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // pval() - // [23] callexecute pval -- call_vprc1 - jsr pval - // printother() - // [24] callexecute printother -- call_vprc1 - jsr printother - // ival() - // [25] callexecute ival -- call_vprc1 - jsr ival - // for(char i:0..5) - // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy - iny - // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #6 - bne __b1 - // main::@return - // } - // [28] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.sym b/src/test/ref/procedure-callingconvention-stack-bank-3.sym deleted file mode 100644 index 4eeb8472d..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // reg byte y 151.5 -char main::i#2 // reg byte y 50.5 -__stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__stackcall void printval() -__stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -reg byte y [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.asm b/src/test/ref/procedure-callingconvention-stack-bank-4.asm deleted file mode 100644 index f5f8d94ab..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.asm +++ /dev/null @@ -1,111 +0,0 @@ -// Test a procedure with calling convention stack -// Returning and passing struct values -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code -__start: { - // char idx = 0 - lda #0 - sta.z idx - jsr main - rts -} -.segment stage -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - inc.z idx - // SCREEN[idx++] = p.y - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - inc.z idx - // } - rts -} -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - txa - lsr - // struct Point p = { i, i/2 } - stx.z p - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // } - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - rts -} -main: { - .label p = 2 - .label i = 5 - lda #0 - sta.z i - __b1: - // for(char i=0;i<5;i++) - lda.z i - cmp #5 - bcc __b2 - // } - rts - __b2: - // struct Point p = get(i) - lda.z i - pha - pha - jsr get - pla - sta.z p - pla - sta.z p+1 - // print(p) - pha - lda.z p - pha - jsr print - pla - pla - // for(char i=0;i<5;i++) - inc.z i - jmp __b1 -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.cfg b/src/test/ref/procedure-callingconvention-stack-bank-4.cfg deleted file mode 100644 index df3d4fa35..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.cfg +++ /dev/null @@ -1,62 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.log b/src/test/ref/procedure-callingconvention-stack-bank-4.log deleted file mode 100644 index 4d3cfc93f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.log +++ /dev/null @@ -1,710 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Converting variable modified inside __stackcall procedure main() to load/store idx -Adding parameter assignment in __stackcall procedure get::i = param(get::i) -Adding parameter assignment in __stackcall procedure print::p = param(print::p) -Inlined call call __init -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) -Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) -Calling convention __stackcall adding prepare/execute/finalize for call main -Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) -Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) -Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) -Calling convention STACK_CALL adding stack push stackpush(char) = main::i -Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p -Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} -Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@2 - main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) - main::$0 = main::i#2 < 5 - if(main::$0) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - main::i#3 = phi( main::@1/main::i#2 ) - stackpush(char) = main::i#3 - sideeffect stackpushpadding(1) - callexecute get - main::p = stackpull(struct Point) - stackpush(struct Point) = main::p - callexecute print - sideeffect stackpullpadding(2) - main::i#1 = ++ main::i#3 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return - -__stackcall struct Point get(char i) -get: scope:[get] from - get::i#0 = stackidx(char,get::OFFSET_STACK_I) - get::$0 = get::i#0 / 2 - *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 - *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - return - to:@return - -__stackcall void print(struct Point p) -print: scope:[print] from - print::p = stackidx(struct Point,print::OFFSET_STACK_P) - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) - idx = ++ idx - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char OFFSET_STRUCT_POINT_X = 0 -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *)$400 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__stackcall struct Point get(char i) -number get::$0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 -__loadstore struct Point get::p -__loadstore struct Point get::return -__loadstore char idx -__stackcall void main() -bool main::$0 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -char main::i#3 -__loadstore struct Point main::p -__stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p - -Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 -Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 -Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in get::$0 = get::i#0 / 2 -Alias main::i#2 = main::i#3 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 -Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) -Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused constant OFFSET_STRUCT_POINT_X -Successful SSA optimization PassNEliminateUnusedVars -Rewriting division to use shift [12] get::$0 = get::i#0 / 2 -Successful SSA optimization Pass2MultiplyToShiftRewriting -Inlining constant with var siblings main::i#0 -Constant inlined main::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to get:24 print:27 - -Created 1 initial phi equivalence classes -Coalesced [30] main::i#4 = main::i#1 -Coalesced down to 1 phi equivalence classes -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 - -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get - -VARIABLE REGISTER WEIGHTS -void __start() -__stackcall struct Point get(char i) -char get::$0 // 1001.0 -char get::i -char get::i#0 // 1501.5 -__loadstore struct Point get::p -__loadstore struct Point get::return // 47.666666666666664 -__loadstore char idx // 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // 202.0 -char main::i#2 // 44.888888888888886 -__loadstore struct Point main::p // 202.0 -__stackcall void print(struct Point p) -__loadstore struct Point print::p // 333.6666666666667 - -Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Added variable idx to live range equivalence class [ idx ] -Added variable print::p to live range equivalence class [ print::p ] -Added variable get::i#0 to live range equivalence class [ get::i#0 ] -Added variable get::$0 to live range equivalence class [ get::$0 ] -Added variable main::p to live range equivalence class [ main::p ] -Added variable get::return to live range equivalence class [ get::return ] -Added variable get::p to live range equivalence class [ get::p ] -Complete equivalence classes -[ main::i#2 main::i#1 ] -[ idx ] -[ print::p ] -[ get::i#0 ] -[ get::$0 ] -[ main::p ] -[ get::return ] -[ get::p ] -Allocated zp[1]:2 [ get::i#0 ] -Allocated zp[1]:3 [ get::$0 ] -Allocated zp[2]:4 [ print::p ] -Allocated zp[1]:6 [ idx ] -Allocated zp[1]:7 [ main::i#2 main::i#1 ] -Allocated zp[2]:8 [ main::p ] -Allocated zp[2]:10 [ get::return ] -Allocated zp[2]:12 [ get::p ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , -Potential registers zp[1]:6 [ idx ] : zp[1]:6 , -Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , -Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , -Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , -Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , - -REGISTER UPLIFT SCOPES -Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] -Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] -Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] -Uplift Scope [] 316.21: zp[1]:6 [ idx ] -Uplift Scope [Point] -Uplift Scope [__start] - -Uplifting [get] best 993 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] -Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] -Uplifting [print] best 993 combination zp[2]:4 [ print::p ] -Uplifting [] best 993 combination zp[1]:6 [ idx ] -Uplifting [Point] best 993 combination -Uplifting [__start] best 993 combination -Attempting to uplift remaining variables inzp[1]:6 [ idx ] -Uplifting [] best 993 combination zp[1]:6 [ idx ] -Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] -Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] -Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] -Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] -Allocated (was zp[1]:6) zp[1]:4 [ idx ] -Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] -Allocated (was zp[2]:10) zp[2]:6 [ get::return ] -Allocated (was zp[2]:12) zp[2]:8 [ get::p ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} -.segment stage - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - jmp __breturn - // print::@return - __breturn: - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - jmp __breturn - // get::@return - __breturn: - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // main::@1 - __b1: - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - jmp __breturn - // main::@return - __breturn: - // [21] return - rts - // main::@2 - __b2: - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get -- call_vprc1 - jsr get - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - lda.z p+1 - pha - lda.z p - pha - // [27] callexecute print -- call_vprc1 - jsr print - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - __b1_from___b2: - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda.z p+1 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b1_from___init1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] - - -FINAL ASSEMBLER -Score: 861 - - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char idx = 0 - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} -.segment stage - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // SCREEN[idx++] = p.y - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // print::@return - // } - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // struct Point p = { i, i/2 } - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // get::@return - // } - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // main::@1 - __b1: - // for(char i=0;i<5;i++) - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - // main::@return - // } - // [21] return - rts - // main::@2 - __b2: - // struct Point p = get(i) - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get -- call_vprc1 - jsr get - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // print(p) - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - pha - lda.z p - pha - // [27] callexecute print -- call_vprc1 - jsr print - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // for(char i=0;i<5;i++) - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.sym b/src/test/ref/procedure-callingconvention-stack-bank-4.sym deleted file mode 100644 index 0c4dcbeba..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.sym +++ /dev/null @@ -1,30 +0,0 @@ -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.asm b/src/test/ref/procedure-callingconvention-stack-bank-5.asm deleted file mode 100644 index 7a7f95bc0..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.asm +++ /dev/null @@ -1,50 +0,0 @@ -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - cmp #0 - beq __b1 - // n-1 - sec - sbc #1 - // char c = pow2(n-1) - pha - jsr pow2 - pla - // return c+c; - asl - jmp __breturn - __b1: - lda #1 - __breturn: - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - rts -} -main: { - // pow2(6) - lda #6 - pha - jsr pow2 - pla - // *SCREEN = pow2(6) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.cfg b/src/test/ref/procedure-callingconvention-stack-bank-5.cfg deleted file mode 100644 index 17c2baaed..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.cfg +++ /dev/null @@ -1,29 +0,0 @@ - -__stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.log b/src/test/ref/procedure-callingconvention-stack-bank-5.log deleted file mode 100644 index e3d77a25a..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.log +++ /dev/null @@ -1,408 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Warning! Unknown #pragma platform -Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) -Eliminating unused variable with no statement pow2::$2 -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) -Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) -Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) -Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = 6 -Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = 6 - callexecute pow2 - main::$0 = stackpull(char) - *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__stackcall char pow2(char n) -pow2: scope:[pow2] from - pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - pow2::$0 = pow2::n#0 == 0 - if(pow2::$0) goto pow2::@1 - to:pow2::@2 -pow2::@1: scope:[pow2] from pow2 - pow2::return#0 = 1 - to:pow2::@return -pow2::@2: scope:[pow2] from pow2 - pow2::n#1 = phi( pow2/pow2::n#0 ) - pow2::$1 = pow2::n#1 - 1 - stackpush(char) = pow2::$1 - callexecute pow2 - pow2::c#0 = stackpull(char) - pow2::$3 = pow2::c#0 + pow2::c#0 - pow2::return#1 = pow2::$3 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 - pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) - stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - return - to:@return - -void __start() -__start: scope:[__start] from - call main - to:__start::@1 -__start::@1: scope:[__start] from __start - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__stackcall char pow2(char n) -bool pow2::$0 -number pow2::$1 -char pow2::$3 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 -char pow2::n -char pow2::n#0 -char pow2::n#1 -char pow2::return -char pow2::return#0 -char pow2::return#1 -char pow2::return#2 - -Adding number conversion cast (unumber) 6 in stackpush(char) = 6 -Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 -Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 -Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 -Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)6 -Inlining cast pow2::return#0 = (unumber)1 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 -Alias pow2::n#0 = pow2::n#1 -Alias pow2::return#1 = pow2::$3 -Successful SSA optimization Pass2AliasElimination -Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantIdentification -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart -Inlining constant with var siblings pow2::return#0 -Constant inlined pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of pow2::@1 -CALL GRAPH -Calls in [pow2] to pow2:4 -Calls in [main] to pow2:13 - -Created 1 initial phi equivalence classes -Coalesced [7] pow2::return#3 = pow2::return#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label pow2::@1 -Renumbering block pow2::@2 to pow2::@1 - -FINAL CONTROL FLOW GRAPH - -__stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__stackcall char pow2(char n) -char pow2::$1 // 22.0 -char pow2::c -char pow2::c#0 // 33.0 -char pow2::n -char pow2::n#0 // 16.5 -char pow2::return -char pow2::return#1 // 22.0 -char pow2::return#2 // 22.0 - -Initial phi equivalence classes -[ pow2::return#2 pow2::return#1 ] -Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] -Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] -Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ pow2::return#2 pow2::return#1 ] -[ pow2::n#0 ] -[ pow2::$1 ] -[ pow2::c#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] -Allocated zp[1]:3 [ pow2::c#0 ] -Allocated zp[1]:4 [ pow2::$1 ] -Allocated zp[1]:5 [ pow2::n#0 ] -Allocated zp[1]:6 [ main::$0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x -Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a -Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a -Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x -Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] -Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] -Uplift Scope [] - -Uplifting [pow2] best 87 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] -Limited combination testing to 100 combinations of 256 possible. -Uplifting [main] best 81 combination reg byte a [ main::$0 ] -Uplifting [] best 81 combination - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __breturn_from_pow2 - jmp __b1 - // pow2::@1 - __b1: - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 -- call_vprc1 - jsr pow2 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - __breturn_from___b1: - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __breturn_from_pow2: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - jmp __breturn - // pow2::@return - __breturn: - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 -- call_vprc1 - jsr pow2 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [14] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __b1: -Removing instruction __breturn_from___b1: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Relabelling long label __breturn_from_pow2 to __b1 -Succesful ASM optimization Pass5RelabelLongLabels - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 72 - - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b1 - // pow2::@1 - // n-1 - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // char c = pow2(n-1) - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 -- call_vprc1 - jsr pow2 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // return c+c; - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __b1: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - // pow2::@return - __breturn: - // } - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // pow2(6) - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 -- call_vprc1 - jsr pow2 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // *SCREEN = pow2(6) - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [14] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.sym b/src/test/ref/procedure-callingconvention-stack-bank-5.sym deleted file mode 100644 index b914904e4..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.sym +++ /dev/null @@ -1,21 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] From f2bf3484ad84a75f644a47560f1d2a0dd42c1acd Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 08:35:53 +0200 Subject: [PATCH 24/50] - testing and regeneration of fragment references - implementation of near, close, far through AsmFragmentSignature - fragment consolidation (removal of prepare, execute, finalize) - stackcall banked throws error + test cases - overall test cases for phi - implementation of fragments --- .../AsmFragmentInstanceSpecBuilder.java | 43 +-- .../signature/AsmFragmentSignature.java | 20 +- .../java/dk/camelot64/kickc/model/Bank.java | 226 +++--------- .../Pass0GenerateStatementSequence.java | 4 +- .../kickc/passes/Pass4CodeGeneration.java | 95 +++-- .../kickc/test/TestProgramsFast.java | 59 ++-- src/test/kc/call-banked-phi-case-1-near-0.c | 5 +- src/test/kc/call-banked-phi-case-1-near-1.c | 10 +- src/test/kc/call-banked-phi-case-2-close-0.c | 11 +- src/test/kc/call-banked-phi-case-2-close-1.c | 13 +- src/test/kc/call-banked-phi-case-3-near-0.c | 20 +- src/test/kc/call-banked-phi-case-3-near-1.c | 22 +- src/test/kc/call-banked-phi-case-4-near-0.c | 4 +- src/test/kc/call-banked-phi-case-4-near-1.c | 14 +- src/test/kc/call-banked-phi-case-5-far-0.c | 9 +- src/test/kc/call-banked-phi-case-5-far-1.c | 14 +- src/test/kc/call-banked-phi-case-6-close-0.c | 6 +- src/test/kc/call-banked-phi-case-6-close-1.c | 2 +- src/test/kc/call-banked-phi.ld | 12 +- .../kc/call-banked-stack-case-2-close-0.c | 6 +- src/test/kc/call-banked-stack-case-5-far-0.c | 4 +- .../kc/examples/cx16/banking/cx16-banking-0.h | 20 -- .../kc/examples/cx16/banking/cx16-banking.c | 153 ++++---- .../kc/examples/cx16/banking/cx16-banking.ld | 14 + src/test/ref/address-0.log | 4 +- src/test/ref/address-2.log | 4 +- src/test/ref/address-5.log | 16 +- src/test/ref/address-6.log | 16 +- src/test/ref/address-of-1.log | 12 +- src/test/ref/address-of-2.log | 12 +- src/test/ref/address-of-3.log | 12 +- src/test/ref/array-16bit-lookup.log | 4 +- src/test/ref/asm-mnemonic-names.log | 4 +- src/test/ref/assignment-compound.log | 44 +-- src/test/ref/atarixl-md5b.log | 16 +- src/test/ref/bitmap-circle-2.log | 44 +-- src/test/ref/bitmap-circle.log | 44 +-- src/test/ref/bitmap-line-anim-1.log | 56 +-- src/test/ref/bitmap-line-anim-2.log | 52 +-- src/test/ref/bitmap-plot-0.log | 28 +- src/test/ref/bitmap-plot-3.log | 52 +-- src/test/ref/bitmap-plotter.log | 16 +- src/test/ref/bool-const.log | 12 +- src/test/ref/bool-function.log | 4 +- src/test/ref/bool-ifs.log | 16 +- src/test/ref/bool-vars.log | 16 +- src/test/ref/c-types.log | 196 +++++------ src/test/ref/c64dtv-8bppcharstretch.log | 20 +- src/test/ref/c64dtv-8bppchunkystretch.log | 16 +- .../ref/call-banked-phi-case-1-near-0.log | 4 +- .../ref/call-banked-phi-case-1-near-1.log | 8 +- .../ref/call-banked-phi-case-2-close-0.log | 4 +- .../ref/call-banked-phi-case-2-close-1.log | 4 +- .../ref/call-banked-phi-case-3-near-0.log | 8 +- .../ref/call-banked-phi-case-3-near-1.log | 8 +- .../ref/call-banked-phi-case-4-near-0.log | 8 +- .../ref/call-banked-phi-case-4-near-1.log | 8 +- src/test/ref/call-banked-phi-case-5-far-0.log | 8 +- src/test/ref/call-banked-phi-case-5-far-1.log | 8 +- .../ref/call-banked-phi-case-6-close-0.log | 8 +- .../ref/call-banked-phi-case-6-close-1.log | 8 +- src/test/ref/call-parameter-autocast.log | 12 +- src/test/ref/callconstparam.log | 8 +- src/test/ref/casting-negative.log | 72 ++-- src/test/ref/casting.log | 4 +- src/test/ref/cbm-keyboard.log | 92 ++--- src/test/ref/cia-timer-cyclecount.log | 36 +- src/test/ref/cia-timer-simple.log | 36 +- src/test/ref/clobber-a-problem.log | 4 +- src/test/ref/complex/includes/includes-1.log | 4 +- src/test/ref/complex/includes/includes-2.log | 4 +- src/test/ref/complex/xmega65/xmega65.log | 8 +- src/test/ref/const-bool-return-problem.log | 8 +- src/test/ref/const-early-identification.log | 8 +- src/test/ref/const-identification.log | 8 +- src/test/ref/const-param.log | 12 +- src/test/ref/const-volatile-problem.log | 4 +- src/test/ref/constants.log | 92 ++--- src/test/ref/constref-not-literal-problem.log | 4 +- src/test/ref/cordic-atan2-16.log | 8 +- src/test/ref/cordic-atan2-clear.log | 12 +- src/test/ref/cordic-atan2.log | 8 +- src/test/ref/cstyle-decl-function.log | 8 +- src/test/ref/declared-memory-var-6.log | 40 +-- src/test/ref/declared-memory-var-7.log | 4 +- src/test/ref/declared-memory-var-8.log | 4 +- src/test/ref/declared-ssa-var-0.log | 4 +- src/test/ref/default-font.log | 4 +- src/test/ref/deref-to-derefidx-2.log | 8 +- src/test/ref/deref-to-derefidx.log | 8 +- src/test/ref/ducks-array.log | 20 +- src/test/ref/ducks-loop211.log | 4 +- src/test/ref/ducks-total.log | 332 +++++++++--------- src/test/ref/emptyblock-error.log | 8 +- src/test/ref/enum-5.log | 4 +- src/test/ref/euclid-3.log | 68 ++-- src/test/ref/euclid-problem-2.log | 16 +- .../examples/atari2600/atari2600-sprites.log | 4 +- src/test/ref/examples/c64/3d/perspective.log | 96 ++--- .../c64/bresenham/bitmap-bresenham.log | 60 ++-- .../c64/crunching/test-byteboozer.log | 4 +- .../c64/fastmultiply/fastmultiply8.log | 48 +-- src/test/ref/examples/c64/fire/fire.log | 28 +- .../ref/examples/c64/font-2x2/font-2x2.log | 20 +- .../examples/c64/kernalload/kernalload.log | 24 +- .../ref/examples/c64/krillload/krillload.log | 8 +- src/test/ref/examples/c64/linking/linking.log | 4 +- .../c64/multiplexer/simple-multiplexer.log | 24 +- .../examples/c64/nmisamples/nmisamples.log | 4 +- .../examples/c64/rasterbars/raster-bars.log | 4 +- src/test/ref/examples/c64/scroll/scroll.log | 4 +- .../ref/examples/c64/scrollbig/scrollbig.log | 20 +- .../ref/examples/c64/showlogo/showlogo.log | 8 +- src/test/ref/examples/c64/zpcode/zpcode.log | 8 +- .../ref/examples/cx16/cx16-rasterbars.log | 8 +- .../ref/examples/helloworld/helloworld.log | 44 +-- .../mega65/32bit-addressing-mega65.log | 4 +- src/test/ref/examples/mega65/banked-music.log | 28 +- .../ref/examples/mega65/camelot-1536dots.log | 44 +-- src/test/ref/examples/mega65/dma-test.log | 4 +- src/test/ref/examples/mega65/dma-test2.log | 8 +- src/test/ref/examples/mega65/dma-test3.log | 8 +- src/test/ref/examples/mega65/dma-test4.log | 8 +- src/test/ref/examples/mega65/dma-test5.log | 8 +- src/test/ref/examples/mega65/dma-test6.log | 8 +- src/test/ref/examples/mega65/dypp65.log | 16 +- .../ref/examples/mega65/helloworld-mega65.log | 48 +-- .../ref/examples/mega65/memorymap-test.log | 24 +- src/test/ref/examples/mega65/raster65.log | 8 +- src/test/ref/examples/nes/nes-dxycp.log | 20 +- .../ref/examples/plus4/plus4-randomwalk.log | 16 +- src/test/ref/examples/rom/rom.log | 16 +- src/test/ref/flipper-rex2.log | 12 +- src/test/ref/font-hex-show.log | 4 +- src/test/ref/fragment-synth.log | 8 +- src/test/ref/fragment-variations.log | 8 +- src/test/ref/function-pointer-advanced-1.log | 72 ++-- .../ref/function-pointer-noarg-call-10.log | 20 +- .../ref/function-pointer-noarg-call-13.log | 8 +- .../ref/function-pointer-noarg-call-14.log | 56 +-- .../ref/function-pointer-noarg-call-3.log | 4 +- .../ref/function-pointer-noarg-call-7.log | 8 +- .../ref/function-pointer-noarg-call-8.log | 12 +- .../ref/function-pointer-noarg-call-9.log | 4 +- .../ref/function-pointer-param-workaround.log | 4 +- src/test/ref/function-pointer-problem-1.log | 4 +- src/test/ref/function-pointer-return-2.log | 8 +- src/test/ref/function-pointer-return-3.log | 4 +- src/test/ref/global-label-problem.log | 20 +- src/test/ref/global-pc-multiple.log | 4 +- src/test/ref/helloworld2.log | 8 +- src/test/ref/hex2dec-ptrptr.log | 40 +-- src/test/ref/hex2dec.log | 44 +-- src/test/ref/incrementinarray.log | 20 +- src/test/ref/init-value-npe.log | 4 +- src/test/ref/init-volatiles.log | 4 +- src/test/ref/inline-asm-ref-scoped.log | 10 +- src/test/ref/inline-asm-uses-1.log | 4 +- src/test/ref/inline-kickasm-uses-problem.log | 4 +- src/test/ref/inline-pointer-1.log | 8 +- src/test/ref/inline-string-2.log | 12 +- src/test/ref/inline-string-4.log | 4 +- src/test/ref/inline-string.log | 12 +- src/test/ref/int-conversion.log | 176 +++++----- src/test/ref/int-literals.log | 68 ++-- src/test/ref/intermediates-simple.log | 4 +- src/test/ref/intermediates-struct.log | 8 +- .../ref/interrupt-volatile-reuse-problem1.log | 4 +- .../ref/interrupt-volatile-reuse-problem2.log | 4 +- src/test/ref/irq-hardware-clobber-jsr.log | 4 +- src/test/ref/irq-idx-problem.log | 4 +- .../ref/irq-local-var-overlap-problem.log | 8 +- src/test/ref/keyboard-glitch.log | 28 +- src/test/ref/library-constructor-1.log | 12 +- src/test/ref/library-constructor-3.log | 16 +- src/test/ref/linegen.log | 136 +++---- src/test/ref/literal-word-pointer-0.log | 4 +- src/test/ref/literal-word-pointer-1.log | 4 +- src/test/ref/liverange-1.log | 8 +- src/test/ref/liverange-10.log | 32 +- src/test/ref/liverange-2.log | 4 +- src/test/ref/liverange-3.log | 4 +- src/test/ref/liverange-4.log | 8 +- src/test/ref/liverange-5.log | 8 +- src/test/ref/liverange-6.log | 4 +- src/test/ref/liverange-7.log | 8 +- src/test/ref/liverange-8.log | 12 +- src/test/ref/liverange-9.log | 20 +- src/test/ref/liverange-call-problem.log | 16 +- src/test/ref/liverange-problem-0.log | 12 +- src/test/ref/liverange.log | 8 +- src/test/ref/longbranch-interrupt-problem.log | 4 +- src/test/ref/longjump2.log | 8 +- src/test/ref/loop-memset-min.log | 4 +- src/test/ref/loop-problem.log | 12 +- src/test/ref/loop-problem2.log | 8 +- src/test/ref/loophead-problem-2.log | 4 +- src/test/ref/loophead-problem-3.log | 4 +- src/test/ref/loophead-problem.log | 4 +- src/test/ref/loopnest.log | 4 +- src/test/ref/loopnest2.log | 8 +- src/test/ref/loopnest3.log | 8 +- src/test/ref/malloc-0.log | 8 +- src/test/ref/malloc-1.log | 8 +- src/test/ref/memcpy-0.log | 8 +- src/test/ref/memcpy-1.log | 8 +- src/test/ref/memory-heap.log | 8 +- .../ref/millfork-benchmarks/linkedlist-kc.log | 56 +-- .../ref/millfork-benchmarks/plasma-kc.log | 56 +-- .../ref/millfork-benchmarks/romsum-kc.log | 68 ++-- src/test/ref/millfork-benchmarks/sieve-kc.log | 80 ++--- src/test/ref/min-fmul-16.log | 36 +- src/test/ref/missing-band.log | 4 +- src/test/ref/modglobal.log | 8 +- src/test/ref/modglobalmin.log | 8 +- src/test/ref/mul8u-min.log | 4 +- .../simple-multiplexer-irq.log | 24 +- src/test/ref/multiply-16bit-const.log | 32 +- src/test/ref/nes-array.log | 8 +- src/test/ref/nomodify-3.log | 4 +- src/test/ref/nomodify-4.log | 8 +- src/test/ref/norom-charset.log | 4 +- src/test/ref/null-constant-1.log | 8 +- src/test/ref/number-conversion.log | 140 ++++---- src/test/ref/number-ternary-fail-2.log | 8 +- src/test/ref/number-type.log | 8 +- src/test/ref/overlap-allocation-2.log | 16 +- src/test/ref/overlap-allocation.log | 12 +- src/test/ref/plus-0.log | 8 +- src/test/ref/plus4-kbhit.log | 4 +- src/test/ref/plus4-keyboard-test.log | 4 +- src/test/ref/pointer-plus-0.log | 8 +- src/test/ref/pointer-pointer-2.log | 4 +- src/test/ref/pointer-pointer-3.log | 12 +- src/test/ref/pointer-swap.log | 20 +- src/test/ref/pointer-void-1.log | 12 +- src/test/ref/pointer-void-2.log | 12 +- src/test/ref/pointer-void-3.log | 8 +- src/test/ref/post-increment-problem-2.log | 4 +- src/test/ref/pragma-noparenthesis.log | 8 +- src/test/ref/primes-1000-2.log | 40 +-- src/test/ref/print-problem.log | 12 +- src/test/ref/printf-1.log | 88 ++--- src/test/ref/printf-10.log | 16 +- src/test/ref/printf-11.log | 12 +- src/test/ref/printf-12.log | 232 ++++++------ src/test/ref/printf-14.log | 64 ++-- src/test/ref/printf-15.log | 52 +-- src/test/ref/printf-17.log | 136 +++---- src/test/ref/printf-18.log | 84 ++--- src/test/ref/printf-19.log | 148 ++++---- src/test/ref/printmsg.log | 28 +- src/test/ref/problem-ma-var-overwrite.log | 8 +- src/test/ref/problem-negate-const.log | 4 +- .../ref/problem-struct-inline-parameter-1.log | 4 +- .../ref/problem-struct-inline-parameter.log | 4 +- .../procedure-callingconvention-stack-4.log | 4 +- .../procedure-callingconvention-stack-5.log | 4 +- src/test/ref/procedure-declare-10.log | 4 +- src/test/ref/procedure-declare-2.log | 8 +- src/test/ref/procedure-declare-3.log | 8 +- src/test/ref/procedure-declare-4.log | 8 +- src/test/ref/procedure-declare-5.log | 4 +- src/test/ref/processor-port-test.log | 188 +++++----- src/test/ref/ptrptr-optimize-1.log | 8 +- src/test/ref/ptrptr-optimize-2.log | 8 +- src/test/ref/ptrtest.log | 16 +- src/test/ref/register-0.log | 16 +- src/test/ref/reserve-zp-global-range.log | 4 +- src/test/ref/reserve-zp-global.log | 4 +- src/test/ref/reserve-zp-procedure-1.log | 4 +- src/test/ref/reserve-zp-procedure-2.log | 8 +- src/test/ref/reserve-zp-procedure-3.log | 4 +- src/test/ref/reserve-zp-procedure-4.log | 4 +- src/test/ref/robozzle64-label-problem.log | 8 +- src/test/ref/roll-sprite-msb.log | 4 +- src/test/ref/scan-desire-problem.log | 24 +- src/test/ref/scrollbig-clobber.log | 4 +- src/test/ref/semi-struct-1.log | 44 +-- src/test/ref/sepa-optimize-problem-1.log | 24 +- src/test/ref/sieve-min.log | 28 +- src/test/ref/signed-char-comparison.log | 4 +- src/test/ref/signed-indexed-subtract.log | 56 +-- src/test/ref/signed-words.log | 8 +- src/test/ref/sinus-basic.log | 72 ++-- src/test/ref/sinusgen16.log | 96 ++--- src/test/ref/sqr-delta.log | 4 +- src/test/ref/stack-relative-addressing.log | 4 +- src/test/ref/stars-2.log | 76 ++-- src/test/ref/static-init-code-0.log | 4 +- src/test/ref/strcmp-0.log | 244 ++++++------- src/test/ref/strcpy-0.log | 8 +- .../ref/string-const-consolidation-noroot.log | 12 +- .../ref/string-const-consolidation-root.log | 32 +- src/test/ref/string-const-consolidation.log | 12 +- src/test/ref/string-escapes-2.log | 4 +- src/test/ref/string-escapes-4.log | 4 +- src/test/ref/string-pointer-problem.log | 4 +- src/test/ref/strip.log | 16 +- src/test/ref/strncat-0.log | 12 +- src/test/ref/struct-11.log | 8 +- src/test/ref/struct-11b.log | 8 +- src/test/ref/struct-12.log | 8 +- src/test/ref/struct-22.log | 8 +- src/test/ref/struct-23.log | 8 +- src/test/ref/struct-3.log | 8 +- src/test/ref/struct-44.log | 76 ++-- src/test/ref/struct-5.log | 4 +- src/test/ref/struct-pointer-ints.log | 4 +- src/test/ref/struct-ptr-14.log | 4 +- src/test/ref/struct-ptr-16.log | 8 +- src/test/ref/struct-ptr-17.log | 8 +- src/test/ref/struct-ptr-18.log | 4 +- src/test/ref/struct-ptr-19.log | 8 +- src/test/ref/struct-ptr-22.log | 44 +-- src/test/ref/struct-ptr-23.log | 8 +- src/test/ref/struct-ptr-24.log | 4 +- src/test/ref/struct-ptr-26.log | 20 +- src/test/ref/struct-ptr-28.log | 8 +- src/test/ref/struct-ptr-29.log | 8 +- src/test/ref/struct-ptr-30.log | 4 +- src/test/ref/struct-ptr-31.log | 8 +- src/test/ref/struct-ptr-34.log | 8 +- src/test/ref/struct-unwinding-2.log | 16 +- src/test/ref/summin.log | 12 +- src/test/ref/ternary-3.log | 12 +- src/test/ref/test-comments-block.log | 4 +- src/test/ref/test-comments-global.log | 4 +- src/test/ref/test-comments-single.log | 4 +- src/test/ref/test-comparisons-sword.log | 64 ++-- src/test/ref/test-comparisons-word.log | 56 +-- .../ref/test-interrupt-volatile-write.log | 4 +- src/test/ref/test-interrupt-volatile.log | 4 +- src/test/ref/test-keyboard-space.log | 12 +- src/test/ref/test-keyboard.log | 20 +- src/test/ref/test-lowhigh.log | 88 ++--- src/test/ref/test-scroll-up.log | 12 +- src/test/ref/test-signed-word-minus-byte.log | 52 +-- src/test/ref/tod-1.log | 64 ++-- src/test/ref/toupper-1.log | 60 ++-- src/test/ref/travis1.log | 24 +- src/test/ref/typedef-2.log | 4 +- src/test/ref/typedef-4.log | 4 +- src/test/ref/typeid-plus-bytes.log | 16 +- src/test/ref/union-7.log | 8 +- src/test/ref/union-8.log | 8 +- src/test/ref/var-register-zp-3.log | 12 +- src/test/ref/var-register.log | 4 +- src/test/ref/varmodel-ma_mem-3.log | 8 +- src/test/ref/varmodel-mem-1.log | 8 +- src/test/ref/void-parameter.log | 12 +- src/test/ref/volatile-0.log | 4 +- src/test/ref/volatile-2.log | 4 +- src/test/ref/voronoi.log | 16 +- src/test/ref/weeip-bbslist.log | 84 ++--- src/test/ref/weeip-checksum.log | 12 +- src/test/ref/wfragment1.log | 4 +- src/test/ref/zeropage-sinus.log | 16 +- src/test/ref/zp-reserve-coalesce-problem.log | 8 +- src/test/ref/zpparammin.log | 8 +- ...rocedure-callingconvention-stack-far-3.asm | 145 -------- ...rocedure-callingconvention-stack-far-3.dbg | 153 -------- ...ocedure-callingconvention-stack-far-3.klog | 22 -- ...rocedure-callingconvention-stack-far-3.prg | Bin 91 -> 0 bytes ...rocedure-callingconvention-stack-far-3.sym | 20 -- ...procedure-callingconvention-stack-far-3.vs | 14 - 366 files changed, 4061 insertions(+), 4477 deletions(-) delete mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.h create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking.ld delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.asm delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.dbg delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.klog delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.prg delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.sym delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.vs diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 859f55804..8c493b3d6 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -42,58 +42,25 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a bank call prepare + * Create a fragment instance spec factory for a subroutine call * + * @param distance The string expressing the distance of the call: "near", "close", "far". + * @param callingConvention The string expressing the calling convention supported by the fragment. * @param bankArea The bank area where the procedure is to be called. * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec bankCallPrepare(String bankArea, Long bank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(String distance, String callingConvention, String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Prepare); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(distance, callingConvention, bankArea, bank); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - /** - * Create a fragment instance spec factory for a bank call execute - * - * @param bankArea The bank area where the procedure is to be called. - * @param bank The bank where the procedure is to be called. - * @param procedureName The full name of the procedure. - * @param program The program - * @return the fragment instance spec factory - */ - public static AsmFragmentInstanceSpec bankCallExecute(String bankArea, Long bank, String procedureName, Program program) { - AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Execute); - ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bank)); - bindings.bind("la1", new LabelRef(procedureName)); - return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); - } - - /** - * Create a fragment instance spec factory for a bank call finalize - * - * @param bankArea The bank area where the procedure is to be called. - * @param bank The bank where the procedure is to be called. - * @param procedureName The full name of the procedure. - * @param program The program - * @return the fragment instance spec factory - */ - public static AsmFragmentInstanceSpec bankCallFinalize(String bankArea, Long bank, String procedureName, Program program) { - AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Finalize); - ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bank)); - bindings.bind("la1", new LabelRef(procedureName)); - return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); - } /** diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 456864880..d13f75cb9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -75,29 +75,21 @@ public interface AsmFragmentSignature { */ class CallBanked implements AsmFragmentSignature { + final private String distance; + final private String callingConvention; final private String bankArea; final private Long bank; - final private String targetPlatform; - public enum PrepareExecuteFinalize { - Prepare, - Execute, - Finalize - } - - final private PrepareExecuteFinalize fragment; - - - public CallBanked(String bankArea, Long bank, String targetPlatform, PrepareExecuteFinalize fragment) { + public CallBanked(String distance, String callingConvention, String bankArea, Long bank) { + this.distance = distance; + this.callingConvention = callingConvention; this.bankArea = bankArea; this.bank = bank; - this.targetPlatform = targetPlatform; - this.fragment = fragment; } @Override public String getName() { - return "call_far" + "_" + targetPlatform.toLowerCase() + "_" + bankArea.toLowerCase() + "_" + fragment.name().toLowerCase(); + return "call_" + callingConvention.toLowerCase() + "_" + distance.toLowerCase() + ((bankArea.isEmpty()) ? "" : ("_" + bankArea.toLowerCase())); } } diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index 6f43b7c18..c51312740 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -23,35 +23,67 @@ package dk.camelot64.kickc.model; * The method and the platform are the key combinations that select the fragments * in kickc to generate the banked function call implementations used by the compiler. * - *

Your C-code can be augmented with 3 new directives, that define which function(s) will be declared as banked: + *


Your C-code can be augmented with 3 new directives, that define which function(s) will be declared as banked: * *

    - *
  • #pragma bank( method, number ) directive, defines for sequent functions - * the target bank number and the method for the banked function call implementations.
  • - *
  • A new #pragma nobank( dummy ) directive, resets the calculation of banking for sequent functions - * not to calculate any banking for these functions.
  • - *
  • A new __bank( method, number ) directive, defines for one function a - * target bank number and the method for the banked function call implementation.
  • + *
  • #pragma bank( area, number ) directive, defines for sequent functions + * the the area and the bank number.
  • + *
  • A new #pragma nobank( dummy ) directive, resets the calculation of banking + * for the sequent functions.
  • + *
  • __bank( area, number ) directive, defines for one function a + * target bank area and number.
  • + *
+ *

Examples of bank areas are different RAM and/or ROM areas at different + * zones in the linear memory addressing space, and may or may not overlap. + * Each banking area has its own configuration in the target computer platform and + * operate independently from each other.
+ * For example, the Commander X16 has 256 RAM bank between 0xA000 and 0xBFFF and + * 256 ROM banks from 0xC000 till 0xFFFF. Each RAM bank is configured through zero page $00 + * and each ROM bank is configured through zero page $01. + * The compiler configures for you these registers, depending on the configured banking area of the function, + * when a banked call is required.

+ * + *


There are different types of function calls that can be implemented, depending on: + *

    + *
  • the banked location of either or both the caller and/or the called function.
  • + *
  • the banking area of either or both the caller and the called function.
  • *
* - *

The compiler decides automatically the function call implementation, which can be either banked or not. - * And if the function call implementation is banked, it should use the specified bank number to implement - * the banked function call. - * The rules can be summarized as follows: + *

The types of (banked) function call implementations are: + *

    + *
  • near - jump to subroutine without any implementation of banking logic.
  • + *
  • close - jump to subroutine with inline banking implementation logic.
  • + *
  • far - jump to subroutine using a specific trampoline banking implementation logic.
  • + *
+ * Depending on the target platform of the system the far calls are likely the most complex + * and will consume the most CPU cycles. Therefore, careful design of the program flow and the + * placement of the functions in the banks need to be done, to avoid as much as possible these far calls. + * + *


The exact rules when near, close and far calls are implemented by the compiler, + * can be summarized in the following 6 cases: * *

    - *
  • If a function is declared not banked, and the function call location is not banked, - * the function call implementation will be not banked.
  • - *
  • If a function is declared banked, and the function call location is not banked, - * the function call implementation will be banked.
  • - *
  • If a function is declared not banked, and the function call location is banked, - * the function call implementation will be not banked.
  • - *
  • If a function is declared banked, and the function call location is banked, - * but the function call location is within the same bank, - * the function call implementation will be not banked.
  • - *
  • If a function is declared banked, and the function call location is banked, - * but the function call location is not within the same bank, - * the function call implementation will be banked.
  • + *
  • case #1 - If the caller function is not banked,
    + * and the called function is not banked,
    + * then a near call will be implemented.
  • + *
  • case #2 - If the caller function is not banked,
    + * and the called function is banked in any bank in any banking area
    ,
    + * then a close call will be implemented.
  • + *
  • case #3 - If the caller function is banked in any bank in any banking area,
    + * and the called function is not banked,
    + * then a near call will be implemented.
  • + *
  • case #4 - If the caller function is banked,
    + * and the called function is banked,
    + * and both functions are in the same bank and in the same bank area,
    + * then a near call will be implemented.
  • + *
  • case #5 - If the caller function is banked,
    + * and the called function is banked,
    + * and both functions are in a different bank but in the same bank area,
    + * then a far call will be implemented.
  • + *
  • case #6 - If the caller function is banked,
    + * and the called function is banked,
    + * and both functions are in any bank but in a different bank area,
    + * then the a close call will be implemented.
  • *
* *

The usage of #pragma code_seg( segment ) directive @@ -68,154 +100,8 @@ package dk.camelot64.kickc.model; * at the function calling locations! * * - *

- * The best way to describe the usage with a comprehensive example, documenting the different use cases - * how the compiler decides which functions are banked or not, - * and how the resulting banked function call code will be generated. - *

- * The example implements several functions in various forms to allocate the code in main memory - * using segment Code and within 3 banked memory locations, using segments Bank1, Bank2, Bank3. - * In order to ensure a good understanding of the example, the usage of these code segments in harmony with the - * banking directives must be described, which is absolutely necessary to master, - * in order to make banked function calls work. + * The KickC compiler contains several test cases and examples which demonstrate the usage of the banking system. * - *

- *

    - *
  • The #pragma directive code_seg( Code ) defines the sequent function code to be allocated - * within main (not banked) memory, defined within segment Code<> by the linker.
  • - *
  • The #pragma directive code_seg( Bank1 ) defines the sequent function code to be allocated - * within banked memory, defined within segment Bank1 by the linker.
  • - *
  • The #pragma directive code_seg( Bank2 ) defines the sequent function code to be allocated - * within banked memory, defined within segment Bank2 by the linker.
  • - *
  • The #pragma directive code_seg( Bank3 ) defines the sequent function code to be allocated - * within banked memory, defined within segment Bank3 by the linker.
  • - *
- * - * Note that the Code segment is the default location in KickC where the code is placed by the linker. - * - * Find below the code example, which is also the program procedure-callingconvention-phi-bank-5.c - * - *
- *
- * // The linker specification of the different segments.
- * #pragma link("procedure-callingconvention-phi-bank-5.ld")
- *
- * // The target computer platform is the Commander X16,
- * // which implements banking in ram between 0xA0000 and 0xBFFF,
- * // and in rom between 0xC000 and 0xFFFF.
- * #pragma target(cx16)
- *
- * char *const SCREEN = (char *)0x0400; // Just for test purposes.
- *
- * #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker.
- * #pragma bank(ram, 1)    // The sequent functions will be banked using call method ram in bank number 1.
- *
- * // Function declarations
- * char func_ram_bank1_a(char a, char b);
- * char __bank(ram, 1) func_ram_bank1_b(char a, char b);
- * char func_ram_bank1_c(char a, char b);
- * char func_ram_bank1_d(char a, char b);
- * char func_ram_bank1_e(char a, char b);
- * char func_ram_bank1_f(char a, char b);
- * char func_rom_bank2_a(char a, char b);
- * char __bank(rom, 2) func_rom_bank2_b(char a, char b);
- * char func_rom_bank2_c(char a, char b);
- * char func_rom_bank2_d(char a, char b);
- * char func_rom_bank2_e(char a, char b);
- * char func_rom_bank2_f(char a, char b);
- * char func_main_a(char a, char b);
- * char func_main_b(char a, char b);
- *
- * // Functional code
- *
- * char func_ram_bank1_a(char a, char b) {
- *     return a + b;
- * }
- *
- * char func_ram_bank1_c(char a, char b) {
- *     return func_ram_bank1_a(a, b);               // Non banked call in ram bank 1.
- * }
- *
- * char func_ram_bank1_d(char a, char b) {
- *     return func_rom_bank2_a(a, b);               // Banked call from ram bank 1 to rom bank 2.
- * }
- *
- * char func_ram_bank1_e(char a, char b) {
- *     return func_rom_bank2_b(a, b);               // Banked call from ram bank 1 to rom bank 2.
- * }
- *
- * char func_ram_bank1_f(char a, char b) {
- *     return func_main_a(a, b);                    // Non banked call from ram bank 1 to main memory.
- * }
- *
- *
- * #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker.
- * #pragma bank(rom, 2)    // The sequent functions will be banked using call method rom in bank number 2.
- *
- * char func_rom_bank2_a(char a, char b) {
- *     return a + b;
- * }
- *
- * char func_rom_bank2_c(char a, char b) {
- *     return func_ram_bank1_a(a, b);              // Banked call from rom bank 2 to ram bank 1.
- * }
- *
- * char func_rom_bank2_d(char a, char b) {
- *     return func_rom_bank2_a(a, b);              // Non banked call in rom bank 2.
- * }
- *
- * char func_rom_bank2_e(char a, char b) {
- *     return func_rom_bank2_b(a, b);              // Non Banked call in rom bank 2.
- * }
- *
- * char func_rom_bank2_f(char a, char b) {
- *     return func_main_a(a, b);                   // Non banked call from rom bank 2 to main memory.
- * }
- *
- *
- * #pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore.
- *
- * // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram.
- * char __bank(ram, 1) func_ram_bank1_b(char a, char b) {
- *     return a + b;
- * }
- *
- * // The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom.
- * char __bank(rom, 2) func_rom_bank2_b(char a, char b) {
- *     return a + b;
- * }
- *
- * #pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code).
- *
- * // Allocated in main memory.
- * char func_main_a(char a, char b) {
- *     return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory.
- * }
- *
- * // Allocated in main memory.
- * char func_main_b(char a, char b) {
- *     return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory.
- * }
- *
- * // Practically this means that the main() function is placed in main memory ...
- *
- * void main(void) {
- *     SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_main_a('0', 7);  // Near call in main memory from main memory.
- *     SCREEN[0] = func_main_b('0', 7);  // Near call in main memory from main memory.
- * }
- * 
*/ public class Bank { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 792c6849f..5d4965219 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -590,7 +590,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor +// #include #include #include -#include // The target computer platform is the Commander X16, // which implements banking in ram between 0xA0000 and 0xBFFF, // and in ram between 0xC000 and 0xFFFF. #pragma target(cx16) - -#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. -#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. - - // Functional code +__address(0x00) char RAM_Bank; + +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(cx16_ram, 1) // The sequent functions will be banked using call method ram in bank number 1. + char add_a(char a) { - printf("add_a(%02x:%04p), ",bank_get_bram(), (void*)&add_a); + printf("add_a(%02x), ", RAM_Bank); return a+1; } char add_c(char a) { - printf("add_c(%02x:%04p), ",bank_get_bram(),(void*)&add_c); + printf("add_c(%02x), ", RAM_Bank); return add_a(a)+1; // Non banked call in ram bank 1. } char add_d(char a) { - printf("add_d(%02x:%04p), ",bank_get_bram(),(void*)&add_d); + printf("add_d(%02x), ",RAM_Bank); return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_e(char a) { - printf("add_e(%02x:%04p), ",bank_get_bram(),(void*)&add_e); + printf("add_e(%02x), ",RAM_Bank); return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_f(char a) { - printf("add_f(%02x:%04p), ",bank_get_bram(),(void*)&add_f); + printf("add_f(%02x), ",RAM_Bank); return add_m(a)+1; // Non banked call fram ram bank 1 to main memory. } #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. -#pragma bank(ram, 2) // The sequent functions will be banked using call method ram in bank number 2. +#pragma bank(cx16_ram, 2) // The sequent functions will be banked using call method ram in bank number 2. char mul_a(char m) { - printf("mul_a(%02x:%04p), ",bank_get_bram(),(void*)&mul_a); + printf("mul_a(%02x), ",RAM_Bank); return m * 2; } char mul_c(char m) { - printf("mul_c(%02x:%04p), ",bank_get_bram(),(void*)&mul_c); + printf("mul_c(%02x), ",RAM_Bank); return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1. } char mul_d(char m) { - printf("mul_d(%02x:%04p), ",bank_get_bram(),(void*)&mul_d); + printf("mul_d(%02x), ",RAM_Bank); return mul_a(m)*2; // Non banked call in ram bank 2. } char mul_e(char a) { - printf("mul_e(%02x:%04p), ",bank_get_bram(),(void*)&mul_e); + printf("mul_e(%02x), ",RAM_Bank); return mul_b(a)*2; // Non Banked call in ram bank 2. } char mul_f(char m) { - printf("mul_f(%02x:%04p), ",bank_get_bram(),(void*)&mul_f); + printf("mul_f(%02x), ",RAM_Bank); return add_m(m)*2; // Non banked call fram ram bank 2 to main memory. } -#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). #pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -char __bank(ram, 1) add_b(char a) { - printf("add_b(%02x:%04p), ",bank_get_bram(),(void*)&add_b); +char __bank(cx16_ram, 1) add_b(char a) { + printf("add_b(%02x), ",RAM_Bank); return a+1; } +#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram. -char __bank(ram, 2) mul_b(char m) { - printf("mul_b(%02x:%04p), ",bank_get_bram(),(void*)&mul_b); +char __bank(cx16_ram, 2) mul_b(char m) { + printf("mul_b(%02x), ",RAM_Bank); return m*2; } +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). + // Allocated in main memory. char add_m(char a) { - printf("add_m(%02x:%04p), ",bank_get_bram(),(void*)&add_m); + printf("add_m(%02x), ",RAM_Bank); return add_e(a)+1; // Banked call to ram in bank 1 fram main memory. } // Allocated in main memory. char mul_m(char m) { - printf("mul_m(%02x:%04p), ",bank_get_bram(),(void*)&mul_m); + printf("mul_m(%02x), ",RAM_Bank); return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory. } @@ -116,50 +118,73 @@ char mul_m(char m) { // Practically this means that the main() function is placed in main memory ... void load_bank(char bank, char *file) { - bank_set_bram(bank); - cbm_k_setnam(file); - cbm_k_setlfs(1,8,2); - cbm_k_load((char*)0xA000, 0); - cbm_k_close(1); + RAM_Bank = bank; + + //cbm_k_setnam(file); + char file_len = strlen(file); + asm { + lda file_len + ldx file + jsr $FFBD + } + + //cbm_k_setlfs(1,8,2); + asm { + lda #1 + ldx #8 + ldy #2 + jsr $FFBA + } + + //cbm_k_load((char*)0xA000, 0); + asm { + lda #0 + ldx #<$A000 + ldy #>$A000 + jsr $FFD5 + } + + //cbm_k_close(1); + asm { + lda #1 + jsr $FFC3 + } } void main(void) { - clrscr(); - cx16_k_screen_set_charset(1,0); - load_bank(1, "BANK1.BIN"); load_bank(2, "BANK2.BIN"); - bank_set_bram(0); + RAM_Bank = 0; asm{.byte $db} - __export char result = add_a(1); - printf("result = %u\n", result); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_b(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_c(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_d(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_e(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_f(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_a(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_b(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_c(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_d(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_e(1)); // banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_f(1)); // banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_m(1)); // Near call in main memory fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_m(1)); // Near call in main memory fram main memory. - } + printf("result = %u\n", add_a(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_b(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_c(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_d(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_e(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_f(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_a(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_b(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_c(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_d(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_e(1)); // banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_f(1)); // banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_m(1)); // Near call in main memory fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_m(1)); // Near call in main memory fram main memory. +} diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.ld b/src/test/kc/examples/cx16/banking/cx16-banking.ld new file mode 100644 index 000000000..e21277416 --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking.ld @@ -0,0 +1,14 @@ +.file [name="%O", type="prg", segments="Program"] +.file [name="BANK1.BIN", type="bin", segments="Bank1"] +.file [name="BANK2.BIN", type="bin", segments="Bank2"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segment Basic +:BasicUpstart(%E) +.segment Code +.segment Data + diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index 46f28583e..d0c3f50bd 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index 635b2d637..850a4e045 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-5.log b/src/test/ref/address-5.log index ec12d868c..89039d32b 100644 --- a/src/test/ref/address-5.log +++ b/src/test/ref/address-5.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/address-6.log b/src/test/ref/address-6.log index 40634ffb4..7b69f56e2 100644 --- a/src/test/ref/address-6.log +++ b/src/test/ref/address-6.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index 9ccbe545a..d3c427e55 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -259,7 +259,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -275,7 +275,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -291,7 +291,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near ldx #'l' jsr setByte jmp __b3 @@ -410,7 +410,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -423,7 +423,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -436,7 +436,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near ldx #'l' jsr setByte // main::@3 diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index badb057de..deb4adb98 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -367,7 +367,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -417,7 +417,7 @@ main: { // [15] *(main::SCREEN2+3) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+3 - // [16] call setv + // [16] call setv -- call_phi_near // Set value directly in a call jsr setv jmp __b1 @@ -429,7 +429,7 @@ main: { // [18] *(main::SCREEN2+4) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+4 - // [19] call setp + // [19] call setp -- call_phi_near // Set value through pointer in a call jsr setp jmp __b2 @@ -545,7 +545,7 @@ __start: { sta.z val // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -603,7 +603,7 @@ main: { lda.z ptr sta SCREEN2+3 // setv(4) - // [16] call setv + // [16] call setv -- call_phi_near // Set value directly in a call jsr setv // main::@1 @@ -616,7 +616,7 @@ main: { lda.z ptr sta SCREEN2+4 // setp(ptr, 5) - // [19] call setp + // [19] call setp -- call_phi_near // Set value through pointer in a call jsr setp // main::@2 diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index f06b24e72..5452e93f9 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -332,7 +332,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 + // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near lda #0 sta.z idx jsr print @@ -349,7 +349,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -377,7 +377,7 @@ main: { // [11] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print jmp __b3 // main::@3 @@ -499,7 +499,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 + // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near lda #0 sta.z idx jsr print @@ -513,7 +513,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::i#2 = 2 [phi:main::@2->main::@1#0] -- vbuz1=vbuc1 @@ -538,7 +538,7 @@ main: { // [7] call print // [11] phi from main::@1 to print [phi:main::@1->print] // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print // main::@3 // for(char i:2..3) diff --git a/src/test/ref/array-16bit-lookup.log b/src/test/ref/array-16bit-lookup.log index 4425fa5ea..9c1c39308 100644 --- a/src/test/ref/array-16bit-lookup.log +++ b/src/test/ref/array-16bit-lookup.log @@ -313,7 +313,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue + // [3] call getValue -- call_phi_near jsr getValue // [4] getValue::return#0 = getValue::return#1 jmp __b2 @@ -451,7 +451,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue + // [3] call getValue -- call_phi_near jsr getValue // [4] getValue::return#0 = getValue::return#1 // main::@2 diff --git a/src/test/ref/asm-mnemonic-names.log b/src/test/ref/asm-mnemonic-names.log index e2456e540..7c776fad2 100644 --- a/src/test/ref/asm-mnemonic-names.log +++ b/src/test/ref/asm-mnemonic-names.log @@ -135,7 +135,7 @@ main: { // [0] *lda = main::jmp -- _deref_pbuc1=vbuc2 lda #jmp sta lda - // [1] call bne + // [1] call bne -- call_phi_near jsr bne jmp __b1 // main::@1 @@ -215,7 +215,7 @@ main: { lda #jmp sta lda // bne(jmp) - // [1] call bne + // [1] call bne -- call_phi_near jsr bne // main::@1 // asm diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index fea93d4d2..9c2927c8f 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -726,7 +726,7 @@ main: { test_from_main: // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near lda #3 sta.z test.a jsr test @@ -741,7 +741,7 @@ main: { test_from___b1: // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near lda #3+1 sta.z test.a jsr test @@ -756,7 +756,7 @@ main: { test_from___b2: // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near lda #3+1-1 sta.z test.a jsr test @@ -771,7 +771,7 @@ main: { test_from___b3: // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near lda #(3+1-1)*6 sta.z test.a jsr test @@ -786,7 +786,7 @@ main: { test_from___b4: // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -801,7 +801,7 @@ main: { test_from___b5: // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -816,7 +816,7 @@ main: { test_from___b6: // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -831,7 +831,7 @@ main: { test_from___b7: // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -846,7 +846,7 @@ main: { test_from___b8: // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -861,7 +861,7 @@ main: { test_from___b9: // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -876,7 +876,7 @@ main: { test_from___b10: // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test @@ -1027,7 +1027,7 @@ main: { // [23] phi from main to test [phi:main->test] // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near lda #3 sta.z test.a jsr test @@ -1039,7 +1039,7 @@ main: { // [23] phi from main::@1 to test [phi:main::@1->test] // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near lda #3+1 sta.z test.a jsr test @@ -1051,7 +1051,7 @@ main: { // [23] phi from main::@2 to test [phi:main::@2->test] // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near lda #3+1-1 sta.z test.a jsr test @@ -1063,7 +1063,7 @@ main: { // [23] phi from main::@3 to test [phi:main::@3->test] // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near lda #(3+1-1)*6 sta.z test.a jsr test @@ -1075,7 +1075,7 @@ main: { // [23] phi from main::@4 to test [phi:main::@4->test] // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -1087,7 +1087,7 @@ main: { // [23] phi from main::@5 to test [phi:main::@5->test] // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -1099,7 +1099,7 @@ main: { // [23] phi from main::@6 to test [phi:main::@6->test] // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -1111,7 +1111,7 @@ main: { // [23] phi from main::@7 to test [phi:main::@7->test] // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -1123,7 +1123,7 @@ main: { // [23] phi from main::@8 to test [phi:main::@8->test] // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -1135,7 +1135,7 @@ main: { // [23] phi from main::@9 to test [phi:main::@9->test] // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -1147,7 +1147,7 @@ main: { // [23] phi from main::@10 to test [phi:main::@10->test] // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test diff --git a/src/test/ref/atarixl-md5b.log b/src/test/ref/atarixl-md5b.log index f8b947650..281f695b8 100644 --- a/src/test/ref/atarixl-md5b.log +++ b/src/test/ref/atarixl-md5b.log @@ -903,7 +903,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] + // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -940,7 +940,7 @@ main: { // main::@3 __b3: // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] + // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near md5_from___b3: jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] @@ -1012,7 +1012,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near jsr print jmp __b5 // md5::@5 @@ -1049,7 +1049,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near jsr print jmp __b6 // md5::@6 @@ -1400,7 +1400,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] + // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return @@ -1431,7 +1431,7 @@ main: { // main::@3 // md5() // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] + // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] // main::@4 @@ -1498,7 +1498,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near jsr print // md5::@5 // i&1 @@ -1530,7 +1530,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near jsr print // md5::@6 // for(char i = 0; i<4; i++) diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 68efa05eb..9cda2ff11 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1318,7 +1318,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -1339,7 +1339,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near lda #SCREEN @@ -1390,7 +1390,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle + // [11] call circle -- call_phi_near jsr circle jmp __b6 // main::@6 @@ -1584,7 +1584,7 @@ circle: { // [60] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot jmp __b6 // circle::@6 @@ -1609,7 +1609,7 @@ circle: { // [60] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot jmp __b7 // circle::@7 @@ -1634,7 +1634,7 @@ circle: { // [60] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot jmp __b8 // circle::@8 @@ -1659,7 +1659,7 @@ circle: { // [60] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot jmp __b9 // circle::@9 @@ -1684,7 +1684,7 @@ circle: { // [60] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot jmp __b10 // circle::@10 @@ -1709,7 +1709,7 @@ circle: { // [60] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot jmp __b11 // circle::@11 @@ -1734,7 +1734,7 @@ circle: { // [60] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot jmp __b12 // circle::@12 @@ -1759,7 +1759,7 @@ circle: { // [60] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot jmp __b13 // circle::@13 @@ -2189,7 +2189,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -2207,7 +2207,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near lda #SCREEN @@ -2256,7 +2256,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle + // [11] call circle -- call_phi_near jsr circle // main::@6 // i += 5 @@ -2450,7 +2450,7 @@ circle: { // [34] call plot // [60] phi from circle::@4 to plot [phi:circle::@4->plot] // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2473,7 +2473,7 @@ circle: { // [37] call plot // [60] phi from circle::@6 to plot [phi:circle::@6->plot] // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2496,7 +2496,7 @@ circle: { // [40] call plot // [60] phi from circle::@7 to plot [phi:circle::@7->plot] // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2519,7 +2519,7 @@ circle: { // [43] call plot // [60] phi from circle::@8 to plot [phi:circle::@8->plot] // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2542,7 +2542,7 @@ circle: { // [46] call plot // [60] phi from circle::@9 to plot [phi:circle::@9->plot] // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2565,7 +2565,7 @@ circle: { // [49] call plot // [60] phi from circle::@10 to plot [phi:circle::@10->plot] // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2588,7 +2588,7 @@ circle: { // [52] call plot // [60] phi from circle::@11 to plot [phi:circle::@11->plot] // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2611,7 +2611,7 @@ circle: { // [55] call plot // [60] phi from circle::@12 to plot [phi:circle::@12->plot] // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index 0e5befc1a..ce278821e 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1192,7 +1192,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -1213,7 +1213,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near lda #SCREEN @@ -1232,7 +1232,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] + // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near circle_from___b3: jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -1411,7 +1411,7 @@ circle: { // [55] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot jmp __b6 // circle::@6 @@ -1436,7 +1436,7 @@ circle: { // [55] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot jmp __b7 // circle::@7 @@ -1461,7 +1461,7 @@ circle: { // [55] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot jmp __b8 // circle::@8 @@ -1486,7 +1486,7 @@ circle: { // [55] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot jmp __b9 // circle::@9 @@ -1511,7 +1511,7 @@ circle: { // [55] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot jmp __b10 // circle::@10 @@ -1536,7 +1536,7 @@ circle: { // [55] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot jmp __b11 // circle::@11 @@ -1561,7 +1561,7 @@ circle: { // [55] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot jmp __b12 // circle::@12 @@ -1586,7 +1586,7 @@ circle: { // [55] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot jmp __b13 // circle::@13 @@ -1955,7 +1955,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -1973,7 +1973,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near lda #SCREEN @@ -1994,7 +1994,7 @@ main: { sta VICII_MEMORY // circle(100,100,50) // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] + // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 @@ -2169,7 +2169,7 @@ circle: { // [29] call plot // [55] phi from circle::@4 to plot [phi:circle::@4->plot] // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2192,7 +2192,7 @@ circle: { // [32] call plot // [55] phi from circle::@6 to plot [phi:circle::@6->plot] // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2215,7 +2215,7 @@ circle: { // [35] call plot // [55] phi from circle::@7 to plot [phi:circle::@7->plot] // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2238,7 +2238,7 @@ circle: { // [38] call plot // [55] phi from circle::@8 to plot [phi:circle::@8->plot] // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2261,7 +2261,7 @@ circle: { // [41] call plot // [55] phi from circle::@9 to plot [phi:circle::@9->plot] // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2284,7 +2284,7 @@ circle: { // [44] call plot // [55] phi from circle::@10 to plot [phi:circle::@10->plot] // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2307,7 +2307,7 @@ circle: { // [47] call plot // [55] phi from circle::@11 to plot [phi:circle::@11->plot] // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2330,7 +2330,7 @@ circle: { // [50] call plot // [55] phi from circle::@12 to plot [phi:circle::@12->plot] // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index a9ee08268..ec14390c3 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -2327,7 +2327,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] + // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2336,7 +2336,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2345,7 +2345,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near init_screen_from___b3: jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2361,7 +2361,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line + // [11] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b4 // main::@4 @@ -2501,7 +2501,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2522,7 +2522,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2599,7 +2599,7 @@ bitmap_line: { // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2613,7 +2613,7 @@ bitmap_line: { // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -2646,7 +2646,7 @@ bitmap_line: { // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [57] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2660,7 +2660,7 @@ bitmap_line: { // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -2720,7 +2720,7 @@ bitmap_line: { // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2799,7 +2799,7 @@ bitmap_line: { // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2845,7 +2845,7 @@ bitmap_line: { // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2923,7 +2923,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot jmp __breturn @@ -3494,19 +3494,19 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] + // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [9] phi next#5 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -3520,7 +3520,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line + // [11] call bitmap_line -- call_phi_near jsr bitmap_line // main::@4 // next++; @@ -3650,7 +3650,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3668,7 +3668,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3743,7 +3743,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3756,7 +3756,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -3788,7 +3788,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [57] sgn_u16::return#0 = sgn_u16::return#4 @@ -3801,7 +3801,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -3856,7 +3856,7 @@ bitmap_line: { // [67] call bitmap_plot // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3930,7 +3930,7 @@ bitmap_line: { // [78] call bitmap_plot // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -3972,7 +3972,7 @@ bitmap_line: { // [84] call bitmap_plot // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4046,7 +4046,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index 4a8593ac2..cbb073377 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -2293,7 +2293,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] + // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] @@ -2302,7 +2302,7 @@ main: { // main::@3 __b3: // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near bitmap_clear_from___b3: jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2316,7 +2316,7 @@ main: { // main::@1 __b1: // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line + // [9] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b4 // main::@4 @@ -2485,7 +2485,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2506,7 +2506,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2542,7 +2542,7 @@ bitmap_line: { // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [43] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2556,7 +2556,7 @@ bitmap_line: { // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -2589,7 +2589,7 @@ bitmap_line: { // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [52] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2603,7 +2603,7 @@ bitmap_line: { // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -2663,7 +2663,7 @@ bitmap_line: { // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2742,7 +2742,7 @@ bitmap_line: { // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2788,7 +2788,7 @@ bitmap_line: { // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2866,7 +2866,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot jmp __breturn @@ -3443,13 +3443,13 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] + // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // bitmap_clear(PURPLE, WHITE) // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [7] phi next#6 = 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 @@ -3460,7 +3460,7 @@ main: { __b1: // bitmap_line(0,0,next,100) // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line + // [9] call bitmap_line -- call_phi_near jsr bitmap_line // main::@4 // next++; @@ -3611,7 +3611,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3629,7 +3629,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3664,7 +3664,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [43] abs_u16::return#0 = abs_u16::return#4 @@ -3677,7 +3677,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -3709,7 +3709,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [52] sgn_u16::return#0 = sgn_u16::return#4 @@ -3722,7 +3722,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -3777,7 +3777,7 @@ bitmap_line: { // [62] call bitmap_plot // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3851,7 +3851,7 @@ bitmap_line: { // [73] call bitmap_plot // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -3893,7 +3893,7 @@ bitmap_line: { // [79] call bitmap_plot // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -3967,7 +3967,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 656e0bd4e..6436ef53c 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1730,7 +1730,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1782,7 +1782,7 @@ main: { .label vx = $a .label vy = 9 // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] + // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] @@ -1791,7 +1791,7 @@ main: { // main::@8 __b8: // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near bitmap_clear_from___b8: jsr bitmap_clear jmp __b9 @@ -1811,7 +1811,7 @@ main: { // [17] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [18] call init_irq + // [18] call init_irq -- call_phi_near jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: @@ -1840,7 +1840,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot + // [22] call bitmap_plot -- call_phi_near jsr bitmap_plot jmp __b10 // main::@10 @@ -2056,7 +2056,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2077,7 +2077,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2562,7 +2562,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -2613,13 +2613,13 @@ main: { .label vy = 9 // bitmap_init(BITMAP, SCREEN) // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] + // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] // main::@8 // bitmap_clear(BLACK, WHITE) // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near jsr bitmap_clear // main::@9 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -2634,7 +2634,7 @@ main: { lda #toD0181_return sta D018 // init_irq() - // [18] call init_irq + // [18] call init_irq -- call_phi_near jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] // [19] phi main::vy#2 = 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 @@ -2656,7 +2656,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot + // [22] call bitmap_plot -- call_phi_near jsr bitmap_plot // main::@10 // x += vx @@ -2856,7 +2856,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2874,7 +2874,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index fbdff3656..4b3924927 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -2524,7 +2524,7 @@ main: { .label a = $1c .label i = $1b // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] + // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2533,7 +2533,7 @@ main: { // main::@5 __b5: // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near bitmap_clear_from___b5: jsr bitmap_clear jmp __b6 @@ -2616,7 +2616,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line + // [16] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b7 // main::@7 @@ -2761,7 +2761,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2782,7 +2782,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2821,7 +2821,7 @@ bitmap_line: { // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2843,7 +2843,7 @@ bitmap_line: { // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // [52] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2875,7 +2875,7 @@ bitmap_line: { // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [58] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2897,7 +2897,7 @@ bitmap_line: { // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [62] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2940,7 +2940,7 @@ bitmap_line: { // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -3019,7 +3019,7 @@ bitmap_line: { // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -3052,7 +3052,7 @@ bitmap_line: { // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3126,7 +3126,7 @@ bitmap_line: { // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn } @@ -3699,13 +3699,13 @@ main: { .label i = $1b // bitmap_init(BITMAP, SCREEN) // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] + // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // bitmap_clear(BLACK, WHITE) // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near jsr bitmap_clear // main::@6 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -3783,7 +3783,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line + // [16] call bitmap_line -- call_phi_near jsr bitmap_line // main::@7 // a+=32 @@ -3919,7 +3919,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3937,7 +3937,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3975,7 +3975,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [52] abs_u16::return#1 = abs_u16::return#4 @@ -4027,7 +4027,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [58] sgn_u16::return#0 = sgn_u16::return#4 @@ -4048,7 +4048,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [62] sgn_u16::return#1 = sgn_u16::return#4 @@ -4087,7 +4087,7 @@ bitmap_line: { // [69] call bitmap_plot // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4161,7 +4161,7 @@ bitmap_line: { // [80] call bitmap_plot // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -4191,7 +4191,7 @@ bitmap_line: { // [86] call bitmap_plot // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4263,7 +4263,7 @@ bitmap_line: { // [96] call bitmap_plot // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot rts } diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index ba502c020..dafc94580 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -980,7 +980,7 @@ main: { lda #SCREEN/$40|BITMAP/$400 sta D018 // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] + // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near init_screen_from_main: jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] @@ -989,7 +989,7 @@ main: { // main::@3 __b3: // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near init_plot_tables_from___b3: jsr init_plot_tables jmp __b1 @@ -1005,7 +1005,7 @@ main: { // [8] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] + // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near plots_from___b2: jsr plots jmp __b4 @@ -1234,7 +1234,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot + // [52] call plot -- call_phi_near jsr plot jmp __b3 // plots::@3 @@ -1511,13 +1511,13 @@ main: { sta D018 // init_screen() // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] + // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // init_plot_tables() // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near jsr init_plot_tables // main::@1 __b1: @@ -1532,7 +1532,7 @@ main: { inc BG_COLOR // plots() // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] + // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near jsr plots // main::@4 // (*BG_COLOR)--; @@ -1751,7 +1751,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot + // [52] call plot -- call_phi_near jsr plot // plots::@3 // for(byte i=0; ibool_const_if] + // [7] phi from main to bool_const_if [phi:main->bool_const_if] -- call_phi_near bool_const_if_from_main: jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] @@ -377,7 +377,7 @@ main: { // main::@1 __b1: // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near bool_const_vars_from___b1: jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -386,7 +386,7 @@ main: { // main::@2 __b2: // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near bool_const_inline_from___b2: jsr bool_const_inline jmp __breturn @@ -503,19 +503,19 @@ Score: 60 main: { // bool_const_if() // [1] call bool_const_if - // [7] phi from main to bool_const_if [phi:main->bool_const_if] + // [7] phi from main to bool_const_if [phi:main->bool_const_if] -- call_phi_near jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_const_vars() // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_const_inline() // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near jsr bool_const_inline // main::@return // } diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index 9eefa4f55..4e2a534ae 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -325,7 +325,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet + // [5] call isSet -- call_phi_near jsr isSet // [6] isSet::return#0 = isSet::return#1 jmp __b5 @@ -474,7 +474,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet + // [5] call isSet -- call_phi_near jsr isSet // [6] isSet::return#0 = isSet::return#1 // main::@5 diff --git a/src/test/ref/bool-ifs.log b/src/test/ref/bool-ifs.log index 93674d607..85068d2b7 100644 --- a/src/test/ref/bool-ifs.log +++ b/src/test/ref/bool-ifs.log @@ -655,7 +655,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -664,7 +664,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -673,7 +673,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -682,7 +682,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1040,25 +1040,25 @@ Score: 1684 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near jsr bool_complex // main::@return // } diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index afc8566b2..df8e0e9a3 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -689,7 +689,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -698,7 +698,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -707,7 +707,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -716,7 +716,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1102,25 +1102,25 @@ Score: 1899 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near jsr bool_complex // main::@return // } diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index cdea0bfb0..aae73a3d4 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -2212,7 +2212,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2221,7 +2221,7 @@ main: { // main::@1 __b1: // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near testChar_from___b1: jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2229,21 +2229,21 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call testShort + // [5] call testShort -- call_phi_near jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testInt + // [7] call testInt -- call_phi_near jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [9] call testLong + // [9] call testLong -- call_phi_near jsr testLong jmp __breturn // main::@return @@ -2255,7 +2255,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -2277,7 +2277,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near lda #str @@ -2292,7 +2292,7 @@ testChar: { // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -2304,7 +2304,7 @@ testChar: { // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -2316,7 +2316,7 @@ testChar: { // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] print_uchar_from___b3: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -2328,7 +2328,7 @@ testChar: { // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] @@ -2337,7 +2337,7 @@ testChar: { // testChar::@5 __b5: // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near print_schar_from___b5: jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] @@ -2348,7 +2348,7 @@ testChar: { // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near lda #print_screen @@ -2378,7 +2378,7 @@ testShort: { // [80] phi from testShort to print_str [phi:testShort->print_str] print_str_from_testShort: // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near lda #str @@ -2393,7 +2393,7 @@ testShort: { // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near lda #u @@ -2408,7 +2408,7 @@ testShort: { // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -2419,7 +2419,7 @@ testShort: { // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near lda #n @@ -2434,7 +2434,7 @@ testShort: { // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -2445,7 +2445,7 @@ testShort: { // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near lda #s @@ -2459,7 +2459,7 @@ testShort: { // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // testShort::@return @@ -2485,7 +2485,7 @@ testInt: { // [80] phi from testInt to print_str [phi:testInt->print_str] print_str_from_testInt: // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near lda #str @@ -2500,7 +2500,7 @@ testInt: { // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near lda #u @@ -2515,7 +2515,7 @@ testInt: { // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -2526,7 +2526,7 @@ testInt: { // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near lda #n @@ -2541,7 +2541,7 @@ testInt: { // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -2552,7 +2552,7 @@ testInt: { // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near lda #s @@ -2566,7 +2566,7 @@ testInt: { // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // testInt::@return @@ -2592,7 +2592,7 @@ testLong: { // [80] phi from testLong to print_str [phi:testLong->print_str] print_str_from_testLong: // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near lda #str @@ -2607,7 +2607,7 @@ testLong: { // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] print_ulong_from___b1: // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near lda #u @@ -2626,7 +2626,7 @@ testLong: { // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -2637,7 +2637,7 @@ testLong: { // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] print_slong_from___b3: - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near lda #n @@ -2656,7 +2656,7 @@ testLong: { // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -2667,7 +2667,7 @@ testLong: { // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] print_slong_from___b5: - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near lda #s @@ -2685,7 +2685,7 @@ testLong: { // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // testLong::@return @@ -2776,7 +2776,7 @@ print_str: { // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2806,7 +2806,7 @@ print_uchar: { // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2820,7 +2820,7 @@ print_uchar: { // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2860,7 +2860,7 @@ print_schar: { // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -2872,7 +2872,7 @@ print_schar: { // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near ldx #b jsr print_uchar jmp __breturn @@ -2925,7 +2925,7 @@ print_uint: { // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2961,7 +2961,7 @@ print_sint: { // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2976,7 +2976,7 @@ print_sint: { // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] print_uint_from___b2: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -2992,7 +2992,7 @@ print_sint: { // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -3022,7 +3022,7 @@ print_ulong: { // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint jmp __b1 // print_ulong::@1 @@ -3036,7 +3036,7 @@ print_ulong: { // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_ulong::@return @@ -3061,7 +3061,7 @@ print_slong: { // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -3076,7 +3076,7 @@ print_slong: { // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] print_ulong_from___b2: // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near jsr print_ulong jmp __breturn // print_slong::@return @@ -3092,7 +3092,7 @@ print_slong: { // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -3473,28 +3473,28 @@ Score: 2013 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testChar() // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testShort() - // [5] call testShort + // [5] call testShort -- call_phi_near jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testInt() - // [7] call testInt + // [7] call testInt -- call_phi_near jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testLong() - // [9] call testLong + // [9] call testLong -- call_phi_near jsr testLong // main::@return // } @@ -3506,7 +3506,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -3526,7 +3526,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near lda #str @@ -3538,7 +3538,7 @@ testChar: { // [17] call print_uchar // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -3547,7 +3547,7 @@ testChar: { // [19] call print_char // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -3556,7 +3556,7 @@ testChar: { // [21] call print_uchar // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -3565,21 +3565,21 @@ testChar: { // [23] call print_char // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] // testChar::@5 // print_schar(s) // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] // testChar::@6 // print_ln() // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near lda #print_screen @@ -3608,7 +3608,7 @@ testShort: { // [30] call print_str // [80] phi from testShort to print_str [phi:testShort->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near lda #str @@ -3620,7 +3620,7 @@ testShort: { // [32] call print_uint // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near lda #u @@ -3632,7 +3632,7 @@ testShort: { // [34] call print_char // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -3640,7 +3640,7 @@ testShort: { // print_sint(n) // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near lda #n @@ -3652,7 +3652,7 @@ testShort: { // [38] call print_char // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -3660,7 +3660,7 @@ testShort: { // print_sint(s) // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near lda #s @@ -3671,7 +3671,7 @@ testShort: { // print_ln() // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near jsr print_ln // testShort::@return // } @@ -3696,7 +3696,7 @@ testInt: { // [45] call print_str // [80] phi from testInt to print_str [phi:testInt->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near lda #str @@ -3708,7 +3708,7 @@ testInt: { // [47] call print_uint // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near lda #u @@ -3720,7 +3720,7 @@ testInt: { // [49] call print_char // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -3728,7 +3728,7 @@ testInt: { // print_sint(n) // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near lda #n @@ -3740,7 +3740,7 @@ testInt: { // [53] call print_char // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -3748,7 +3748,7 @@ testInt: { // print_sint(s) // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near lda #s @@ -3759,7 +3759,7 @@ testInt: { // print_ln() // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near jsr print_ln // testInt::@return // } @@ -3784,7 +3784,7 @@ testLong: { // [60] call print_str // [80] phi from testLong to print_str [phi:testLong->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near lda #str @@ -3796,7 +3796,7 @@ testLong: { // [62] call print_ulong // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near lda #u @@ -3812,7 +3812,7 @@ testLong: { // [64] call print_char // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -3820,7 +3820,7 @@ testLong: { // print_slong(n) // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near lda #n @@ -3836,7 +3836,7 @@ testLong: { // [68] call print_char // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -3844,7 +3844,7 @@ testLong: { // print_slong(s) // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near lda #s @@ -3859,7 +3859,7 @@ testLong: { // print_ln() // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near jsr print_ln // testLong::@return // } @@ -3945,7 +3945,7 @@ print_str: { // [85] call print_char // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3975,7 +3975,7 @@ print_uchar: { // Table of hexadecimal digits // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3988,7 +3988,7 @@ print_uchar: { // [93] call print_char // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } @@ -4025,7 +4025,7 @@ print_schar: { // [101] call print_char // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -4034,7 +4034,7 @@ print_schar: { // [103] call print_uchar // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near ldx #b jsr print_uchar // print_schar::@return @@ -4084,7 +4084,7 @@ print_uint: { // [112] call print_uchar // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4093,7 +4093,7 @@ print_uint: { // [114] call print_uchar // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4115,7 +4115,7 @@ print_sint: { // [119] call print_char // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4127,7 +4127,7 @@ print_sint: { // [122] call print_uint // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near jsr print_uint // print_sint::@return // } @@ -4140,7 +4140,7 @@ print_sint: { // [125] call print_char // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -4169,7 +4169,7 @@ print_ulong: { // [129] call print_uint // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -4181,7 +4181,7 @@ print_ulong: { // [131] call print_uint // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@return // } @@ -4203,7 +4203,7 @@ print_slong: { // [136] call print_char // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -4215,7 +4215,7 @@ print_slong: { // [139] call print_ulong // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near jsr print_ulong // print_slong::@return // } @@ -4228,7 +4228,7 @@ print_slong: { // [142] call print_char // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_slong::@4 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 9e674183c..f7b3c6de1 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1380,7 +1380,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] + // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near gfx_init_from_main: jsr gfx_init jmp __b6 @@ -1592,7 +1592,7 @@ main: { // Initialize the different graphics in the memory gfx_init: { // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near gfx_init_screen0_from_gfx_init: jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] @@ -1601,7 +1601,7 @@ gfx_init: { // gfx_init::@1 __b1: // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near gfx_init_plane_charset8_from___b1: jsr gfx_init_plane_charset8 jmp __breturn @@ -1703,7 +1703,7 @@ gfx_init_plane_charset8: { // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_plane_charset8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 jmp __b9 @@ -1850,7 +1850,7 @@ gfx_init_plane_charset8: { // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -2224,7 +2224,7 @@ main: { sta.z PROCPORT // gfx_init() // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] + // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near jsr gfx_init // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -2454,13 +2454,13 @@ main: { gfx_init: { // gfx_init_screen0() // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] // gfx_init::@1 // gfx_init_plane_charset8() // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near jsr gfx_init_plane_charset8 // gfx_init::@return // } @@ -2557,7 +2557,7 @@ gfx_init_plane_charset8: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@9 @@ -2691,7 +2691,7 @@ gfx_init_plane_charset8: { // [82] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 932a1908c..5f14475bb 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -911,7 +911,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near gfx_init_chunky_from_main: jsr gfx_init_chunky jmp __b6 @@ -1110,7 +1110,7 @@ gfx_init_chunky: { // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_chunky: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1167,7 +1167,7 @@ gfx_init_chunky: { // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b4: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near jsr dtvSetCpuBankSegment1 jmp __b7 // gfx_init_chunky::@7 @@ -1238,7 +1238,7 @@ gfx_init_chunky: { // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b6: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -1530,7 +1530,7 @@ main: { sta.z PROCPORT // gfx_init_chunky() // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near jsr gfx_init_chunky // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -1744,7 +1744,7 @@ gfx_init_chunky: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1791,7 +1791,7 @@ gfx_init_chunky: { txa // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@7 // dtvSetCpuBankSegment1(gfxbCpuBank++); @@ -1858,7 +1858,7 @@ gfx_init_chunky: { // [52] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@return diff --git a/src/test/ref/call-banked-phi-case-1-near-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log index be8ee4301..9e790fe29 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -179,7 +179,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near plus_from_main: jsr plus jmp __b1 @@ -259,7 +259,7 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near jsr plus // main::@1 // SCREEN[0] = plus('0', 7) diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log index b205976e7..21e4fb39b 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.log +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -248,7 +248,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near plus_from_main: jsr plus jmp __b1 @@ -269,7 +269,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -348,7 +348,7 @@ Score: 36 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near jsr plus // main::@1 // SCREEN[0] = plus('0', 7) @@ -367,7 +367,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 5d4cd8f5d..3f5fa068e 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -266,7 +266,7 @@ Score: 39 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 6ddc743fb..60a66095a 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -266,7 +266,7 @@ Score: 39 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 37da8004c..5b3a50214 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -356,7 +356,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -381,7 +381,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 26e30a500..990511052 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -356,7 +356,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -381,7 +381,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index a484d0a46..25e2d2255 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -355,7 +355,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -380,7 +380,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 03c157545..54b44c7af 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -355,7 +355,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -380,7 +380,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index ea2ec7bee..a98cea7ee 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram min_from_plus: jsr $ff6e .byte plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -384,7 +384,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram jsr $ff6e .byte min diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 4527d9a6f..360fff834 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram min_from_plus: jsr $ff6e .byte plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -384,7 +384,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram jsr $ff6e .byte min diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index aba095156..fce99e78f 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -250,7 +250,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -277,7 +277,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: lda #1 sta.z 1 @@ -362,7 +362,7 @@ Score: 66 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -387,7 +387,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom lda #1 sta.z 1 pha diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 047340878..37e02e3ea 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -250,7 +250,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -277,7 +277,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: lda #1 sta.z 1 @@ -362,7 +362,7 @@ Score: 66 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -387,7 +387,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom lda #1 sta.z 1 pha diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index c86f830af..51c9246e2 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -261,7 +261,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -277,7 +277,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -292,7 +292,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print jmp __breturn // main::@return @@ -386,7 +386,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -399,7 +399,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -411,7 +411,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index f93f9d39a..ae33a22d0 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -307,7 +307,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -322,7 +322,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near ldx #3 jsr line jmp __breturn @@ -438,7 +438,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -450,7 +450,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near ldx #3 jsr line // main::@return diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log index cfa761d3c..1ec60bd76 100644 --- a/src/test/ref/casting-negative.log +++ b/src/test/ref/casting-negative.log @@ -3802,7 +3802,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3810,7 +3810,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -3846,7 +3846,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3887,7 +3887,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -3899,7 +3899,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -3907,7 +3907,7 @@ cputc: { main: { .label signed_char_value = $17 // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] + // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3939,7 +3939,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting + // [34] call test_casting -- call_phi_near jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -4069,7 +4069,7 @@ cputln: { sta.z conio_cursor_x // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [53] call cscroll + // [53] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4183,7 +4183,7 @@ clrscr: { test_casting: { .label signed_short_value = 4 // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint + // [72] call printf_sint -- call_phi_near jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] __b1_from_test_casting: @@ -4198,7 +4198,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near lda #s @@ -4234,7 +4234,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4253,7 +4253,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4269,7 +4269,7 @@ cscroll: { memset_from___b3: // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4285,7 +4285,7 @@ cscroll: { memset_from___b4: // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4354,7 +4354,7 @@ printf_sint: { __b2: // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near utoa_from___b2: jsr utoa jmp __b3 @@ -4364,7 +4364,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -4630,7 +4630,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [144] utoa_append::return#0 = utoa_append::value#2 @@ -4686,7 +4686,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -5199,12 +5199,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -5233,7 +5233,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -5272,7 +5272,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -5283,7 +5283,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -5292,7 +5292,7 @@ main: { .label signed_char_value = $17 // clrscr() // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] + // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::signed_char_value#2 = -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 @@ -5323,7 +5323,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting + // [34] call test_casting -- call_phi_near jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [29] phi main::signed_char_value#2 = main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy @@ -5455,7 +5455,7 @@ cputln: { // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [53] call cscroll + // [53] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5570,7 +5570,7 @@ test_casting: { .label signed_short_value = 4 // printf("%d\n", signed_short_value) // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint + // [72] call printf_sint -- call_phi_near jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] // test_casting::@1 @@ -5582,7 +5582,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near lda #s @@ -5615,7 +5615,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5631,7 +5631,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5644,7 +5644,7 @@ cscroll: { // [118] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5657,7 +5657,7 @@ cscroll: { // [118] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5729,7 +5729,7 @@ printf_sint: { // utoa(uvalue, printf_buffer.digits, format.radix) // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near jsr utoa // printf_sint::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -5737,7 +5737,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_sint::@return // } @@ -5993,7 +5993,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [144] utoa_append::return#0 = utoa_append::value#2 @@ -6043,7 +6043,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index 83d5fabb2..0e79411dd 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -413,7 +413,7 @@ main: { // main::@2 __b2: // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] + // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near w_from___b2: jsr w jmp __breturn @@ -577,7 +577,7 @@ main: { // main::@2 // w() // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] + // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near jsr w // main::@return // } diff --git a/src/test/ref/cbm-keyboard.log b/src/test/ref/cbm-keyboard.log index 0ffec3780..07b7d51e5 100644 --- a/src/test/ref/cbm-keyboard.log +++ b/src/test/ref/cbm-keyboard.log @@ -4473,7 +4473,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -4481,7 +4481,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -4517,7 +4517,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4558,7 +4558,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -4570,7 +4570,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -4593,7 +4593,7 @@ main: { lda #toD0181_return sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near clrscr_from___b3: jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -4609,7 +4609,7 @@ main: { jmp __b1 // main::@1 __b1: - // [32] call GETIN + // [32] call GETIN -- call_phi_near jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 jmp __b4 @@ -4634,7 +4634,7 @@ main: { __b2: // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode + // [38] call petscii_to_screencode -- call_phi_near jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 jmp __b5 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -4674,7 +4674,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near lda #s1 @@ -4686,7 +4686,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near printf_uchar_from___b7: jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -4702,7 +4702,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near lda #s2 @@ -4847,7 +4847,7 @@ cputln: { sta.z conio_cursor_x // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [69] call cscroll + // [69] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -5115,7 +5115,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near uctoa_from___b1: jsr uctoa jmp __b2 @@ -5126,7 +5126,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -5155,7 +5155,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5174,7 +5174,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5190,7 +5190,7 @@ cscroll: { memset_from___b3: // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5206,7 +5206,7 @@ cscroll: { memset_from___b4: // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5332,7 +5332,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -5368,7 +5368,7 @@ printf_number_buffer: { // printf_number_buffer::@4 __b4: // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near strlen_from___b4: jsr strlen // [154] strlen::return#2 = strlen::len#2 @@ -5430,7 +5430,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near printf_padding_from___b6: jsr printf_padding jmp __b2 @@ -5463,7 +5463,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near lda #buffer_digits @@ -6310,12 +6310,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -6344,7 +6344,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -6383,7 +6383,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -6394,7 +6394,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -6414,7 +6414,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // clrscr() // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [31] phi main::current#2 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -6425,7 +6425,7 @@ main: { // main::@1 __b1: // char ch = GETIN() - // [32] call GETIN + // [32] call GETIN -- call_phi_near jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 // main::@4 @@ -6445,7 +6445,7 @@ main: { // petscii_to_screencode(ch) // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode + // [38] call petscii_to_screencode -- call_phi_near jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 // main::@5 @@ -6459,7 +6459,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -6481,7 +6481,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near lda #s1 @@ -6492,7 +6492,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -6504,7 +6504,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near lda #s2 @@ -6650,7 +6650,7 @@ cputln: { // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [69] call cscroll + // [69] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -6910,7 +6910,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6919,7 +6919,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uchar::@return // } @@ -6944,7 +6944,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -6960,7 +6960,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -6973,7 +6973,7 @@ cscroll: { // [184] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6986,7 +6986,7 @@ cscroll: { // [184] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -7110,7 +7110,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -7143,7 +7143,7 @@ printf_number_buffer: { // printf_number_buffer::@4 // strlen(buffer.digits) // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [154] strlen::return#2 = strlen::len#2 @@ -7196,7 +7196,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7223,7 +7223,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index d0f1acec5..825e359ca 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -694,7 +694,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call clock_start + // [2] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start jmp __b2 @@ -702,7 +702,7 @@ main: { __b2: // asm { nop } nop - // [4] call clock + // [4] call clock -- call_phi_near jsr clock // [5] clock::return#2 = clock::return#0 jmp __b3 @@ -725,7 +725,7 @@ main: { sbc #>CLOCKS_PER_INIT>>$10 sta.z cyclecount+3 // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at + // [9] call print_ulong_at -- call_phi_near // Print cycle count jsr print_ulong_at jmp __b1_from___b3 @@ -813,7 +813,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -831,7 +831,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -853,7 +853,7 @@ print_uint_at: { // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -873,7 +873,7 @@ print_uint_at: { // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -906,7 +906,7 @@ print_uchar_at: { // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -929,7 +929,7 @@ print_uchar_at: { // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1097,7 +1097,7 @@ main: { // main::@1 __b1: // clock_start() - // [2] call clock_start + // [2] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start // main::@2 @@ -1105,7 +1105,7 @@ main: { // asm { nop } nop // clock() - // [4] call clock + // [4] call clock -- call_phi_near jsr clock // [5] clock::return#2 = clock::return#0 // main::@3 @@ -1128,7 +1128,7 @@ main: { sta.z cyclecount+3 // print_ulong_at(cyclecount, SCREEN) // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at + // [9] call print_ulong_at -- call_phi_near // Print cycle count jsr print_ulong_at jmp __b1 @@ -1222,7 +1222,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1238,7 +1238,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@return // } @@ -1259,7 +1259,7 @@ print_uint_at: { // [28] call print_uchar_at // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1277,7 +1277,7 @@ print_uint_at: { // [31] call print_uchar_at // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@return // } @@ -1310,7 +1310,7 @@ print_uchar_at: { // Table of hexadecimal digits // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1332,7 +1332,7 @@ print_uchar_at: { // [41] call print_char_at // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index eff475044..cc00daf4c 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -657,7 +657,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call clock_start + // [1] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -666,14 +666,14 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call clock + // [3] call clock -- call_phi_near jsr clock // [4] clock::return#2 = clock::return#0 jmp __b2 // main::@2 __b2: // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at + // [6] call print_ulong_at -- call_phi_near jsr print_ulong_at jmp __b1_from___b2 } @@ -760,7 +760,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -778,7 +778,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -800,7 +800,7 @@ print_uint_at: { // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -820,7 +820,7 @@ print_uint_at: { // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -853,7 +853,7 @@ print_uchar_at: { // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -876,7 +876,7 @@ print_uchar_at: { // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1030,20 +1030,20 @@ Score: 467 // main main: { // clock_start() - // [1] call clock_start + // [1] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // clock() - // [3] call clock + // [3] call clock -- call_phi_near jsr clock // [4] clock::return#2 = clock::return#0 // main::@2 // print_ulong_at(clock(), SCREEN) // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at + // [6] call print_ulong_at -- call_phi_near jsr print_ulong_at jmp __b1 } @@ -1136,7 +1136,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1152,7 +1152,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@return // } @@ -1173,7 +1173,7 @@ print_uint_at: { // [25] call print_uchar_at // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1191,7 +1191,7 @@ print_uint_at: { // [28] call print_uchar_at // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@return // } @@ -1224,7 +1224,7 @@ print_uchar_at: { // Table of hexadecimal digits // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1246,7 +1246,7 @@ print_uchar_at: { // [38] call print_char_at // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index e5d4baccd..d30d271a5 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -236,7 +236,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -383,7 +383,7 @@ __start: { sta.z irq_raster_next // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/complex/includes/includes-1.log b/src/test/ref/complex/includes/includes-1.log index f9b16c089..e9853d55d 100644 --- a/src/test/ref/complex/includes/includes-1.log +++ b/src/test/ref/complex/includes/includes-1.log @@ -235,7 +235,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = 4 // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] + // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near strlen_from_main: jsr strlen // [2] strlen::return#2 = strlen::len#2 @@ -364,7 +364,7 @@ main: { .label __0 = 4 // strlen(STR) // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] + // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near jsr strlen // strlen(STR) // [2] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/complex/includes/includes-2.log b/src/test/ref/complex/includes/includes-2.log index ba9264981..51cbad9f1 100644 --- a/src/test/ref/complex/includes/includes-2.log +++ b/src/test/ref/complex/includes/includes-2.log @@ -164,7 +164,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] + // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near strlen_from_main: jsr strlen jmp __b1 @@ -234,7 +234,7 @@ Score: 24 main: { // strlen(STR) // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] + // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near jsr strlen // main::@1 // SCREEN [0] = (char) strlen(STR) diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 0610788ff..82f78053f 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -569,7 +569,7 @@ main: { memset_from_main: // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near lda #SCREEN @@ -585,7 +585,7 @@ main: { memset_from___b6: // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near lda #COLS @@ -866,7 +866,7 @@ main: { // [17] phi from main to memset [phi:main->memset] // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near lda #SCREEN @@ -879,7 +879,7 @@ main: { // [17] phi from main::@6 to memset [phi:main::@6->memset] // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near lda #COLS diff --git a/src/test/ref/const-bool-return-problem.log b/src/test/ref/const-bool-return-problem.log index 0c1be65c9..8825ee589 100644 --- a/src/test/ref/const-bool-return-problem.log +++ b/src/test/ref/const-bool-return-problem.log @@ -420,7 +420,7 @@ main: { __b3: // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid + // [8] call OBJ_is_solid -- call_phi_near jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 jmp __b7 @@ -467,7 +467,7 @@ OBJ_is_solid: { // OBJ_is_solid::@1 __b1: // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near tile_flag_at_from___b1: jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] @@ -612,7 +612,7 @@ main: { // OBJ_is_solid(ox,oy) // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid + // [8] call OBJ_is_solid -- call_phi_near jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 // main::@7 @@ -657,7 +657,7 @@ OBJ_is_solid: { __b1: // tile_flag_at() // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] // [17] phi OBJ_is_solid::return#3 = tile_flag_at::return#1 [phi:OBJ_is_solid::@1->OBJ_is_solid::@return#0] -- vboaa=vboc1 diff --git a/src/test/ref/const-early-identification.log b/src/test/ref/const-early-identification.log index 267852183..3a12e4591 100644 --- a/src/test/ref/const-early-identification.log +++ b/src/test/ref/const-early-identification.log @@ -206,7 +206,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -227,7 +227,7 @@ main: { // [7] *(SCREEN+2) = *main::addrA -- _deref_pbuc1=_deref_pbuc2 lda.z addrA sta SCREEN+2 - // [8] call sub + // [8] call sub -- call_phi_near jsr sub jmp __breturn // main::@return @@ -315,7 +315,7 @@ __start: { sta.z A // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -338,7 +338,7 @@ main: { lda.z addrA sta SCREEN+2 // sub() - // [8] call sub + // [8] call sub -- call_phi_near jsr sub // main::@return // } diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index c27bca22e..bcf87ce92 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -377,7 +377,7 @@ main: { // main::@2 __b2: // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] + // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near line_from___b2: jsr line jmp __b2_from___b2 @@ -405,7 +405,7 @@ line: { // line::@2 __b2: // [12] plot::x#1 = line::x#2 - // [13] call plot + // [13] call plot -- call_phi_near jsr plot jmp __b3 // line::@3 @@ -535,7 +535,7 @@ main: { __b2: // line(0, 10) // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] + // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near jsr line jmp __b2 } @@ -561,7 +561,7 @@ line: { __b2: // plot(x) // [12] plot::x#1 = line::x#2 - // [13] call plot + // [13] call plot -- call_phi_near jsr plot // line::@3 // for(byte x = x0; x<=x1; x++) diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index d169c1ccf..f950c9ac6 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -269,7 +269,7 @@ main: { // [1] call sum // [14] phi from main to sum [phi:main->sum] sum_from_main: - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near lda #'c' jsr sum // [2] sum::return#0 = sum::return#3 @@ -282,7 +282,7 @@ main: { // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near lda #'m' jsr sum // [6] sum::return#1 = sum::return#3 @@ -295,7 +295,7 @@ main: { // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near lda #'l' jsr sum // [10] sum::return#2 = sum::return#3 @@ -392,7 +392,7 @@ main: { // sum(reverse, 'c') // [1] call sum // [14] phi from main to sum [phi:main->sum] - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near lda #'c' jsr sum // sum(reverse, 'c') @@ -405,7 +405,7 @@ main: { // sum(reverse, 'm') // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near lda #'m' jsr sum // sum(reverse, 'm') @@ -418,7 +418,7 @@ main: { // sum(reverse, 'l') // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near lda #'l' jsr sum // sum(reverse, 'l') diff --git a/src/test/ref/const-volatile-problem.log b/src/test/ref/const-volatile-problem.log index 19557408a..d40481e85 100644 --- a/src/test/ref/const-volatile-problem.log +++ b/src/test/ref/const-volatile-problem.log @@ -204,7 +204,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -313,7 +313,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index b1c1bb33f..d5b216b61 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -1647,7 +1647,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] + // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls jmp __b1 @@ -1657,7 +1657,7 @@ main: { lda #GREEN sta BG_COLOR // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near test_bytes_from___b1: jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1666,7 +1666,7 @@ main: { // main::@2 __b2: // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near test_sbytes_from___b2: jsr test_sbytes jmp __breturn @@ -1679,7 +1679,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] + // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1712,7 +1712,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near lda #msg @@ -1736,7 +1736,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near lda #msg1 @@ -1760,7 +1760,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near lda #msg2 @@ -1792,7 +1792,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near lda #msg @@ -1811,7 +1811,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near lda #msg1 @@ -1830,7 +1830,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near lda #msg2 @@ -1849,7 +1849,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near lda #msg3 @@ -1868,7 +1868,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near lda #msg4 @@ -1945,7 +1945,7 @@ assert_byte: { // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] print_str_from_assert_byte: // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] __b4_from_assert_byte: @@ -1956,7 +1956,7 @@ assert_byte: { // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near lda #str @@ -1977,7 +1977,7 @@ assert_byte: { // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near lda #str2 @@ -1992,7 +1992,7 @@ assert_byte: { // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // assert_byte::@return @@ -2008,7 +2008,7 @@ assert_byte: { // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2031,7 +2031,7 @@ assert_sbyte: { // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] print_str_from_assert_sbyte: // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] __b4_from_assert_sbyte: @@ -2042,7 +2042,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near lda #str @@ -2063,7 +2063,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near lda #str2 @@ -2078,7 +2078,7 @@ assert_sbyte: { // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // assert_sbyte::@return @@ -2094,7 +2094,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2130,7 +2130,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char + // [66] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2438,7 +2438,7 @@ Score: 1783 main: { // print_cls() // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] + // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // main::@1 // *BG_COLOR = GREEN @@ -2447,13 +2447,13 @@ main: { sta BG_COLOR // test_bytes() // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // test_sbytes() // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near jsr test_sbytes // main::@return // } @@ -2465,7 +2465,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] + // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2496,7 +2496,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near lda #msg @@ -2518,7 +2518,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near lda #msg1 @@ -2540,7 +2540,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near lda #msg2 @@ -2571,7 +2571,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near lda #msg @@ -2587,7 +2587,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near lda #msg1 @@ -2603,7 +2603,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near lda #msg2 @@ -2619,7 +2619,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near lda #msg3 @@ -2635,7 +2635,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near lda #msg4 @@ -2710,7 +2710,7 @@ assert_byte: { // [36] call print_str // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] // assert_byte::@4 @@ -2718,7 +2718,7 @@ assert_byte: { // [38] call print_str // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near lda #str @@ -2735,7 +2735,7 @@ assert_byte: { // [41] call print_str // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near lda #str2 @@ -2747,7 +2747,7 @@ assert_byte: { // print_ln() // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near jsr print_ln // assert_byte::@return // } @@ -2763,7 +2763,7 @@ assert_byte: { // [46] call print_str // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2787,7 +2787,7 @@ assert_sbyte: { // [50] call print_str // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] // assert_sbyte::@4 @@ -2795,7 +2795,7 @@ assert_sbyte: { // [52] call print_str // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near lda #str @@ -2812,7 +2812,7 @@ assert_sbyte: { // [55] call print_str // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near lda #str2 @@ -2824,7 +2824,7 @@ assert_sbyte: { // print_ln() // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near jsr print_ln // assert_sbyte::@return // } @@ -2840,7 +2840,7 @@ assert_sbyte: { // [60] call print_str // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2874,7 +2874,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char + // [66] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/constref-not-literal-problem.log b/src/test/ref/constref-not-literal-problem.log index 4068dc7e4..5e11f1540 100644 --- a/src/test/ref/constref-not-literal-problem.log +++ b/src/test/ref/constref-not-literal-problem.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call copy + // [1] call copy -- call_phi_near jsr copy jmp __breturn // main::@return @@ -267,7 +267,7 @@ Score: 41 // main main: { // copy(B, A) - // [1] call copy + // [1] call copy -- call_phi_near jsr copy // main::@return // } diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 02d896823..42ef0d493 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1758,7 +1758,7 @@ main: { .label x = $f .label y = $17 // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] + // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1816,7 +1816,7 @@ main: { sta.z yw // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 + // [10] call atan2_16 -- call_phi_near jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 jmp __b6 @@ -2636,7 +2636,7 @@ main: { .label y = $17 // init_font_hex(CHARSET) // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] + // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2683,7 +2683,7 @@ main: { // word angle_w = atan2_16(xw, yw) // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 + // [10] call atan2_16 -- call_phi_near jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 // main::@6 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 9f4227d9a..827cd2778 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -2027,7 +2027,7 @@ main: { // Clear the screen by modifying the charset .label clear_char = $18 // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] + // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -2042,7 +2042,7 @@ main: { lda #toD0181_return sta D018 // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near init_angle_screen_from___b5: jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2357,7 +2357,7 @@ init_angle_screen: { sty.z yw // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 + // [49] call atan2_16 -- call_phi_near jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 jmp __b5 @@ -3059,7 +3059,7 @@ main: { .label clear_char = $18 // init_font_hex(CHARSET) // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] + // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -3070,7 +3070,7 @@ main: { sta D018 // init_angle_screen(SCREEN) // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [5] phi main::clear_char#5 = CHARSET [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -3373,7 +3373,7 @@ init_angle_screen: { // word angle_w = atan2_16(xw, yw) // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 + // [49] call atan2_16 -- call_phi_near jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 // init_angle_screen::@5 diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index 2e53e0d27..c4712c1a2 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1440,7 +1440,7 @@ main: { .label x = $c .label y = $d // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] + // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1488,7 +1488,7 @@ main: { __b2: // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 + // [8] call atan2_8 -- call_phi_near jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa @@ -2171,7 +2171,7 @@ main: { .label y = $d // init_font_hex(CHARSET) // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] + // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2207,7 +2207,7 @@ main: { // byte angle = atan2_8(x, y) // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 + // [8] call atan2_8 -- call_phi_near jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa diff --git a/src/test/ref/cstyle-decl-function.log b/src/test/ref/cstyle-decl-function.log index 85b67ab57..beb959f12 100644 --- a/src/test/ref/cstyle-decl-function.log +++ b/src/test/ref/cstyle-decl-function.log @@ -243,7 +243,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#0 = sum::return#2 @@ -258,7 +258,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near ldx #'a' jsr sum // [6] sum::return#1 = sum::return#2 @@ -353,7 +353,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 2) @@ -368,7 +368,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 12) diff --git a/src/test/ref/declared-memory-var-6.log b/src/test/ref/declared-memory-var-6.log index 5a8d4a8da..b629987ff 100644 --- a/src/test/ref/declared-memory-var-6.log +++ b/src/test/ref/declared-memory-var-6.log @@ -438,7 +438,7 @@ main: { out_from_main: // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near ldx #reg_zp_flex jsr out jmp __b1 @@ -450,7 +450,7 @@ main: { // [24] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -461,7 +461,7 @@ main: { // [24] phi from main::@2 to out [phi:main::@2->out] out_from___b2: // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near ldx #reg_mem_flex jsr out jmp __b3 @@ -473,7 +473,7 @@ main: { // [24] phi from main::@3 to out [phi:main::@3->out] out_from___b3: // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -484,7 +484,7 @@ main: { // [24] phi from main::@4 to out [phi:main::@4->out] out_from___b4: // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -496,7 +496,7 @@ main: { // [24] phi from main::@5 to out [phi:main::@5->out] out_from___b5: // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -508,7 +508,7 @@ main: { // [24] phi from main::@6 to out [phi:main::@6->out] out_from___b6: // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near ldx #default_zp_flex jsr out jmp __b7 @@ -520,7 +520,7 @@ main: { // [24] phi from main::@7 to out [phi:main::@7->out] out_from___b7: // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -531,7 +531,7 @@ main: { // [24] phi from main::@8 to out [phi:main::@8->out] out_from___b8: // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near ldx #default_mem_flex jsr out jmp __b9 @@ -543,7 +543,7 @@ main: { // [24] phi from main::@9 to out [phi:main::@9->out] out_from___b9: // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near jsr out jmp __breturn // main::@return @@ -694,7 +694,7 @@ main: { // [24] phi from main to out [phi:main->out] // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near ldx #reg_zp_flex jsr out // main::@1 @@ -704,7 +704,7 @@ main: { // [6] call out // [24] phi from main::@1 to out [phi:main::@1->out] // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -712,7 +712,7 @@ main: { // [8] call out // [24] phi from main::@2 to out [phi:main::@2->out] // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near ldx #reg_mem_flex jsr out // main::@3 @@ -722,7 +722,7 @@ main: { // [10] call out // [24] phi from main::@3 to out [phi:main::@3->out] // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -730,7 +730,7 @@ main: { // [12] call out // [24] phi from main::@4 to out [phi:main::@4->out] // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -739,7 +739,7 @@ main: { // [14] call out // [24] phi from main::@5 to out [phi:main::@5->out] // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -748,7 +748,7 @@ main: { // [16] call out // [24] phi from main::@6 to out [phi:main::@6->out] // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near ldx #default_zp_flex jsr out // main::@7 @@ -758,7 +758,7 @@ main: { // [18] call out // [24] phi from main::@7 to out [phi:main::@7->out] // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -766,7 +766,7 @@ main: { // [20] call out // [24] phi from main::@8 to out [phi:main::@8->out] // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near ldx #default_mem_flex jsr out // main::@9 @@ -776,7 +776,7 @@ main: { // [22] call out // [24] phi from main::@9 to out [phi:main::@9->out] // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near jsr out // main::@return // } diff --git a/src/test/ref/declared-memory-var-7.log b/src/test/ref/declared-memory-var-7.log index 943be5261..7718eb181 100644 --- a/src/test/ref/declared-memory-var-7.log +++ b/src/test/ref/declared-memory-var-7.log @@ -181,7 +181,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -287,7 +287,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-memory-var-8.log b/src/test/ref/declared-memory-var-8.log index f5d839898..76c66804b 100644 --- a/src/test/ref/declared-memory-var-8.log +++ b/src/test/ref/declared-memory-var-8.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -285,7 +285,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-ssa-var-0.log b/src/test/ref/declared-ssa-var-0.log index 77a968616..2f7d9e2f8 100644 --- a/src/test/ref/declared-ssa-var-0.log +++ b/src/test/ref/declared-ssa-var-0.log @@ -518,7 +518,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -791,7 +791,7 @@ __start: { sta.z idx_nssa_g // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index 099802ad4..ce1a6dbd9 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -469,7 +469,7 @@ main: { .label ch = 6 .label x = 7 // [1] call memset - // [13] phi from main to memset [phi:main->memset] + // [13] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -686,7 +686,7 @@ main: { .label x = 7 // memset(SCREEN, ' ', 1000) // [1] call memset - // [13] phi from main to memset [phi:main->memset] + // [13] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#4 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index 4d3b92685..7996b0807 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -245,7 +245,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -260,7 +260,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -358,7 +358,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -370,7 +370,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index 272e2ec42..c68e6aed2 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -225,7 +225,7 @@ main: { print_from_main: // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -240,7 +240,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -327,7 +327,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -339,7 +339,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 diff --git a/src/test/ref/ducks-array.log b/src/test/ref/ducks-array.log index 52b0efcee..246dd736f 100644 --- a/src/test/ref/ducks-array.log +++ b/src/test/ref/ducks-array.log @@ -360,7 +360,7 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout + // [1] call chrout -- call_phi_near jsr chrout jmp __b1 // main::@1 @@ -368,7 +368,7 @@ main: { // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout + // [3] call chrout -- call_phi_near jsr chrout jmp __b2 // main::@2 @@ -376,7 +376,7 @@ main: { // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout jmp __b3 // main::@3 @@ -384,7 +384,7 @@ main: { // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout + // [7] call chrout -- call_phi_near jsr chrout jmp __b4 // main::@4 @@ -392,7 +392,7 @@ main: { // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout + // [9] call chrout -- call_phi_near jsr chrout jmp __breturn // main::@return @@ -468,35 +468,35 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout + // [1] call chrout -- call_phi_near jsr chrout // main::@1 // chrout(points[0]) // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout + // [3] call chrout -- call_phi_near jsr chrout // main::@2 // chrout(points[1]) // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout // main::@3 // chrout(points[2]) // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout + // [7] call chrout -- call_phi_near jsr chrout // main::@4 // chrout(points[3]) // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout + // [9] call chrout -- call_phi_near jsr chrout // main::@return // } diff --git a/src/test/ref/ducks-loop211.log b/src/test/ref/ducks-loop211.log index 66f3d5dd8..2cfcc151f 100644 --- a/src/test/ref/ducks-loop211.log +++ b/src/test/ref/ducks-loop211.log @@ -214,7 +214,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout jmp __b2 // main::@2 @@ -320,7 +320,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout // main::@2 // ++k; diff --git a/src/test/ref/ducks-total.log b/src/test/ref/ducks-total.log index b2ef90b84..731814936 100644 --- a/src/test/ref/ducks-total.log +++ b/src/test/ref/ducks-total.log @@ -9588,14 +9588,14 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 lda #0 sta.z m - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [10] call main + // [10] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -9637,7 +9637,7 @@ conio_c64_init: { // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -9700,7 +9700,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout + // [21] call chrout -- call_phi_near // border and black paper jsr chrout jmp __b50 @@ -9709,7 +9709,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout + // [23] call chrout -- call_phi_near //Lock UpperCase to Lowercase key jsr chrout jmp __b51 @@ -9751,7 +9751,7 @@ main: { // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] clear_screen_from___b3: - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near lda #$20 sta.z clear_screen.n jsr clear_screen @@ -9764,7 +9764,7 @@ main: { // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] textcolor_from___b52: - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -9776,7 +9776,7 @@ main: { // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] cputs_from___b53: - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near lda #intro @@ -9791,7 +9791,7 @@ main: { // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] textcolor_from___b54: - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -9803,7 +9803,7 @@ main: { // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] cputs_from___b55: - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near lda #levels @@ -9818,7 +9818,7 @@ main: { // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] textcolor_from___b56: - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -9830,7 +9830,7 @@ main: { // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] cputs_from___b57: - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near lda #foot @@ -9858,7 +9858,7 @@ main: { // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] clear_screen_from___b5: - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -9871,7 +9871,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout + // [47] call chrout -- call_phi_near // Graphic mode jsr chrout jmp __b59 @@ -9880,7 +9880,7 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout + // [49] call chrout -- call_phi_near jsr chrout jmp __b60 // main::@60 @@ -9888,7 +9888,7 @@ main: { // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout + // [51] call chrout -- call_phi_near jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] __b6_from___b60: @@ -9912,7 +9912,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout + // [55] call chrout -- call_phi_near // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout jmp __b61 @@ -9927,7 +9927,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout + // [59] call chrout -- call_phi_near //last brick from last line (#23) to avoid scrolling jsr chrout jmp __b62 @@ -9975,7 +9975,7 @@ main: { // [345] phi from main::@13 to random [phi:main::@13->random] random_from___b13: // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near jsr random jmp __b71 // main::@71 @@ -10018,7 +10018,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout + // [72] call chrout -- call_phi_near // Duck #1 jsr chrout jmp __b65 @@ -10027,7 +10027,7 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout + // [74] call chrout -- call_phi_near jsr chrout jmp __b66 // main::@66 @@ -10035,7 +10035,7 @@ main: { // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout + // [76] call chrout -- call_phi_near jsr chrout jmp __b67 // main::@67 @@ -10043,7 +10043,7 @@ main: { // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout + // [78] call chrout -- call_phi_near jsr chrout jmp __b68 // main::@68 @@ -10051,7 +10051,7 @@ main: { // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout + // [80] call chrout -- call_phi_near jsr chrout jmp __b69 // main::@69 @@ -10059,7 +10059,7 @@ main: { // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout + // [82] call chrout -- call_phi_near jsr chrout jmp __b70 // main::@70 @@ -10089,7 +10089,7 @@ main: { // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] write_score_from___b19: - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near lda #<0 sta.z score lda #>0 @@ -10101,7 +10101,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout + // [89] call chrout -- call_phi_near // Write Score (yellow) jsr chrout jmp __b76 @@ -10110,7 +10110,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout + // [91] call chrout -- call_phi_near jsr chrout jmp __b77 // main::@77 @@ -10163,7 +10163,7 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout + // [97] call chrout -- call_phi_near jsr chrout jmp __b79 // main::@79 @@ -10171,7 +10171,7 @@ main: { // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout + // [99] call chrout -- call_phi_near jsr chrout jmp __b80 // main::@80 @@ -10179,7 +10179,7 @@ main: { // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout + // [101] call chrout -- call_phi_near jsr chrout jmp __b81 // main::@81 @@ -10201,7 +10201,7 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout + // [105] call chrout -- call_phi_near jsr chrout jmp __b82 // main::@82 @@ -10209,7 +10209,7 @@ main: { // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout + // [107] call chrout -- call_phi_near jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b24_from___b103: @@ -10229,7 +10229,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -10247,7 +10247,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -10340,7 +10340,7 @@ main: { jmp __b25 // main::@25 __b25: - // [123] call chrono_restart + // [123] call chrono_restart -- call_phi_near jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] __b26_from___b25: @@ -10384,7 +10384,7 @@ main: { // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] write_score_from___b28: - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near jsr write_score jmp __b86 // main::@86 @@ -10396,7 +10396,7 @@ main: { // [381] phi from main::@86 to wait [phi:main::@86->wait] wait_from___b86: // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near lda #$14 sta.z wait.n jsr wait @@ -10485,7 +10485,7 @@ main: { // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] clear_screen_from___b44: - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -10498,7 +10498,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout + // [148] call chrout -- call_phi_near jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] __b92_from___b91: @@ -10509,7 +10509,7 @@ main: { // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] textcolor_from___b92: - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -10521,7 +10521,7 @@ main: { // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] cputs_from___b93: - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near lda #game_over @@ -10536,7 +10536,7 @@ main: { // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] textcolor_from___b94: - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -10548,7 +10548,7 @@ main: { // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] cputs_from___b95: - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near lda #your_score @@ -10562,7 +10562,7 @@ main: { // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] cputs_from___b96: - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near lda #buffer @@ -10577,7 +10577,7 @@ main: { // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] textcolor_from___b97: - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near lda #3 sta.z textcolor.color jsr textcolor @@ -10589,7 +10589,7 @@ main: { // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] cputs_from___b98: - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near lda #high_score @@ -10630,7 +10630,7 @@ main: { // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] utoa_from___b46: - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] __b100_from___b46: @@ -10640,7 +10640,7 @@ main: { // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] cputs_from___b100: - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near lda #buffer @@ -10655,7 +10655,7 @@ main: { // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] textcolor_from___b101: - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -10667,7 +10667,7 @@ main: { // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] cputs_from___b102: - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near lda #play_again @@ -10728,7 +10728,7 @@ main: { jmp __b27 // main::@27 __b27: - // [182] call read_chrono + // [182] call read_chrono -- call_phi_near jsr read_chrono jmp __b85 // main::@85 @@ -10904,7 +10904,7 @@ main: { // [381] phi from main::@42 to wait [phi:main::@42->wait] wait_from___b42: // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -11083,7 +11083,7 @@ main: { // [381] phi from main::@36 to wait [phi:main::@36->wait] wait_from___b36: // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -11182,7 +11182,7 @@ main: { // [381] phi from main::@89 to wait [phi:main::@89->wait] wait_from___b89: // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -11305,7 +11305,7 @@ main: { // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] write_score_from___b34: - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] __b88_from___b34: @@ -11316,7 +11316,7 @@ main: { // [381] phi from main::@88 to wait [phi:main::@88->wait] wait_from___b88: // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -11338,7 +11338,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout + // [274] call chrout -- call_phi_near jsr chrout jmp __b24_from___b23 // main::@21 @@ -11347,7 +11347,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout + // [276] call chrout -- call_phi_near jsr chrout jmp __b78 // main::@78 @@ -11364,7 +11364,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout + // [279] call chrout -- call_phi_near jsr chrout jmp __b74 // main::@74 @@ -11393,7 +11393,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout + // [284] call chrout -- call_phi_near jsr chrout jmp __b73 // main::@73 @@ -11429,7 +11429,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout + // [289] call chrout -- call_phi_near jsr chrout jmp __b72 // main::@72 @@ -11445,7 +11445,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout + // [292] call chrout -- call_phi_near jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] __b9_from___b7: @@ -11465,7 +11465,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout + // [296] call chrout -- call_phi_near jsr chrout jmp __b64 // main::@64 @@ -11482,7 +11482,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout + // [299] call chrout -- call_phi_near jsr chrout jmp __b63 // main::@63 @@ -11661,7 +11661,7 @@ clear_screen: { // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] gotoxy_from___b3: - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near lda #0 sta.z gotoxy.y jsr gotoxy @@ -11671,7 +11671,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout + // [327] call chrout -- call_phi_near jsr chrout jmp __breturn // clear_screen::@return @@ -11761,7 +11761,7 @@ cputs: { // cputs::@2 __b2: // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc + // [344] call cputc -- call_phi_near jsr cputc jmp __b1_from___b2 } @@ -11850,7 +11850,7 @@ write_score: { // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] utoa_from___b7: - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near jsr utoa jmp __b11 // write_score::@11 @@ -11899,7 +11899,7 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout + // [367] call chrout -- call_phi_near jsr chrout jmp __b12 // write_score::@12 @@ -11907,7 +11907,7 @@ write_score: { // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout + // [369] call chrout -- call_phi_near jsr chrout jmp __b13 // write_score::@13 @@ -11936,7 +11936,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout + // [375] call chrout -- call_phi_near jsr chrout jmp __b14 // write_score::@14 @@ -12138,7 +12138,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [408] utoa_append::return#0 = utoa_append::value#2 @@ -12181,7 +12181,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u + // [414] call div16u8u -- call_phi_near jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -12256,7 +12256,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [428] call cputln + // [428] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -12268,7 +12268,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [431] call cputln + // [431] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -12355,7 +12355,7 @@ div16u8u: { // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] divr8u_from_div16u8u: // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near lda #0 sta.z divr8u.rem jsr divr8u @@ -12374,7 +12374,7 @@ div16u8u: { // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] divr8u_from___b1: // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near jsr divr8u // [446] divr8u::return#3 = divr8u::return#0 jmp __b2 @@ -12416,7 +12416,7 @@ cputln: { sta.z conio_cursor_x // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [454] call cscroll + // [454] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -12537,7 +12537,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -12556,7 +12556,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -12573,7 +12573,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12589,7 +12589,7 @@ cscroll: { // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -13931,11 +13931,11 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 sta.z m // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [10] call main + // [10] call main -- call_phi_near jsr main // __start::@return // [11] return @@ -13969,7 +13969,7 @@ conio_c64_init: { // [16] gotoxy::y#2 = conio_c64_init::line#2 // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -14033,7 +14033,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout + // [21] call chrout -- call_phi_near // border and black paper jsr chrout // main::@50 @@ -14041,7 +14041,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout + // [23] call chrout -- call_phi_near //Lock UpperCase to Lowercase key jsr chrout // main::@51 @@ -14077,7 +14077,7 @@ main: { // clear_screen(32,0) // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near lda #$20 sta.z clear_screen.n jsr clear_screen @@ -14087,7 +14087,7 @@ main: { // [29] call textcolor // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -14096,7 +14096,7 @@ main: { // cputs(intro) // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near lda #intro @@ -14108,7 +14108,7 @@ main: { // [33] call textcolor // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -14117,7 +14117,7 @@ main: { // cputs(levels) // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near lda #levels @@ -14129,7 +14129,7 @@ main: { // [37] call textcolor // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -14138,7 +14138,7 @@ main: { // cputs(foot) // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near lda #foot @@ -14165,7 +14165,7 @@ main: { // [44] call clear_screen // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -14178,7 +14178,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout + // [47] call chrout -- call_phi_near // Graphic mode jsr chrout // main::@59 @@ -14186,14 +14186,14 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout + // [49] call chrout -- call_phi_near jsr chrout // main::@60 // chrout(down) // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout + // [51] call chrout -- call_phi_near jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] // [52] phi n#89 = n#109 [phi:main::@60->main::@6#0] -- register_copy @@ -14217,7 +14217,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout + // [55] call chrout -- call_phi_near // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout // main::@61 @@ -14232,7 +14232,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout + // [59] call chrout -- call_phi_near //last brick from last line (#23) to avoid scrolling jsr chrout // main::@62 @@ -14277,7 +14277,7 @@ main: { // Write differential random bricks depending on 'l' level choosen // [345] phi from main::@13 to random [phi:main::@13->random] // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near jsr random // main::@71 // z+m @@ -14322,7 +14322,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout + // [72] call chrout -- call_phi_near // Duck #1 jsr chrout // main::@65 @@ -14330,35 +14330,35 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout + // [74] call chrout -- call_phi_near jsr chrout // main::@66 // chrout(80) // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout + // [76] call chrout -- call_phi_near jsr chrout // main::@67 // chrout(84) // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout + // [78] call chrout -- call_phi_near jsr chrout // main::@68 // chrout(83) // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout + // [80] call chrout -- call_phi_near jsr chrout // main::@69 // chrout(58) // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout + // [82] call chrout -- call_phi_near jsr chrout // main::@70 // POKE @@ -14385,7 +14385,7 @@ main: { // [87] call write_score // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near lda #<0 sta.z score sta.z score+1 @@ -14395,7 +14395,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout + // [89] call chrout -- call_phi_near // Write Score (yellow) jsr chrout // main::@76 @@ -14403,7 +14403,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout + // [91] call chrout -- call_phi_near jsr chrout // main::@77 // POKE @@ -14453,21 +14453,21 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout + // [97] call chrout -- call_phi_near jsr chrout // main::@79 // chrout(green) // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout + // [99] call chrout -- call_phi_near jsr chrout // main::@80 // chrout(reverse_on) // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout + // [101] call chrout -- call_phi_near jsr chrout // main::@81 // POKE @@ -14490,14 +14490,14 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout + // [105] call chrout -- call_phi_near jsr chrout // main::@82 // chrout(48) // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout + // [107] call chrout -- call_phi_near jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b11: @@ -14509,7 +14509,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -14526,7 +14526,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -14607,7 +14607,7 @@ main: { // [122] phi from main::@103 to main::@25 [phi:main::@103->main::@25] // main::@25 // chrono_restart() - // [123] call chrono_restart + // [123] call chrono_restart -- call_phi_near jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] // [124] phi n#20 = n#52 [phi:main::@25->main::@26#0] -- register_copy @@ -14651,7 +14651,7 @@ main: { // write_score() // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near jsr write_score // main::@86 // POKE @@ -14662,7 +14662,7 @@ main: { // [130] call wait // [381] phi from main::@86 to wait [phi:main::@86->wait] // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near lda #$14 sta.z wait.n jsr wait @@ -14747,7 +14747,7 @@ main: { // [145] call clear_screen // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -14760,7 +14760,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout + // [148] call chrout -- call_phi_near jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] // main::@92 @@ -14768,7 +14768,7 @@ main: { // [150] call textcolor // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -14777,7 +14777,7 @@ main: { // cputs(game_over) // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near lda #game_over @@ -14789,7 +14789,7 @@ main: { // [154] call textcolor // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -14798,7 +14798,7 @@ main: { // cputs(your_score) // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near lda #your_score @@ -14809,7 +14809,7 @@ main: { // cputs(buffer) // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near lda #buffer @@ -14821,7 +14821,7 @@ main: { // [160] call textcolor // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near lda #3 sta.z textcolor.color jsr textcolor @@ -14830,7 +14830,7 @@ main: { // cputs(high_score) // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near lda #high_score @@ -14867,14 +14867,14 @@ main: { sta.z utoa.value+1 // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] // main::@100 // cputs(buffer) // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near lda #buffer @@ -14886,7 +14886,7 @@ main: { // [171] call textcolor // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -14895,7 +14895,7 @@ main: { // cputs(play_again) // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near lda #play_again @@ -14951,7 +14951,7 @@ main: { // main::@27 __b27: // read_chrono() - // [182] call read_chrono + // [182] call read_chrono -- call_phi_near jsr read_chrono // main::@85 // m=PEEK @@ -15123,7 +15123,7 @@ main: { // [212] call wait // [381] phi from main::@42 to wait [phi:main::@42->wait] // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -15280,7 +15280,7 @@ main: { // Clear peephole if there is not bricks contact // [381] phi from main::@36 to wait [phi:main::@36->wait] // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -15371,7 +15371,7 @@ main: { // [254] call wait // [381] phi from main::@89 to wait [phi:main::@89->wait] // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -15494,7 +15494,7 @@ main: { // write_score() // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] // main::@88 @@ -15502,7 +15502,7 @@ main: { // [271] call wait // [381] phi from main::@88 to wait [phi:main::@88->wait] // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -15525,7 +15525,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout + // [274] call chrout -- call_phi_near jsr chrout jmp __b11 // main::@21 @@ -15535,7 +15535,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout + // [276] call chrout -- call_phi_near jsr chrout // main::@78 // for (j=0; j<5; j++) @@ -15551,7 +15551,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout + // [279] call chrout -- call_phi_near jsr chrout // main::@74 // for (j=0; j<4; ++j) @@ -15577,7 +15577,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout + // [284] call chrout -- call_phi_near jsr chrout // main::@73 // z+m @@ -15618,7 +15618,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout + // [289] call chrout -- call_phi_near jsr chrout // main::@72 // for (j=1; j<=m; ++j) @@ -15633,7 +15633,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout + // [292] call chrout -- call_phi_near jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] // [293] phi n#101 = 2 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 @@ -15651,7 +15651,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout + // [296] call chrout -- call_phi_near jsr chrout // main::@64 // for (k=1;k<22;k++) @@ -15667,7 +15667,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout + // [299] call chrout -- call_phi_near jsr chrout // main::@63 // for(n=2;n<22;++n) @@ -15839,7 +15839,7 @@ clear_screen: { // [325] call gotoxy // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near lda #0 sta.z gotoxy.y jsr gotoxy @@ -15848,7 +15848,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout + // [327] call chrout -- call_phi_near jsr chrout // clear_screen::@return // } @@ -15935,7 +15935,7 @@ cputs: { __b2: // cputc(c) // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc + // [344] call cputc -- call_phi_near jsr cputc jmp __b1 } @@ -16014,7 +16014,7 @@ write_score: { // [358] call utoa // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near jsr utoa // write_score::@11 // if (score>9) @@ -16063,14 +16063,14 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout + // [367] call chrout -- call_phi_near jsr chrout // write_score::@12 // chrout(home) // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout + // [369] call chrout -- call_phi_near jsr chrout // write_score::@13 // POKE @@ -16099,7 +16099,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout + // [375] call chrout -- call_phi_near jsr chrout // write_score::@14 // for (m=0;m<4;m++) @@ -16295,7 +16295,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [408] utoa_append::return#0 = utoa_append::value#2 @@ -16340,7 +16340,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u + // [414] call div16u8u -- call_phi_near jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -16413,7 +16413,7 @@ cputc: { // [427] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [428] call cputln + // [428] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -16424,7 +16424,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [431] call cputln + // [431] call cputln -- call_phi_near jsr cputln rts } @@ -16509,7 +16509,7 @@ div16u8u: { // [440] call divr8u // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near lda #0 sta.z divr8u.rem jsr divr8u @@ -16527,7 +16527,7 @@ div16u8u: { // [445] call divr8u // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near jsr divr8u // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) // [446] divr8u::return#3 = divr8u::return#0 @@ -16573,7 +16573,7 @@ cputln: { // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [454] call cscroll + // [454] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -16684,7 +16684,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -16700,7 +16700,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -16714,7 +16714,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -16728,7 +16728,7 @@ cscroll: { // [480] call memset // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/emptyblock-error.log b/src/test/ref/emptyblock-error.log index 94603b9c6..e0cecc608 100644 --- a/src/test/ref/emptyblock-error.log +++ b/src/test/ref/emptyblock-error.log @@ -210,7 +210,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near menu_from___b1: jsr menu jmp __b1_from___b1 @@ -223,7 +223,7 @@ menu: { // menu::@1 __b1: // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near mode_from___b1: jsr mode jmp __breturn @@ -301,7 +301,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near jsr menu jmp __b1 } @@ -311,7 +311,7 @@ menu: { // menu::@1 // mode() // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near jsr mode // menu::@return // } diff --git a/src/test/ref/enum-5.log b/src/test/ref/enum-5.log index de8d812af..22495f37d 100644 --- a/src/test/ref/enum-5.log +++ b/src/test/ref/enum-5.log @@ -120,7 +120,7 @@ main: { // [0] *main::SCREEN = main::ON -- _deref_pbuc1=vbuc2 lda #ON sta SCREEN - // [1] call test + // [1] call test -- call_phi_near jsr test jmp __breturn // main::@return @@ -186,7 +186,7 @@ main: { lda #ON sta SCREEN // test() - // [1] call test + // [1] call test -- call_phi_near jsr test // main::@return // } diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index 1fad1e5a5..2f5eec06d 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -1274,7 +1274,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] + // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1298,7 +1298,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1318,7 +1318,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1338,7 +1338,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1358,7 +1358,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1378,7 +1378,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1398,7 +1398,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near lda #$77 sta.z print_euclid.a jsr print_euclid @@ -1412,7 +1412,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] + // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1432,7 +1432,7 @@ print_euclid: { // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] print_uchar_from_print_euclid: // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] __b1_from_print_euclid: @@ -1443,7 +1443,7 @@ print_euclid: { // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b2 @@ -1455,7 +1455,7 @@ print_euclid: { // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] print_uchar_from___b2: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] __b3_from___b2: @@ -1466,7 +1466,7 @@ print_euclid: { // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b4 @@ -1476,7 +1476,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near euclid_from___b4: jsr euclid // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -1490,7 +1490,7 @@ print_euclid: { // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] print_uchar_from___b5: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] __b6_from___b5: @@ -1498,7 +1498,7 @@ print_euclid: { // print_euclid::@6 __b6: // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near print_ln_from___b6: jsr print_ln jmp __breturn @@ -1572,7 +1572,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1586,7 +1586,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1885,7 +1885,7 @@ Score: 1607 main: { // print_cls() // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] + // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1905,7 +1905,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1923,7 +1923,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1941,7 +1941,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1959,7 +1959,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1977,7 +1977,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1995,7 +1995,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near lda #$77 sta.z print_euclid.a jsr print_euclid @@ -2009,7 +2009,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] + // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2027,7 +2027,7 @@ print_euclid: { // [20] call print_uchar // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] // print_euclid::@1 @@ -2035,7 +2035,7 @@ print_euclid: { // [22] call print_char // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near lda #' ' jsr print_char // print_euclid::@2 @@ -2045,7 +2045,7 @@ print_euclid: { // [24] call print_uchar // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] // print_euclid::@3 @@ -2053,7 +2053,7 @@ print_euclid: { // [26] call print_char // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // print_euclid::@4 @@ -2062,7 +2062,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near jsr euclid // euclid(a,b) // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -2074,13 +2074,13 @@ print_euclid: { // [32] call print_uchar // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] // print_euclid::@6 // print_ln() // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near jsr print_ln // print_euclid::@return // } @@ -2152,7 +2152,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2165,7 +2165,7 @@ print_uchar: { // [48] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index 4bd995818..697c007eb 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -499,7 +499,7 @@ main: { euclid_from_main: // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near lda #$80 sta.z euclid.a jsr euclid @@ -516,7 +516,7 @@ main: { euclid_from___b1: // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near lda #$a9 sta.z euclid.a jsr euclid @@ -533,7 +533,7 @@ main: { euclid_from___b2: // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near lda #$ff sta.z euclid.a jsr euclid @@ -550,7 +550,7 @@ main: { euclid_from___b3: // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near lda #$63 sta.z euclid.a jsr euclid @@ -705,7 +705,7 @@ main: { // [18] phi from main to euclid [phi:main->euclid] // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near lda #$80 sta.z euclid.a jsr euclid @@ -722,7 +722,7 @@ main: { // [18] phi from main::@1 to euclid [phi:main::@1->euclid] // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near lda #$a9 sta.z euclid.a jsr euclid @@ -739,7 +739,7 @@ main: { // [18] phi from main::@2 to euclid [phi:main::@2->euclid] // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near lda #$ff sta.z euclid.a jsr euclid @@ -756,7 +756,7 @@ main: { // [18] phi from main::@3 to euclid [phi:main::@3->euclid] // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near lda #$63 sta.z euclid.a jsr euclid diff --git a/src/test/ref/examples/atari2600/atari2600-sprites.log b/src/test/ref/examples/atari2600/atari2600-sprites.log index 21d78081a..b2b4eda99 100644 --- a/src/test/ref/examples/atari2600/atari2600-sprites.log +++ b/src/test/ref/examples/atari2600/atari2600-sprites.log @@ -869,7 +869,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1279,7 +1279,7 @@ __start: { sta.z p0_xpos // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/3d/perspective.log b/src/test/ref/examples/c64/3d/perspective.log index 75d6e8d72..0e9259487 100644 --- a/src/test/ref/examples/c64/3d/perspective.log +++ b/src/test/ref/examples/c64/3d/perspective.log @@ -1781,7 +1781,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1794,7 +1794,7 @@ main: { // asm { sei } sei // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] + // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near mulf_init_from_main: jsr mulf_init jmp __b1 @@ -1811,7 +1811,7 @@ main: { lda #>mulf_sqr2 sta.z psp2+1 // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near print_cls_from___b1: jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1820,7 +1820,7 @@ main: { // main::@2 __b2: // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near do_perspective_from___b2: jsr do_perspective jmp __breturn @@ -1926,7 +1926,7 @@ mulf_init: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] + // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1949,7 +1949,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near lda #str @@ -1963,7 +1963,7 @@ do_perspective: { // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] print_schar_from___b1: - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -1975,7 +1975,7 @@ do_perspective: { // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] print_str_from___b2: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near lda #str1 @@ -1989,7 +1989,7 @@ do_perspective: { // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] print_schar_from___b3: - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2001,7 +2001,7 @@ do_perspective: { // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] print_str_from___b4: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near lda #str1 @@ -2015,7 +2015,7 @@ do_perspective: { // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] print_schar_from___b5: - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2027,7 +2027,7 @@ do_perspective: { // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] print_str_from___b6: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near lda #str3 @@ -2038,7 +2038,7 @@ do_perspective: { jmp __b7 // do_perspective::@7 __b7: - // [53] call perspective + // [53] call perspective -- call_phi_near jsr perspective jmp __b8 // do_perspective::@8 @@ -2049,7 +2049,7 @@ do_perspective: { // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] print_uchar_from___b8: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] __b9_from___b8: @@ -2060,7 +2060,7 @@ do_perspective: { // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] print_str_from___b9: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near lda #str1 @@ -2075,7 +2075,7 @@ do_perspective: { // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] print_uchar_from___b10: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] __b11_from___b10: @@ -2086,7 +2086,7 @@ do_perspective: { // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] print_str_from___b11: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near lda #str5 @@ -2098,7 +2098,7 @@ do_perspective: { // do_perspective::@12 __b12: // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near print_ln_from___b12: jsr print_ln jmp __breturn @@ -2196,7 +2196,7 @@ print_str: { // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2224,7 +2224,7 @@ print_schar: { // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] print_char_from___b3: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -2239,7 +2239,7 @@ print_schar: { // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_schar::@return @@ -2255,7 +2255,7 @@ print_schar: { // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -2327,7 +2327,7 @@ print_uchar: { // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2341,7 +2341,7 @@ print_uchar: { // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2772,7 +2772,7 @@ __start: { sta.z psp2+1 // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -2785,7 +2785,7 @@ main: { sei // mulf_init() // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] + // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near jsr mulf_init // main::@1 // psp1 = (unsigned int)mulf_sqr1 @@ -2802,13 +2802,13 @@ main: { sta.z psp2+1 // print_cls() // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // do_perspective($39, -$47, $36) // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near jsr do_perspective // main::@return // } @@ -2914,7 +2914,7 @@ mulf_init: { print_cls: { // memset(print_screen, ' ', 1000) // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] + // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2935,7 +2935,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near lda #str @@ -2946,7 +2946,7 @@ do_perspective: { // print_schar(x) // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -2955,7 +2955,7 @@ do_perspective: { // [43] call print_str // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near lda #str1 @@ -2966,7 +2966,7 @@ do_perspective: { // print_schar(y) // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2975,7 +2975,7 @@ do_perspective: { // [47] call print_str // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near lda #str1 @@ -2986,7 +2986,7 @@ do_perspective: { // print_schar(z) // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2995,7 +2995,7 @@ do_perspective: { // [51] call print_str // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near lda #str3 @@ -3004,7 +3004,7 @@ do_perspective: { // [52] phi from do_perspective::@6 to do_perspective::@7 [phi:do_perspective::@6->do_perspective::@7] // do_perspective::@7 // perspective(x, y, z) - // [53] call perspective + // [53] call perspective -- call_phi_near jsr perspective // do_perspective::@8 // print_uchar((char)xr) @@ -3013,7 +3013,7 @@ do_perspective: { // [55] call print_uchar // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] // do_perspective::@9 @@ -3021,7 +3021,7 @@ do_perspective: { // [57] call print_str // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near lda #str1 @@ -3034,7 +3034,7 @@ do_perspective: { // [59] call print_uchar // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] // do_perspective::@11 @@ -3042,7 +3042,7 @@ do_perspective: { // [61] call print_str // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near lda #str5 @@ -3052,7 +3052,7 @@ do_perspective: { // do_perspective::@12 // print_ln() // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near jsr print_ln // do_perspective::@return // } @@ -3144,7 +3144,7 @@ print_str: { // [76] call print_char // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3169,7 +3169,7 @@ print_schar: { // [81] call print_char // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -3181,7 +3181,7 @@ print_schar: { // [84] call print_uchar // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near jsr print_uchar // print_schar::@return // } @@ -3194,7 +3194,7 @@ print_schar: { // [87] call print_char // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_schar::@4 @@ -3268,7 +3268,7 @@ print_uchar: { // Table of hexadecimal digits // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3281,7 +3281,7 @@ print_uchar: { // [100] call print_char // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log index 78e8ae48d..8995c17ed 100644 --- a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log @@ -2379,7 +2379,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] + // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2388,7 +2388,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2397,7 +2397,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near init_screen_from___b3: jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -2407,7 +2407,7 @@ main: { // main::@1 __b1: // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] + // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near lines_from___b1: jsr lines jmp __b1_from___b1 @@ -2540,7 +2540,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2561,7 +2561,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2660,7 +2660,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line + // [52] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b3 // lines::@3 @@ -2757,7 +2757,7 @@ bitmap_line: { // [64] call abs_u16 // [114] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [65] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2779,7 +2779,7 @@ bitmap_line: { // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // [69] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2811,7 +2811,7 @@ bitmap_line: { // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [75] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2833,7 +2833,7 @@ bitmap_line: { // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [79] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2876,7 +2876,7 @@ bitmap_line: { // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2955,7 +2955,7 @@ bitmap_line: { // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2988,7 +2988,7 @@ bitmap_line: { // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3062,7 +3062,7 @@ bitmap_line: { // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn } @@ -3595,26 +3595,26 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] + // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 __b1: // lines() // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] + // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near jsr lines jmp __b1 } @@ -3738,7 +3738,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3756,7 +3756,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3849,7 +3849,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line + // [52] call bitmap_line -- call_phi_near jsr bitmap_line // lines::@3 // for(char l=0; labs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [65] abs_u16::return#0 = abs_u16::return#4 @@ -3965,7 +3965,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [69] abs_u16::return#1 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [75] sgn_u16::return#0 = sgn_u16::return#4 @@ -4017,7 +4017,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [79] sgn_u16::return#1 = sgn_u16::return#4 @@ -4056,7 +4056,7 @@ bitmap_line: { // [86] call bitmap_plot // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4130,7 +4130,7 @@ bitmap_line: { // [97] call bitmap_plot // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -4160,7 +4160,7 @@ bitmap_line: { // [103] call bitmap_plot // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4232,7 +4232,7 @@ bitmap_line: { // [113] call bitmap_plot // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot rts } diff --git a/src/test/ref/examples/c64/crunching/test-byteboozer.log b/src/test/ref/examples/c64/crunching/test-byteboozer.log index 7d5cb9d8f..d603107b2 100644 --- a/src/test/ref/examples/c64/crunching/test-byteboozer.log +++ b/src/test/ref/examples/c64/crunching/test-byteboozer.log @@ -281,7 +281,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch + // [1] call byteboozer_decrunch -- call_phi_near // Decrunch sprite file into memory jsr byteboozer_decrunch jmp __b2 @@ -445,7 +445,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch + // [1] call byteboozer_decrunch -- call_phi_near // Decrunch sprite file into memory jsr byteboozer_decrunch // main::@2 diff --git a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log index 6bb624ab9..4b8b3bda8 100644 --- a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log @@ -1327,7 +1327,7 @@ main: { .label i = $f .label at_line = $d // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] + // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near init_screen_from_main: jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1361,7 +1361,7 @@ main: { // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] print_schar_at_from___b1: // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near jsr print_schar_at jmp __b5 // main::@5 @@ -1419,7 +1419,7 @@ main: { // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] print_schar_at_from___b2: // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near jsr print_schar_at jmp __b6 // main::@6 @@ -1459,7 +1459,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 + // [19] call fmul8 -- call_phi_near jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 jmp __b7 @@ -1477,7 +1477,7 @@ main: { // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] print_schar_at_from___b7: // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near jsr print_schar_at jmp __b8 // main::@8 @@ -1508,7 +1508,7 @@ init_screen: { .const WHITE = 1 .label COLS = 2 // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near print_cls_from_init_screen: jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] @@ -1599,7 +1599,7 @@ print_schar_at: { // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] print_char_at_from___b3: // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -1615,7 +1615,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at + // [52] call print_uchar_at -- call_phi_near jsr print_uchar_at jmp __breturn // print_schar_at::@return @@ -1629,7 +1629,7 @@ print_schar_at: { // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near ldx #'-' jsr print_char_at jmp __b4 @@ -1677,7 +1677,7 @@ fmul8: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] + // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1722,7 +1722,7 @@ print_uchar_at: { // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -1742,7 +1742,7 @@ print_uchar_at: { // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -2072,7 +2072,7 @@ main: { .label at_line = $d // init_screen() // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] + // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::at#4 = (char *) 1024+4 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2101,7 +2101,7 @@ main: { // [5] call print_schar_at // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near jsr print_schar_at // main::@5 // at += 4 @@ -2156,7 +2156,7 @@ main: { // [13] call print_schar_at // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near jsr print_schar_at // main::@6 // [14] main::at#12 = main::at#2 -- pbuz1=pbuz2 @@ -2192,7 +2192,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 + // [19] call fmul8 -- call_phi_near jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 // main::@7 @@ -2208,7 +2208,7 @@ main: { // [24] call print_schar_at // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near jsr print_schar_at // main::@8 // for(char j: 0..8) @@ -2236,7 +2236,7 @@ init_screen: { .label COLS = 2 // print_cls() // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] // [32] phi init_screen::l#2 = 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1 @@ -2321,7 +2321,7 @@ print_schar_at: { // [48] call print_char_at // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -2335,7 +2335,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at + // [52] call print_uchar_at -- call_phi_near jsr print_uchar_at // print_schar_at::@return // } @@ -2348,7 +2348,7 @@ print_schar_at: { // [55] call print_char_at // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near ldx #'-' jsr print_char_at // print_schar_at::@4 @@ -2397,7 +2397,7 @@ fmul8: { print_cls: { // memset(print_screen, ' ', 1000) // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] + // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2441,7 +2441,7 @@ print_uchar_at: { // Table of hexadecimal digits // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@1 // b&$f @@ -2460,7 +2460,7 @@ print_uchar_at: { // [75] call print_char_at // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/examples/c64/fire/fire.log b/src/test/ref/examples/c64/fire/fire.log index 04aa6b997..e59bb1d91 100644 --- a/src/test/ref/examples/c64/fire/fire.log +++ b/src/test/ref/examples/c64/fire/fire.log @@ -1695,7 +1695,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -1711,7 +1711,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1727,7 +1727,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1743,7 +1743,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near ldx #YELLOW jsr fillscreen jmp sid_rnd_init1 @@ -1763,7 +1763,7 @@ main: { // main::@2 __b2: // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near makecharset_from___b2: jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] @@ -1775,7 +1775,7 @@ main: { // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] fire_from___b1: - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near lda #SCREEN1 @@ -1795,7 +1795,7 @@ main: { // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] fire_from___b3: - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near lda #SCREEN2 @@ -2546,7 +2546,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -2559,7 +2559,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2572,7 +2572,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2585,7 +2585,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near ldx #YELLOW jsr fillscreen // main::sid_rnd_init1 @@ -2603,7 +2603,7 @@ main: { // main::@2 // makecharset(CHARSET) // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] // main::@1 @@ -2611,7 +2611,7 @@ main: { // fire(SCREEN1) // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near lda #SCREEN1 @@ -2627,7 +2627,7 @@ main: { // fire(SCREEN2) // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near lda #SCREEN2 diff --git a/src/test/ref/examples/c64/font-2x2/font-2x2.log b/src/test/ref/examples/c64/font-2x2/font-2x2.log index 54e8fc78d..610d18dbd 100644 --- a/src/test/ref/examples/c64/font-2x2/font-2x2.log +++ b/src/test/ref/examples/c64/font-2x2/font-2x2.log @@ -2350,7 +2350,7 @@ main: { lda #PROCPORT_RAM_CHARROM sta.z PROCPORT // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] + // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near font_2x2_from_main: jsr font_2x2 jmp __b6 @@ -2363,7 +2363,7 @@ main: { cli // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near font_compress_from___b6: jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] @@ -2382,7 +2382,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] + // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near memset_from___b5: jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2420,7 +2420,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show + // [15] call show -- call_phi_near jsr show jmp __b7 // main::@7 @@ -2735,7 +2735,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near font_find_from___b1: jsr font_find // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx @@ -3428,7 +3428,7 @@ main: { sta.z PROCPORT // font_2x2(CHARGEN, FONT_ORIGINAL) // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] + // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near jsr font_2x2 // main::@6 // *PROCPORT = PROCPORT_BASIC_KERNEL_IO @@ -3441,7 +3441,7 @@ main: { // char size = font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP) // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] // main::toD0181 @@ -3456,7 +3456,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] + // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi main::y#4 = 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 @@ -3485,7 +3485,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show + // [15] call show -- call_phi_near jsr show // main::@7 // show(c++, x, y, FONT_COMPRESSED_MAP); @@ -3792,7 +3792,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near jsr font_find // char found = font_find(next_original, font_compressed, font_size) // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/examples/c64/kernalload/kernalload.log b/src/test/ref/examples/c64/kernalload/kernalload.log index b0fba1a3b..f2753c471 100644 --- a/src/test/ref/examples/c64/kernalload/kernalload.log +++ b/src/test/ref/examples/c64/kernalload/kernalload.log @@ -763,7 +763,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 - // [1] call loadFileToMemory + // [1] call loadFileToMemory -- call_phi_near // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -783,7 +783,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error + // [7] call error -- call_phi_near jsr error jmp __b1 // main::@1 @@ -835,7 +835,7 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam + // [16] call setnam -- call_phi_near jsr setnam jmp __b1 // loadFileToMemory::@1 @@ -843,7 +843,7 @@ loadFileToMemory: { // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs + // [18] call setlfs -- call_phi_near jsr setlfs jmp __b2 // loadFileToMemory::@2 @@ -856,7 +856,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load + // [21] call load -- call_phi_near jsr load // [22] load::return#0 = load::return#2 jmp __b3 @@ -898,7 +898,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] + // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near strlen_from_setnam: jsr strlen // [29] strlen::return#2 = strlen::len#2 @@ -1187,7 +1187,7 @@ Score: 720 main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 // char status = loadFileToMemory(8, "SPRITE", LOAD_SPRITE) - // [1] call loadFileToMemory + // [1] call loadFileToMemory -- call_phi_near // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -1206,7 +1206,7 @@ main: { // error(status) // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error + // [7] call error -- call_phi_near jsr error // main::@1 __b1: @@ -1257,14 +1257,14 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam + // [16] call setnam -- call_phi_near jsr setnam // loadFileToMemory::@1 // setlfs(device) // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs + // [18] call setlfs -- call_phi_near jsr setlfs // loadFileToMemory::@2 // load(address, 0) @@ -1276,7 +1276,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load + // [21] call load -- call_phi_near jsr load // [22] load::return#0 = load::return#2 // loadFileToMemory::@3 @@ -1316,7 +1316,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] + // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near jsr strlen // strlen(filename) // [29] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/examples/c64/krillload/krillload.log b/src/test/ref/examples/c64/krillload/krillload.log index 665ca6f4e..c9c97817f 100644 --- a/src/test/ref/examples/c64/krillload/krillload.log +++ b/src/test/ref/examples/c64/krillload/krillload.log @@ -461,7 +461,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = $ff&SPRITE/$40 - // [1] call krill_install + // [1] call krill_install -- call_phi_near // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -488,7 +488,7 @@ main: { jmp __b1 // main::@1 __b1: - // [8] call krill_loadraw + // [8] call krill_loadraw -- call_phi_near jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 jmp __b7 @@ -744,7 +744,7 @@ Score: 128 main: { .const toSpritePtr1_return = $ff&SPRITE/$40 // char status = krill_install() - // [1] call krill_install + // [1] call krill_install -- call_phi_near // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -767,7 +767,7 @@ main: { // main::@1 __b1: // krill_loadraw("sprite") - // [8] call krill_loadraw + // [8] call krill_loadraw -- call_phi_near jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 // main::@7 diff --git a/src/test/ref/examples/c64/linking/linking.log b/src/test/ref/examples/c64/linking/linking.log index fadfb0a08..8cb2caf14 100644 --- a/src/test/ref/examples/c64/linking/linking.log +++ b/src/test/ref/examples/c64/linking/linking.log @@ -330,7 +330,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near fillscreen_from___b2: jsr fillscreen jmp __b3 @@ -496,7 +496,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near jsr fillscreen // main::@3 // (*BG_COLOR)++; diff --git a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log index e8051dc8f..09f17dcee 100644 --- a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log @@ -1674,7 +1674,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1686,7 +1686,7 @@ __start: { main: { // asm { sei } sei - // [10] call init + // [10] call init -- call_phi_near jsr init // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1694,7 +1694,7 @@ main: { // main::@1 __b1: // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] + // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near loop_from___b1: jsr loop jmp __breturn @@ -1713,7 +1713,7 @@ init: { sta D011 // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] + // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near plexInit_from_init: jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] @@ -1850,7 +1850,7 @@ loop: { // [40] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near plexSort_from___b5: jsr plexSort jmp __b11 @@ -1903,7 +1903,7 @@ loop: { __b9: // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [50] call plexShowSprite + // [50] call plexShowSprite -- call_phi_near jsr plexShowSprite jmp __b12 // loop::@12 @@ -2583,7 +2583,7 @@ __start: { sta.z plex_free_next // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -2595,13 +2595,13 @@ main: { // asm { sei } sei // init() - // [10] call init + // [10] call init -- call_phi_near jsr init // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] + // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near jsr loop // main::@return // } @@ -2620,7 +2620,7 @@ init: { // plexInit(SCREEN) // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] + // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] // [16] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -2748,7 +2748,7 @@ loop: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexSort() // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near jsr plexSort // loop::@11 // VICII->BORDER_COLOR = BLACK @@ -2796,7 +2796,7 @@ loop: { // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexShowSprite() - // [50] call plexShowSprite + // [50] call plexShowSprite -- call_phi_near jsr plexShowSprite // loop::@12 // for( char ss: 0..PLEX_COUNT-1) diff --git a/src/test/ref/examples/c64/nmisamples/nmisamples.log b/src/test/ref/examples/c64/nmisamples/nmisamples.log index 3b7a48291..3943b2d56 100644 --- a/src/test/ref/examples/c64/nmisamples/nmisamples.log +++ b/src/test/ref/examples/c64/nmisamples/nmisamples.log @@ -329,7 +329,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -573,7 +573,7 @@ __start: { sta.z sample+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/rasterbars/raster-bars.log b/src/test/ref/examples/c64/rasterbars/raster-bars.log index c46d54f43..df81be3ca 100644 --- a/src/test/ref/examples/c64/rasterbars/raster-bars.log +++ b/src/test/ref/examples/c64/rasterbars/raster-bars.log @@ -248,7 +248,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call raster + // [4] call raster -- call_phi_near jsr raster jmp __b1 } @@ -419,7 +419,7 @@ main: { // [3] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // raster() - // [4] call raster + // [4] call raster -- call_phi_near jsr raster jmp __b1 } diff --git a/src/test/ref/examples/c64/scroll/scroll.log b/src/test/ref/examples/c64/scroll/scroll.log index 0369e4d2d..5cdde9acf 100644 --- a/src/test/ref/examples/c64/scroll/scroll.log +++ b/src/test/ref/examples/c64/scroll/scroll.log @@ -517,7 +517,7 @@ main: { .label line = SCREEN+$28 .label nxt = 4 // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] + // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -802,7 +802,7 @@ main: { .label nxt = 4 // fillscreen(SCREEN, $20) // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] + // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::nxt#10 = TEXT [phi:main->main::@1#0] -- pbuz1=pbuc1 diff --git a/src/test/ref/examples/c64/scrollbig/scrollbig.log b/src/test/ref/examples/c64/scrollbig/scrollbig.log index 8c184af4f..ef0ad24ba 100644 --- a/src/test/ref/examples/c64/scrollbig/scrollbig.log +++ b/src/test/ref/examples/c64/scrollbig/scrollbig.log @@ -1466,7 +1466,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] + // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1514,7 +1514,7 @@ main: { __b3: // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR - // [6] call scroll_soft + // [6] call scroll_soft -- call_phi_near jsr scroll_soft jmp __b4 // main::@4 @@ -1581,7 +1581,7 @@ scroll_soft: { jmp __b2 // scroll_soft::@2 __b2: - // [17] call scroll_bit + // [17] call scroll_bit -- call_phi_near jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] __b1_from___b2: @@ -1623,7 +1623,7 @@ scroll_bit: { jmp __b2 // scroll_bit::@2 __b2: - // [24] call next_char + // [24] call next_char -- call_phi_near jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -1666,7 +1666,7 @@ scroll_bit: { // scroll_bit::@1 __b1: // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near scroll_hard_from___b1: jsr scroll_hard jmp __b7 @@ -2044,7 +2044,7 @@ Score: 20882 main: { // fillscreen(SCREEN, $20) // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] + // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi current_chargen#28 = CHARGEN [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2087,7 +2087,7 @@ main: { // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // scroll_soft() - // [6] call scroll_soft + // [6] call scroll_soft -- call_phi_near jsr scroll_soft // main::@4 // --VICII->BG_COLOR; @@ -2151,7 +2151,7 @@ scroll_soft: { // [16] phi from scroll_soft to scroll_soft::@2 [phi:scroll_soft->scroll_soft::@2] // scroll_soft::@2 // scroll_bit() - // [17] call scroll_bit + // [17] call scroll_bit -- call_phi_near jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] // [18] phi current_chargen#12 = current_chargen#21 [phi:scroll_soft::@2->scroll_soft::@1#0] -- register_copy @@ -2189,7 +2189,7 @@ scroll_bit: { // [23] phi from scroll_bit to scroll_bit::@2 [phi:scroll_bit->scroll_bit::@2] // scroll_bit::@2 // unsigned int c = next_char() - // [24] call next_char + // [24] call next_char -- call_phi_near jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -2229,7 +2229,7 @@ scroll_bit: { __b1: // scroll_hard() // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near jsr scroll_hard // scroll_bit::@7 // asm diff --git a/src/test/ref/examples/c64/showlogo/showlogo.log b/src/test/ref/examples/c64/showlogo/showlogo.log index ec8afeea4..a73435332 100644 --- a/src/test/ref/examples/c64/showlogo/showlogo.log +++ b/src/test/ref/examples/c64/showlogo/showlogo.log @@ -641,7 +641,7 @@ main: { memset_from___b3: // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near lda #SCREEN @@ -657,7 +657,7 @@ main: { memset_from___b4: // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near lda #COLS @@ -916,7 +916,7 @@ main: { // [16] phi from main::@3 to memset [phi:main::@3->memset] // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near lda #SCREEN @@ -929,7 +929,7 @@ main: { // [16] phi from main::@4 to memset [phi:main::@4->memset] // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near lda #COLS diff --git a/src/test/ref/examples/c64/zpcode/zpcode.log b/src/test/ref/examples/c64/zpcode/zpcode.log index 5de3e625f..ba4f154fd 100644 --- a/src/test/ref/examples/c64/zpcode/zpcode.log +++ b/src/test/ref/examples/c64/zpcode/zpcode.log @@ -382,7 +382,7 @@ main: { __b4: // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] + // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near loop_from___b4: jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -392,7 +392,7 @@ main: { __b5: // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near zpLoop_from___b5: jsr zpLoop jmp __b6 @@ -581,14 +581,14 @@ main: { // loop() // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] + // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // zpLoop() // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near jsr zpLoop // main::@6 // *BG_COLOR = 0 diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.log b/src/test/ref/examples/cx16/cx16-rasterbars.log index 18cd7a889..10ffb8032 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.log +++ b/src/test/ref/examples/cx16/cx16-rasterbars.log @@ -998,7 +998,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] + // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1083,7 +1083,7 @@ irq_line: { __b1: // [27] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] -- call_phi_near memset_from___b1: jsr memset jmp __b19 @@ -1567,7 +1567,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] + // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [9] return @@ -1652,7 +1652,7 @@ irq_line: { // memset(BARS, 0, sizeof(BARS)) // [27] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] -- call_phi_near jsr memset // irq_line::@19 // char idx = sin_idx-- diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index 06f0e6a9a..4fa87ecd3 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -1423,7 +1423,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1431,7 +1431,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1467,7 +1467,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1508,7 +1508,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1520,14 +1520,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] + // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near printf_str_from_main: jsr printf_str jmp __breturn @@ -1663,7 +1663,7 @@ cputln: { sta.z conio_cursor_x // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [48] call cscroll + // [48] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -1735,7 +1735,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -1754,7 +1754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -1770,7 +1770,7 @@ cscroll: { memset_from___b3: // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1786,7 +1786,7 @@ cscroll: { memset_from___b4: // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2178,12 +2178,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2212,7 +2212,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2251,7 +2251,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2262,7 +2262,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -2270,7 +2270,7 @@ cputc: { main: { // printf("hello world!\n") // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] + // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near jsr printf_str // main::@return // } @@ -2407,7 +2407,7 @@ cputln: { // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [48] call cscroll + // [48] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -2474,7 +2474,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2490,7 +2490,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2503,7 +2503,7 @@ cscroll: { // [82] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2516,7 +2516,7 @@ cscroll: { // [82] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/examples/mega65/32bit-addressing-mega65.log b/src/test/ref/examples/mega65/32bit-addressing-mega65.log index f50f22628..3a5303669 100644 --- a/src/test/ref/examples/mega65/32bit-addressing-mega65.log +++ b/src/test/ref/examples/mega65/32bit-addressing-mega65.log @@ -151,7 +151,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ __start: { sta.z ADDR32+3 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/mega65/banked-music.log b/src/test/ref/examples/mega65/banked-music.log index 483f214bb..1f4c72627 100644 --- a/src/test/ref/examples/mega65/banked-music.log +++ b/src/test/ref/examples/mega65/banked-music.log @@ -1140,7 +1140,7 @@ irq: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near memoryRemapBlock_from_irq: jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] @@ -1167,7 +1167,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1217,7 +1217,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1253,7 +1253,7 @@ main: { // open sideborder ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO - // [20] call memcpy_dma4 + // [20] call memcpy_dma4 -- call_phi_near // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1263,7 +1263,7 @@ main: { __b6: // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near memoryRemapBlock_from___b6: jsr memoryRemapBlock jmp __b7 @@ -1290,7 +1290,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1386,7 +1386,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near lda #pageOffset @@ -1847,7 +1847,7 @@ irq: { // memoryRemapBlock(0x40, 0x100) // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] // irq::@4 @@ -1867,7 +1867,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1912,7 +1912,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1952,7 +1952,7 @@ main: { ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO // memcpy_dma4(1, (void*)0x0000, 0, upperCodeData, MUSIC_END-MUSIC) - // [20] call memcpy_dma4 + // [20] call memcpy_dma4 -- call_phi_near // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1960,7 +1960,7 @@ main: { // memoryRemapBlock(0x40, 0x100) // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near jsr memoryRemapBlock // main::@7 // asm @@ -1982,7 +1982,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -2078,7 +2078,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near lda #pageOffset diff --git a/src/test/ref/examples/mega65/camelot-1536dots.log b/src/test/ref/examples/mega65/camelot-1536dots.log index 516889aad..5966d3c76 100644 --- a/src/test/ref/examples/mega65/camelot-1536dots.log +++ b/src/test/ref/examples/mega65/camelot-1536dots.log @@ -2901,7 +2901,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] + // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2927,7 +2927,7 @@ main: { jmp __b6 // main::@6 __b6: - // [13] call memoryRemap + // [13] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b10 @@ -2960,7 +2960,7 @@ main: { lda #VICIV_VFAST ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [21] call graphics_mode + // [21] call graphics_mode -- call_phi_near // Initialize graphics jsr graphics_mode jmp __b11 @@ -3053,7 +3053,7 @@ main: { stz SPRITES_XMSB // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near init_plot_from___b9: jsr init_plot jmp __b12 @@ -3116,7 +3116,7 @@ main: { // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] memset_dma_from___b5: - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near jsr memset_dma jmp __b13 // main::@13 @@ -3124,7 +3124,7 @@ main: { // [56] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR) = PURPLE -- _deref_pbuc1=vbuc2 ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR - // [57] call render_dots + // [57] call render_dots -- call_phi_near // Render some dots jsr render_dots jmp __b14 @@ -3327,7 +3327,7 @@ graphics_mode: { // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] memset_dma_from___b8: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near lda #GRAPHICS1 @@ -3341,7 +3341,7 @@ graphics_mode: { // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] memset_dma_from___b11: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near lda #GRAPHICS2 @@ -3360,7 +3360,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke + // [93] call lpoke -- call_phi_near jsr lpoke jmp __b9 // graphics_mode::@9 @@ -3373,7 +3373,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke + // [97] call lpoke -- call_phi_near // No extended attributes jsr lpoke jmp __b10 @@ -3840,7 +3840,7 @@ render_dots: { ldy #0 adc (__25),y taz - // [161] call plot + // [161] call plot -- call_phi_near jsr plot jmp __b18 // render_dots::@18 @@ -4681,7 +4681,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] + // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [9] return @@ -4701,7 +4701,7 @@ main: { // [12] phi from main::SEI1 to main::@6 [phi:main::SEI1->main::@6] // main::@6 // memoryRemap(0x00,0,0) - // [13] call memoryRemap + // [13] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@10 @@ -4740,7 +4740,7 @@ main: { ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC // graphics_mode() - // [21] call graphics_mode + // [21] call graphics_mode -- call_phi_near // Initialize graphics jsr graphics_mode // main::@11 @@ -4831,7 +4831,7 @@ main: { // init_plot() // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near jsr init_plot // main::@12 // asm @@ -4894,7 +4894,7 @@ main: { // [55] call memset_dma // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near jsr memset_dma // main::@13 // VICIV->BORDER_COLOR = PURPLE @@ -4902,7 +4902,7 @@ main: { ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR // render_dots() - // [57] call render_dots + // [57] call render_dots -- call_phi_near // Render some dots jsr render_dots // main::@14 @@ -5114,7 +5114,7 @@ graphics_mode: { // [87] call memset_dma // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near lda #GRAPHICS1 @@ -5125,7 +5125,7 @@ graphics_mode: { // memset_dma(GRAPHICS2, 0x00, 40*25*8) // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near lda #GRAPHICS2 @@ -5144,7 +5144,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke + // [93] call lpoke -- call_phi_near jsr lpoke // graphics_mode::@9 // lpoke(cols++, 0); @@ -5157,7 +5157,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke + // [97] call lpoke -- call_phi_near // No extended attributes jsr lpoke // graphics_mode::@10 @@ -5626,7 +5626,7 @@ render_dots: { clc adc (__25),y taz - // [161] call plot + // [161] call plot -- call_phi_near jsr plot // render_dots::@18 // idx_x1 -= 11 diff --git a/src/test/ref/examples/mega65/dma-test.log b/src/test/ref/examples/mega65/dma-test.log index 6b118ed53..1357cda42 100644 --- a/src/test/ref/examples/mega65/dma-test.log +++ b/src/test/ref/examples/mega65/dma-test.log @@ -384,7 +384,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b1 @@ -570,7 +570,7 @@ Score: 81 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@1 diff --git a/src/test/ref/examples/mega65/dma-test2.log b/src/test/ref/examples/mega65/dma-test2.log index 620a9ffa2..57c7da4f7 100644 --- a/src/test/ref/examples/mega65/dma-test2.log +++ b/src/test/ref/examples/mega65/dma-test2.log @@ -511,7 +511,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -519,7 +519,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma + // [3] call memcpy_dma -- call_phi_near // Move screen up using DMA jsr memcpy_dma jmp __breturn @@ -759,13 +759,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma(DEFAULT_SCREEN, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma + // [3] call memcpy_dma -- call_phi_near // Move screen up using DMA jsr memcpy_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test3.log b/src/test/ref/examples/mega65/dma-test3.log index f4fb1aa35..8673a5c03 100644 --- a/src/test/ref/examples/mega65/dma-test3.log +++ b/src/test/ref/examples/mega65/dma-test3.log @@ -547,7 +547,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -555,7 +555,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma4 + // [3] call memcpy_dma4 -- call_phi_near // Move screen up using DMA jsr memcpy_dma4 jmp __breturn @@ -813,13 +813,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma4(0, DEFAULT_SCREEN, 0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma4 + // [3] call memcpy_dma4 -- call_phi_near // Move screen up using DMA jsr memcpy_dma4 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test4.log b/src/test/ref/examples/mega65/dma-test4.log index 4b42f4f75..9499054f2 100644 --- a/src/test/ref/examples/mega65/dma-test4.log +++ b/src/test/ref/examples/mega65/dma-test4.log @@ -665,7 +665,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -673,7 +673,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma256 + // [3] call memcpy_dma256 -- call_phi_near // Move screen up using DMA jsr memcpy_dma256 jmp __breturn @@ -957,13 +957,13 @@ Score: 155 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma256(0,0, DEFAULT_SCREEN, 0,0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma256 + // [3] call memcpy_dma256 -- call_phi_near // Move screen up using DMA jsr memcpy_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test5.log b/src/test/ref/examples/mega65/dma-test5.log index d58be21be..b77b5b6cf 100644 --- a/src/test/ref/examples/mega65/dma-test5.log +++ b/src/test/ref/examples/mega65/dma-test5.log @@ -507,7 +507,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -515,7 +515,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma + // [3] call memset_dma -- call_phi_near // Fill screen up using DMA jsr memset_dma jmp __breturn @@ -755,13 +755,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma(DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma + // [3] call memset_dma -- call_phi_near // Fill screen up using DMA jsr memset_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test6.log b/src/test/ref/examples/mega65/dma-test6.log index 3145ecb9f..632c2b1ea 100644 --- a/src/test/ref/examples/mega65/dma-test6.log +++ b/src/test/ref/examples/mega65/dma-test6.log @@ -611,7 +611,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -619,7 +619,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma256 + // [3] call memset_dma256 -- call_phi_near // Fill screen up using 256MB DMA jsr memset_dma256 jmp __breturn @@ -884,13 +884,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma256(0, 0, DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma256 + // [3] call memset_dma256 -- call_phi_near // Fill screen up using 256MB DMA jsr memset_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dypp65.log b/src/test/ref/examples/mega65/dypp65.log index 164eb0c8e..178673d08 100644 --- a/src/test/ref/examples/mega65/dypp65.log +++ b/src/test/ref/examples/mega65/dypp65.log @@ -1460,7 +1460,7 @@ main: { jmp __b11 // main::@11 __b11: - // [3] call memoryRemap + // [3] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b12 @@ -1563,7 +1563,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 ldz #0 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -1574,7 +1574,7 @@ main: { jmp __b13 // main::@13 __b13: - // [30] call memset_dma256 + // [30] call memset_dma256 -- call_phi_near // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1593,7 +1593,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 @@ -2236,7 +2236,7 @@ main: { // [2] phi from main::SEI1 to main::@11 [phi:main::SEI1->main::@11] // main::@11 // memoryRemap(0,0,0) - // [3] call memoryRemap + // [3] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@12 @@ -2354,7 +2354,7 @@ main: { lda #>SCREEN sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -2363,7 +2363,7 @@ main: { // [29] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // memset_dma256(0xff,0x08,(void*)0x0000, WHITE, 45*25*2) - // [30] call memset_dma256 + // [30] call memset_dma256 -- call_phi_near // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2379,7 +2379,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 diff --git a/src/test/ref/examples/mega65/helloworld-mega65.log b/src/test/ref/examples/mega65/helloworld-mega65.log index f4fcca264..3d741a72b 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.log +++ b/src/test/ref/examples/mega65/helloworld-mega65.log @@ -1699,7 +1699,7 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near conio_mega65_init_from___init1: jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -1708,7 +1708,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] + // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1732,7 +1732,7 @@ conio_mega65_init: { jmp __b2 // conio_mega65_init::@2 __b2: - // [12] call memoryRemap + // [12] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b3 @@ -1773,7 +1773,7 @@ conio_mega65_init: { // conio_mega65_init::@1 __b1: // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy + // [21] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_mega65_init::@return @@ -1814,7 +1814,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [30] call cputln + // [30] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1826,14 +1826,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [33] call cputln + // [33] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] + // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near printf_str_from_main: jsr printf_str jmp __breturn @@ -2026,7 +2026,7 @@ cputln: { stz.z conio_cursor_x // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [61] call cscroll + // [61] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2095,7 +2095,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$50 @@ -2114,7 +2114,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$50 @@ -2130,7 +2130,7 @@ cscroll: { memset_from___b3: // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2146,7 +2146,7 @@ cscroll: { memset_from___b4: // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$50-$50 @@ -2569,12 +2569,12 @@ __start: { sta.z conio_line_color+1 // #pragma constructor_for(conio_mega65_init, cputc, clrscr, cscroll) // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] + // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2592,7 +2592,7 @@ conio_mega65_init: { // [11] phi from conio_mega65_init::SEI1 to conio_mega65_init::@2 [phi:conio_mega65_init::SEI1->conio_mega65_init::@2] // conio_mega65_init::@2 // memoryRemap(0,0,0) - // [12] call memoryRemap + // [12] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // conio_mega65_init::@3 @@ -2630,7 +2630,7 @@ conio_mega65_init: { __b1: // gotoxy(0, line) // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy + // [21] call gotoxy -- call_phi_near jsr gotoxy // conio_mega65_init::@return // } @@ -2669,7 +2669,7 @@ cputc: { // [29] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [30] call cputln + // [30] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2680,7 +2680,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [33] call cputln + // [33] call cputln -- call_phi_near jsr cputln rts } @@ -2688,7 +2688,7 @@ cputc: { main: { // printf("hello world!") // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] + // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near jsr printf_str // main::@return // } @@ -2882,7 +2882,7 @@ cputln: { // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [61] call cscroll + // [61] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -2946,7 +2946,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$50 @@ -2962,7 +2962,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$50 @@ -2975,7 +2975,7 @@ cscroll: { // [95] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2988,7 +2988,7 @@ cscroll: { // [95] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$50-$50 diff --git a/src/test/ref/examples/mega65/memorymap-test.log b/src/test/ref/examples/mega65/memorymap-test.log index 34e9e57ef..e9f734cad 100644 --- a/src/test/ref/examples/mega65/memorymap-test.log +++ b/src/test/ref/examples/mega65/memorymap-test.log @@ -1023,7 +1023,7 @@ main: { // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] memoryRemapBlock_from_main: - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near ldx #$40 jsr memoryRemapBlock jmp __b7 @@ -1040,7 +1040,7 @@ main: { // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] memoryRemapBlock_from___b7: - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near ldx #$80 jsr memoryRemapBlock jmp __b8 @@ -1064,7 +1064,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1102,7 +1102,7 @@ main: { memoryRemap256M_from___b3: // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1134,7 +1134,7 @@ main: { memoryRemap256M_from___b6: // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near lda #0 sta.z memoryRemap256M.lowerPageOffset lda #0 @@ -1223,7 +1223,7 @@ memoryRemapBlock: { memoryRemap_from_memoryRemapBlock: // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near jsr memoryRemap jmp __breturn // memoryRemapBlock::@return @@ -1611,7 +1611,7 @@ main: { // [1] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near ldx #$40 jsr memoryRemapBlock // main::@7 @@ -1628,7 +1628,7 @@ main: { // [4] call memoryRemapBlock // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near ldx #$80 jsr memoryRemapBlock // main::@8 @@ -1652,7 +1652,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1686,7 +1686,7 @@ main: { // [46] phi from main::@3 to memoryRemap256M [phi:main::@3->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1714,7 +1714,7 @@ main: { // [46] phi from main::@6 to memoryRemap256M [phi:main::@6->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near txa sta.z memoryRemap256M.lowerPageOffset sta.z memoryRemap256M.lowerPageOffset+1 @@ -1807,7 +1807,7 @@ memoryRemapBlock: { // [33] phi from memoryRemapBlock to memoryRemap [phi:memoryRemapBlock->memoryRemap] // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near jsr memoryRemap // memoryRemapBlock::@return // } diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index a3be84bda..6c6c84084 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -2201,7 +2201,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -2747,7 +2747,7 @@ main: { __b1: // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] + // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near memset_from___b1: jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -3403,7 +3403,7 @@ __start: { stz.z greet_idx // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -3965,7 +3965,7 @@ main: { // memset(SCREEN, ' ', 40*25) // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] + // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/examples/nes/nes-dxycp.log b/src/test/ref/examples/nes/nes-dxycp.log index fdccbdbe3..7640dad65 100644 --- a/src/test/ref/examples/nes/nes-dxycp.log +++ b/src/test/ref/examples/nes/nes-dxycp.log @@ -2194,7 +2194,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] + // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2242,7 +2242,7 @@ vblank: { jmp __b14 // vblank::@14 __b14: - // [12] call readJoy1 + // [12] call readJoy1 -- call_phi_near // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -2538,7 +2538,7 @@ main: { __b4: // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near ppuDataTransfer_from___b4: jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2557,7 +2557,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near lda #PPU_NAME_TABLE_0 @@ -2578,7 +2578,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near lda #PPU_ATTRIBUTE_TABLE_0 @@ -3276,7 +3276,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] + // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [6] return @@ -3318,7 +3318,7 @@ vblank: { // [11] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@14 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@14] // vblank::@14 // char joy = readJoy1() - // [12] call readJoy1 + // [12] call readJoy1 -- call_phi_near // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -3596,7 +3596,7 @@ main: { // ppuDataTransfer(PPU_PALETTE, PALETTE, sizeof(PALETTE)) // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3611,7 +3611,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near lda #PPU_NAME_TABLE_0 @@ -3629,7 +3629,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near lda #PPU_ATTRIBUTE_TABLE_0 diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.log b/src/test/ref/examples/plus4/plus4-randomwalk.log index 91996d03d..9b13addd0 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.log +++ b/src/test/ref/examples/plus4/plus4-randomwalk.log @@ -1195,7 +1195,7 @@ main: { memset_from_main: // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near lda #DEFAULT_SCREEN @@ -1211,7 +1211,7 @@ main: { memset_from___b10: // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near lda #DEFAULT_COLORRAM @@ -1227,7 +1227,7 @@ main: { memset_from___b11: // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near lda #VISITS @@ -1332,7 +1332,7 @@ main: { lda FADE,y ldy #0 sta (__8),y - // [20] call rand + // [20] call rand -- call_phi_near jsr rand // [21] rand::return#2 = rand::return#0 jmp __b13 @@ -1814,7 +1814,7 @@ main: { // [44] phi from main to memset [phi:main->memset] // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near lda #DEFAULT_SCREEN @@ -1827,7 +1827,7 @@ main: { // [44] phi from main::@10 to memset [phi:main::@10->memset] // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near lda #DEFAULT_COLORRAM @@ -1840,7 +1840,7 @@ main: { // [44] phi from main::@11 to memset [phi:main::@11->memset] // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near lda #VISITS @@ -1946,7 +1946,7 @@ main: { ldy #0 sta (__8),y // rand() - // [20] call rand + // [20] call rand -- call_phi_near jsr rand // [21] rand::return#2 = rand::return#0 // main::@13 diff --git a/src/test/ref/examples/rom/rom.log b/src/test/ref/examples/rom/rom.log index 42362a5cd..6fc4558a9 100644 --- a/src/test/ref/examples/rom/rom.log +++ b/src/test/ref/examples/rom/rom.log @@ -567,7 +567,7 @@ main: { call2_from_main: // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near ldx #1 jsr call2 // [13] call2::return = call2::return @@ -583,7 +583,7 @@ main: { call2_from___b1: // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near ldx #3 jsr call2 // [17] call2::return = call2::return @@ -599,7 +599,7 @@ main: { call3_from___b2: // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near ldx #1 jsr call3 // [21] call3::return#2 = call3::return#0 @@ -614,7 +614,7 @@ main: { call3_from___b3: // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near ldx #3 jsr call3 // [25] call3::return#3 = call3::return#0 @@ -828,7 +828,7 @@ main: { // [34] phi from main to call2 [phi:main->call2] // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near ldx #1 jsr call2 // call2(1,2) @@ -844,7 +844,7 @@ main: { // [34] phi from main::@1 to call2 [phi:main::@1->call2] // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near ldx #3 jsr call2 // call2(3,4) @@ -860,7 +860,7 @@ main: { // [38] phi from main::@2 to call3 [phi:main::@2->call3] // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near ldx #1 jsr call3 // call3(1,2) @@ -875,7 +875,7 @@ main: { // [38] phi from main::@3 to call3 [phi:main::@3->call3] // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near ldx #3 jsr call3 // call3(3,4) diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index 317adebed..d38c416eb 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -718,7 +718,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] + // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near prepare_from_main: jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] @@ -759,7 +759,7 @@ main: { // main::@4 __b4: // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] + // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near flip_from___b4: jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -768,7 +768,7 @@ main: { // main::@5 __b5: // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] + // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near plot_from___b5: jsr plot jmp __b1_from___b5 @@ -1111,7 +1111,7 @@ Score: 83294 main: { // prepare() // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] + // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] __b3: @@ -1144,13 +1144,13 @@ main: { // main::@4 // flip() // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] + // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // plot() // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] + // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near jsr plot jmp __b3 } diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index d0df97974..8ee442525 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -696,7 +696,7 @@ main: { lda #toD0181_return sta D018 // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near init_font_hex_from___b2: jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] @@ -1026,7 +1026,7 @@ main: { sta D018 // init_font_hex(CHARSET) // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::c#2 = 0 [phi:main::@2->main::@1#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index 408bca681..0c290d92f 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -311,7 +311,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near ldx #$aa jsr fct // [3] fct::return#0 = fct::return#2 @@ -329,7 +329,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near ldx #$55 jsr fct // [7] fct::return#1 = fct::return#2 @@ -440,7 +440,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near ldx #$aa jsr fct // byte a1 = fct(x, z) @@ -458,7 +458,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near ldx #$55 jsr fct // byte a2 = fct(x, z) diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index ad1a43be9..c97d8efa9 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -298,7 +298,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near lda #<$a sta.z mul16u.b lda #>$a @@ -326,7 +326,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near lda #<$3e8 sta.z mul16u.b lda #>$3e8 @@ -458,7 +458,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near lda #<$a sta.z mul16u.b lda #>$a @@ -486,7 +486,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near lda #<$3e8 sta.z mul16u.b lda #>$3e8 diff --git a/src/test/ref/function-pointer-advanced-1.log b/src/test/ref/function-pointer-advanced-1.log index 73b175d3d..1692d8760 100644 --- a/src/test/ref/function-pointer-advanced-1.log +++ b/src/test/ref/function-pointer-advanced-1.log @@ -1256,7 +1256,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] + // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1409,7 +1409,7 @@ main: { jmp __b3 // main::@3 __b3: - // [33] call ln + // [33] call ln -- call_phi_near jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -1419,7 +1419,7 @@ main: { // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] exec_from___b6: - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near lda #sum @@ -1430,7 +1430,7 @@ main: { jmp __b7 // main::@7 __b7: - // [37] call ln + // [37] call ln -- call_phi_near jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -1440,7 +1440,7 @@ main: { // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] exec_from___b8: - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near lda #min @@ -1451,7 +1451,7 @@ main: { jmp __b9 // main::@9 __b9: - // [41] call ln + // [41] call ln -- call_phi_near jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -1461,7 +1461,7 @@ main: { // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] exec_from___b10: - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near lda #max @@ -1472,7 +1472,7 @@ main: { jmp __b11 // main::@11 __b11: - // [45] call ln + // [45] call ln -- call_phi_near jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] __b12_from___b11: @@ -1482,7 +1482,7 @@ main: { // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] exec_from___b12: - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near lda #xor @@ -1503,7 +1503,7 @@ main: { // [76] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: @@ -1514,7 +1514,7 @@ main: { // [84] phi from main::@4 to cout [phi:main::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near ldx #' ' jsr cout jmp __b5 @@ -1556,7 +1556,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -1568,7 +1568,7 @@ exec: { // [84] phi from exec::@4 to cout [phi:exec::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -1580,7 +1580,7 @@ exec: { // [84] phi from exec::@5 to cout [phi:exec::@5->cout] cout_from___b5: // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near ldx #' ' jsr cout jmp __b6 @@ -1631,7 +1631,7 @@ exec: { // [76] phi from exec::@3 to print [phi:exec::@3->print] print_from___b3: // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] __b7_from___b3: @@ -1642,7 +1642,7 @@ exec: { // [84] phi from exec::@7 to cout [phi:exec::@7->cout] cout_from___b7: // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near ldx #' ' jsr cout jmp __b8 @@ -1676,7 +1676,7 @@ print: { // [84] phi from print to cout [phi:print->cout] cout_from_print: // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near jsr cout jmp __b1 // print::@1 @@ -1691,7 +1691,7 @@ print: { // [84] phi from print::@1 to cout [phi:print::@1->cout] cout_from___b1: // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near jsr cout jmp __breturn // print::@return @@ -1965,7 +1965,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] + // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -2113,14 +2113,14 @@ main: { // [32] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // ln() - // [33] call ln + // [33] call ln -- call_phi_near jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 // exec(&sum) // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near lda #sum @@ -2129,14 +2129,14 @@ main: { // [36] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // ln() - // [37] call ln + // [37] call ln -- call_phi_near jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // exec(&min) // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near lda #min @@ -2145,14 +2145,14 @@ main: { // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // ln() - // [41] call ln + // [41] call ln -- call_phi_near jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // exec(&max) // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near lda #max @@ -2161,14 +2161,14 @@ main: { // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // ln() - // [45] call ln + // [45] call ln -- call_phi_near jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 // exec(&xor) // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near lda #xor @@ -2188,7 +2188,7 @@ main: { // [50] call print // [76] phi from main::@2 to print [phi:main::@2->print] // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] // main::@4 @@ -2196,7 +2196,7 @@ main: { // [52] call cout // [84] phi from main::@4 to cout [phi:main::@4->cout] // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near ldx #' ' jsr cout // main::@5 @@ -2236,7 +2236,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -2245,7 +2245,7 @@ exec: { // [59] call cout // [84] phi from exec::@4 to cout [phi:exec::@4->cout] // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -2254,7 +2254,7 @@ exec: { // [61] call cout // [84] phi from exec::@5 to cout [phi:exec::@5->cout] // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near ldx #' ' jsr cout // exec::@6 @@ -2302,7 +2302,7 @@ exec: { // [72] call print // [76] phi from exec::@3 to print [phi:exec::@3->print] // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] // exec::@7 @@ -2310,7 +2310,7 @@ exec: { // [74] call cout // [84] phi from exec::@7 to cout [phi:exec::@7->cout] // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near ldx #' ' jsr cout // exec::@8 @@ -2343,7 +2343,7 @@ print: { // [79] call cout // [84] phi from print to cout [phi:print->cout] // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near jsr cout // print::@1 // i&0x0f @@ -2357,7 +2357,7 @@ print: { // [82] call cout // [84] phi from print::@1 to cout [phi:print::@1->cout] // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near jsr cout // print::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index e0cc8628d..1d2198ef8 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -400,7 +400,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -414,7 +414,7 @@ world: { // [6] call print // [16] phi from world to print [phi:world->print] print_from_world: - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near lda #msg @@ -435,7 +435,7 @@ hello: { // [9] call print // [16] phi from hello to print [phi:hello->print] print_from_hello: - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near lda #msg @@ -456,7 +456,7 @@ main: { // [12] call do10 // [23] phi from main to do10 [phi:main->do10] do10_from_main: - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near lda #hello @@ -470,7 +470,7 @@ main: { // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] do10_from___b1: - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near lda #world @@ -654,7 +654,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -665,7 +665,7 @@ world: { // print("world ") // [6] call print // [16] phi from world to print [phi:world->print] - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near lda #msg @@ -685,7 +685,7 @@ hello: { // print("hello ") // [9] call print // [16] phi from hello to print [phi:hello->print] - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near lda #msg @@ -705,7 +705,7 @@ main: { // do10(&hello) // [12] call do10 // [23] phi from main to do10 [phi:main->do10] - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near lda #hello @@ -716,7 +716,7 @@ main: { // do10(&world) // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near lda #world diff --git a/src/test/ref/function-pointer-noarg-call-13.log b/src/test/ref/function-pointer-noarg-call-13.log index 8035feb5b..34209ef12 100644 --- a/src/test/ref/function-pointer-noarg-call-13.log +++ b/src/test/ref/function-pointer-noarg-call-13.log @@ -213,7 +213,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI + // [5] call enableDLI -- call_phi_near jsr enableDLI jmp __b1 // main::@1 @@ -223,7 +223,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI + // [7] call enableDLI -- call_phi_near jsr enableDLI jmp __breturn // main::@return @@ -325,7 +325,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI + // [5] call enableDLI -- call_phi_near jsr enableDLI // main::@1 // enableDLI(&fn2) @@ -334,7 +334,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI + // [7] call enableDLI -- call_phi_near jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-14.log b/src/test/ref/function-pointer-noarg-call-14.log index da9ae74fb..154ebc78d 100644 --- a/src/test/ref/function-pointer-noarg-call-14.log +++ b/src/test/ref/function-pointer-noarg-call-14.log @@ -1541,7 +1541,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1549,7 +1549,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] + // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1563,7 +1563,7 @@ world: { // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] printf_str_from_world: - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near lda #s @@ -1584,7 +1584,7 @@ hello: { // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] printf_str_from_hello: - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near lda #s @@ -1627,7 +1627,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy + // [20] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1668,7 +1668,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [29] call cputln + // [29] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1680,7 +1680,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -1689,7 +1689,7 @@ main: { // [34] call f1 // [67] phi from main to f1 [phi:main->f1] f1_from_main: - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near lda #hello @@ -1703,7 +1703,7 @@ main: { // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] f1_from___b1: - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near lda #world @@ -1876,7 +1876,7 @@ cputln: { sta.z conio_cursor_x // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [65] call cscroll + // [65] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -1919,7 +1919,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -1938,7 +1938,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -1954,7 +1954,7 @@ cscroll: { memset_from___b3: // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1970,7 +1970,7 @@ cscroll: { memset_from___b4: // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2381,12 +2381,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] + // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2397,7 +2397,7 @@ world: { // printf("world!") // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near lda #s @@ -2417,7 +2417,7 @@ hello: { // printf("hello ") // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near lda #s @@ -2455,7 +2455,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy + // [20] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2494,7 +2494,7 @@ cputc: { // [28] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [29] call cputln + // [29] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2505,7 +2505,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln rts } @@ -2514,7 +2514,7 @@ main: { // f1(&hello) // [34] call f1 // [67] phi from main to f1 [phi:main->f1] - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near lda #hello @@ -2525,7 +2525,7 @@ main: { // f1(&world) // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near lda #world @@ -2698,7 +2698,7 @@ cputln: { // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [65] call cscroll + // [65] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -2738,7 +2738,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2754,7 +2754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2767,7 +2767,7 @@ cscroll: { // [93] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2780,7 +2780,7 @@ cscroll: { // [93] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/function-pointer-noarg-call-3.log b/src/test/ref/function-pointer-noarg-call-3.log index 1aff2dbc6..293123223 100644 --- a/src/test/ref/function-pointer-noarg-call-3.log +++ b/src/test/ref/function-pointer-noarg-call-3.log @@ -334,7 +334,7 @@ main: { inc.z i // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn + // [8] call getfn -- call_phi_near jsr getfn // [9] getfn::return#0 = getfn::return#3 jmp __b3 @@ -495,7 +495,7 @@ main: { // getfn(++i) // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn + // [8] call getfn -- call_phi_near jsr getfn // [9] getfn::return#0 = getfn::return#3 // main::@3 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 2cf1501c4..6fd6ebde6 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] + // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -350,7 +350,7 @@ hello: { // main main: { // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] + // [15] phi from main to do10 [phi:main->do10] -- call_phi_near do10_from_main: jsr do10 jmp __breturn @@ -479,7 +479,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] + // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -518,7 +518,7 @@ hello: { main: { // do10(f) // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] + // [15] phi from main to do10 [phi:main->do10] -- call_phi_near jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index c5d6cde97..339af3fa2 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -341,7 +341,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -388,7 +388,7 @@ main: { lda #>msg1 sta.z msg+1 // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] + // [18] phi from main to do10 [phi:main->do10] -- call_phi_near do10_from_main: jsr do10 jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>msg2 sta.z msg+1 // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] + // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near do10_from___b1: jsr do10 jmp __breturn @@ -543,7 +543,7 @@ __start: { sta.z idx // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return @@ -588,7 +588,7 @@ main: { sta.z msg+1 // do10(f) // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] + // [18] phi from main to do10 [phi:main->do10] -- call_phi_near jsr do10 // main::@1 // msg = msg2 @@ -599,7 +599,7 @@ main: { sta.z msg+1 // do10(f) // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] + // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index e11a1a25c..7547a463a 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -174,7 +174,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] + // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -280,7 +280,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] + // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/function-pointer-param-workaround.log b/src/test/ref/function-pointer-param-workaround.log index 98cb9eeeb..e3173e1e5 100644 --- a/src/test/ref/function-pointer-param-workaround.log +++ b/src/test/ref/function-pointer-param-workaround.log @@ -550,7 +550,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] + // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -880,7 +880,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] + // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/function-pointer-problem-1.log b/src/test/ref/function-pointer-problem-1.log index 33a272696..485a6a16d 100644 --- a/src/test/ref/function-pointer-problem-1.log +++ b/src/test/ref/function-pointer-problem-1.log @@ -167,7 +167,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI + // [3] call enableDLI -- call_phi_near jsr enableDLI jmp __breturn // main::@return @@ -253,7 +253,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI + // [3] call enableDLI -- call_phi_near jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-return-2.log b/src/test/ref/function-pointer-return-2.log index 3016e22f8..87123a32f 100644 --- a/src/test/ref/function-pointer-return-2.log +++ b/src/test/ref/function-pointer-return-2.log @@ -267,7 +267,7 @@ main: { // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] set_border_from___b1: - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near lda #fn1 @@ -281,7 +281,7 @@ main: { // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] set_border_from___b2: - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near lda #fn2 @@ -418,7 +418,7 @@ main: { // [2] call set_border // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near lda #fn1 @@ -429,7 +429,7 @@ main: { // set_border(fn2) // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near lda #fn2 diff --git a/src/test/ref/function-pointer-return-3.log b/src/test/ref/function-pointer-return-3.log index e4f571d97..0e4451486 100644 --- a/src/test/ref/function-pointer-return-3.log +++ b/src/test/ref/function-pointer-return-3.log @@ -384,7 +384,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run + // [6] call run -- call_phi_near jsr run jmp __b3 // main::@3 @@ -569,7 +569,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run + // [6] call run -- call_phi_near jsr run // main::@3 // for(char i=0; i < sizeof(tasks)/sizeof(struct Task); i++) diff --git a/src/test/ref/global-label-problem.log b/src/test/ref/global-label-problem.log index 630fe9e72..64d27f2cf 100644 --- a/src/test/ref/global-label-problem.log +++ b/src/test/ref/global-label-problem.log @@ -344,7 +344,7 @@ main: { print_from_main: // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near lda #msg @@ -359,7 +359,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -371,7 +371,7 @@ main: { // main::@2 __b2: // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] + // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near print1_from___b2: jsr print1 jmp __breturn @@ -427,7 +427,7 @@ print1: { // [7] phi from print1 to print [phi:print1->print] print_from_print1: // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near lda #msg @@ -442,7 +442,7 @@ print1: { // [7] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near lda #<@msg sta.z print.msg lda #>@msg @@ -537,7 +537,7 @@ main: { // [7] phi from main to print [phi:main->print] // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near lda #msg @@ -549,7 +549,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -559,7 +559,7 @@ main: { // main::@2 // print1() // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] + // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near jsr print1 // main::@return // } @@ -612,7 +612,7 @@ print1: { // [15] call print // [7] phi from print1 to print [phi:print1->print] // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near lda #msg @@ -624,7 +624,7 @@ print1: { // [17] call print // [7] phi from print1::@1 to print [phi:print1::@1->print] // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near lda #<@msg sta.z print.msg lda #>@msg diff --git a/src/test/ref/global-pc-multiple.log b/src/test/ref/global-pc-multiple.log index f2c01c47e..5587b71f0 100644 --- a/src/test/ref/global-pc-multiple.log +++ b/src/test/ref/global-pc-multiple.log @@ -174,7 +174,7 @@ main: { jmp __b2 // main::@2 __b2: - // [4] call incScreen + // [4] call incScreen -- call_phi_near jsr incScreen jmp __b1 } @@ -252,7 +252,7 @@ main: { // main::@2 __b2: // incScreen() - // [4] call incScreen + // [4] call incScreen -- call_phi_near jsr incScreen jmp __b1 } diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index d80d75484..acd112cb5 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -260,7 +260,7 @@ main: { // [1] call print2 // [5] phi from main to print2 [phi:main->print2] print2_from_main: - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near lda #screen @@ -274,7 +274,7 @@ main: { // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] print2_from___b1: - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near lda #screen+$50 @@ -388,7 +388,7 @@ main: { // print2(screen, hello) // [1] call print2 // [5] phi from main to print2 [phi:main->print2] - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near lda #screen @@ -399,7 +399,7 @@ main: { // print2(screen+80, hello) // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near lda #screen+$50 diff --git a/src/test/ref/hex2dec-ptrptr.log b/src/test/ref/hex2dec-ptrptr.log index 39f626dc1..a6584ab71 100644 --- a/src/test/ref/hex2dec-ptrptr.log +++ b/src/test/ref/hex2dec-ptrptr.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call cls - // [13] phi from main to cls [phi:main->cls] + // [13] phi from main to cls [phi:main->cls] -- call_phi_near cls_from_main: jsr cls jmp __b1 @@ -771,7 +771,7 @@ main: { // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] utoa16w_from___b1: - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value lda #>0 @@ -788,7 +788,7 @@ main: { // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -805,7 +805,7 @@ main: { // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] utoa16w_from___b3: - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -822,7 +822,7 @@ main: { // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] utoa16w_from___b4: - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -839,7 +839,7 @@ main: { // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -909,7 +909,7 @@ utoa16w: { utoa16n_from_utoa16w: // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // [23] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -925,7 +925,7 @@ utoa16w: { // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // [29] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -944,7 +944,7 @@ utoa16w: { // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b3 // utoa16w::@3 @@ -958,7 +958,7 @@ utoa16w: { utoa16n_from___b3: // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b4 // utoa16w::@4 @@ -1159,7 +1159,7 @@ Score: 751 main: { // cls() // [1] call cls - // [13] phi from main to cls [phi:main->cls] + // [13] phi from main to cls [phi:main->cls] -- call_phi_near jsr cls // main::@1 // utoa16w(00000, screen) @@ -1170,7 +1170,7 @@ main: { sta.z utoa16w.dst+1 // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -1184,7 +1184,7 @@ main: { sta.z utoa16w.dst+1 // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1199,7 +1199,7 @@ main: { sta.z utoa16w.dst+1 // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1214,7 +1214,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1229,7 +1229,7 @@ main: { sta.z utoa16w.dst+1 // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1296,7 +1296,7 @@ utoa16w: { // [40] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [23] utoa16n::return#0 = utoa16n::return#4 @@ -1313,7 +1313,7 @@ utoa16w: { // [28] call utoa16n // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [29] utoa16n::return#1 = utoa16n::return#4 @@ -1333,7 +1333,7 @@ utoa16w: { // [34] call utoa16n // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -1346,7 +1346,7 @@ utoa16w: { // [40] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 458bec309..42d4de639 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -1415,7 +1415,7 @@ main: { // asm { sei } sei // [1] call cls - // [31] phi from main to cls [phi:main->cls] + // [31] phi from main to cls [phi:main->cls] -- call_phi_near cls_from_main: jsr cls jmp __b1 @@ -1450,7 +1450,7 @@ main: { // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value lda #>0 @@ -1469,7 +1469,7 @@ main: { // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1488,7 +1488,7 @@ main: { // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] utoa16w_from___b6: - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1507,7 +1507,7 @@ main: { // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] utoa16w_from___b7: - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1526,7 +1526,7 @@ main: { // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] utoa16w_from___b8: - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1549,7 +1549,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near utoa10w_from___b9: jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] @@ -1638,7 +1638,7 @@ utoa16w: { utoa16n_from_utoa16w: // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // [41] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -1654,7 +1654,7 @@ utoa16w: { // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // [47] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -1673,7 +1673,7 @@ utoa16w: { // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b3 // utoa16w::@3 @@ -1687,7 +1687,7 @@ utoa16w: { utoa16n_from___b3: // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b4 // utoa16w::@4 @@ -2138,7 +2138,7 @@ main: { sei // cls() // [1] call cls - // [31] phi from main to cls [phi:main->cls] + // [31] phi from main to cls [phi:main->cls] -- call_phi_near jsr cls // main::@1 __b1: @@ -2175,7 +2175,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -2192,7 +2192,7 @@ main: { sta.z utoa16w.dst+1 // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -2210,7 +2210,7 @@ main: { sta.z utoa16w.dst+1 // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -2228,7 +2228,7 @@ main: { sta.z utoa16w.dst+1 // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -2246,7 +2246,7 @@ main: { sta.z utoa16w.dst+1 // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -2271,7 +2271,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] // [27] phi main::i#2 = 0 [phi:main::@9->main::@3#0] -- vbuxx=vbuc1 @@ -2357,7 +2357,7 @@ utoa16w: { // [78] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [41] utoa16n::return#0 = utoa16n::return#4 @@ -2374,7 +2374,7 @@ utoa16w: { // [46] call utoa16n // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [47] utoa16n::return#1 = utoa16n::return#4 @@ -2394,7 +2394,7 @@ utoa16w: { // [52] call utoa16n // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -2407,7 +2407,7 @@ utoa16w: { // [78] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index e7e0c5e28..df198b8fa 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -778,7 +778,7 @@ main: { // main::@1 __b1: // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near print_str_from___b1: jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -787,7 +787,7 @@ main: { // main::@2 __b2: // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __b3 @@ -823,7 +823,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] + // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -863,7 +863,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char + // [19] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1101,7 +1101,7 @@ Score: 9880 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -1120,13 +1120,13 @@ main: { __b1: // print_str(txt) // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print_ln() // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near jsr print_ln // main::@3 // txt[1]++; @@ -1160,7 +1160,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] + // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1197,7 +1197,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char + // [19] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/init-value-npe.log b/src/test/ref/init-value-npe.log index 0934bf1d1..605953a1e 100644 --- a/src/test/ref/init-value-npe.log +++ b/src/test/ref/init-value-npe.log @@ -238,7 +238,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memset + // [1] call memset -- call_phi_near jsr memset jmp __breturn // main::@return @@ -302,7 +302,7 @@ Score: 24 // main main: { // memset(myscreen) - // [1] call memset + // [1] call memset -- call_phi_near jsr memset // main::@return // } diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 479f85898..28a4e887d 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -154,7 +154,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log index 0fe922e7f..321189d27 100644 --- a/src/test/ref/inline-asm-ref-scoped.log +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -4,7 +4,7 @@ CONTROL FLOW GRAPH SSA void main() main: scope:[main] from __start asm { lda#'c' stasub.ll+1 } - call sub + call sub to:main::@1 main::@1: scope:[main] from main to:main::@return @@ -22,7 +22,7 @@ sub::@return: scope:[sub] from sub void __start() __start: scope:[__start] from - call main + call main to:__start::@1 __start::@1: scope:[__start] from __start to:__start::@return @@ -53,7 +53,7 @@ FINAL CONTROL FLOW GRAPH void main() main: scope:[main] from asm { lda#'c' stasub.ll+1 } - [1] call sub + [1] call sub to:main::@return main::@return: scope:[main] from main [2] return @@ -106,7 +106,7 @@ main: { // asm { lda#'c' stasub.ll+1 } lda #'c' sta sub.ll+1 - // [1] call sub + // [1] call sub -- call_phi_near jsr sub jmp __breturn // main::@return @@ -165,7 +165,7 @@ main: { lda #'c' sta sub.ll+1 // sub() - // [1] call sub + // [1] call sub -- call_phi_near jsr sub // main::@return // } diff --git a/src/test/ref/inline-asm-uses-1.log b/src/test/ref/inline-asm-uses-1.log index f1456dbff..746828cb6 100644 --- a/src/test/ref/inline-asm-uses-1.log +++ b/src/test/ref/inline-asm-uses-1.log @@ -201,7 +201,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc + // [1] call fgetc -- call_phi_near jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 jmp __b1 @@ -301,7 +301,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc + // [1] call fgetc -- call_phi_near jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 // main::@1 diff --git a/src/test/ref/inline-kickasm-uses-problem.log b/src/test/ref/inline-kickasm-uses-problem.log index e583b0c27..66bedbc96 100644 --- a/src/test/ref/inline-kickasm-uses-problem.log +++ b/src/test/ref/inline-kickasm-uses-problem.log @@ -187,7 +187,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call foo + // [1] call foo -- call_phi_near jsr foo jmp __breturn // main::@return @@ -291,7 +291,7 @@ Score: 320 // main main: { // foo(a, b) - // [1] call foo + // [1] call foo -- call_phi_near jsr foo // main::@return // } diff --git a/src/test/ref/inline-pointer-1.log b/src/test/ref/inline-pointer-1.log index edca90a05..04e35a32f 100644 --- a/src/test/ref/inline-pointer-1.log +++ b/src/test/ref/inline-pointer-1.log @@ -194,7 +194,7 @@ main: { puta_from_main: // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -207,7 +207,7 @@ main: { puta_from___b1: // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near ldx #5 jsr puta jmp __breturn @@ -287,7 +287,7 @@ main: { // [5] phi from main to puta [phi:main->puta] // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -297,7 +297,7 @@ main: { // [5] phi from main::@1 to puta [phi:main::@1->puta] // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near ldx #5 jsr puta // main::@return diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index cd5c7f730..1eaae4ccd 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -379,7 +379,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -391,7 +391,7 @@ main: { // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] print_msg_from___b1: // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near ldx #2 jsr print_msg jmp __breturn @@ -432,7 +432,7 @@ print_msg: { __b2: // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near print_from___b2: jsr print jmp __breturn @@ -570,7 +570,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -579,7 +579,7 @@ main: { // [3] call print_msg // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near ldx #2 jsr print_msg // main::@return @@ -616,7 +616,7 @@ print_msg: { // print(msg) // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near jsr print // print_msg::@return // } diff --git a/src/test/ref/inline-string-4.log b/src/test/ref/inline-string-4.log index e46adc6d2..4880aa4b8 100644 --- a/src/test/ref/inline-string-4.log +++ b/src/test/ref/inline-string-4.log @@ -122,7 +122,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label dw = msg - // [1] call output + // [1] call output -- call_phi_near jsr output jmp __breturn // main::@return @@ -193,7 +193,7 @@ Score: 42 main: { .label dw = msg // output(dw) - // [1] call output + // [1] call output -- call_phi_near jsr output // main::@return // } diff --git a/src/test/ref/inline-string.log b/src/test/ref/inline-string.log index 5662d1b07..6c4793398 100644 --- a/src/test/ref/inline-string.log +++ b/src/test/ref/inline-string.log @@ -274,7 +274,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -289,7 +289,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -304,7 +304,7 @@ main: { // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near lda #msg @@ -438,7 +438,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -450,7 +450,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -462,7 +462,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near lda #msg diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index cd6b3338f..9bc0b5d39 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -1663,7 +1663,7 @@ main: { // main::@3 __b3: // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near testUnaryOperator_from___b3: jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1672,7 +1672,7 @@ main: { // main::@4 __b4: // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near testBinaryOperator_from___b4: jsr testBinaryOperator jmp __breturn @@ -1707,7 +1707,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -1722,7 +1722,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near ldy #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -1737,7 +1737,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -1752,7 +1752,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -1767,7 +1767,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -1782,7 +1782,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -1802,7 +1802,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -1817,7 +1817,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -1832,7 +1832,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -1847,7 +1847,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -1862,7 +1862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -1877,7 +1877,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __b6 @@ -1893,7 +1893,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -1908,7 +1908,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near ldy #TYPEID_SIGNED_CHAR jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -1923,7 +1923,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -1938,7 +1938,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -1953,7 +1953,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -1968,7 +1968,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __b12 @@ -1984,7 +1984,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -1999,7 +1999,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2014,7 +2014,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -2029,7 +2029,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -2044,7 +2044,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -2059,7 +2059,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -2076,7 +2076,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -2091,7 +2091,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -2106,7 +2106,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -2121,7 +2121,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -2136,7 +2136,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -2151,7 +2151,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __b24 @@ -2167,7 +2167,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -2182,7 +2182,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -2197,7 +2197,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -2212,7 +2212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -2227,7 +2227,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -2242,7 +2242,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType jmp __b30 @@ -2258,7 +2258,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -2273,7 +2273,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -2288,7 +2288,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -2303,7 +2303,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -2318,7 +2318,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -2333,7 +2333,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2695,13 +2695,13 @@ main: { // main::@3 // testUnaryOperator() // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testBinaryOperator() // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near jsr testBinaryOperator // main::@return // } @@ -2735,7 +2735,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near tay jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -2747,7 +2747,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near tay jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -2759,7 +2759,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near tay jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -2771,7 +2771,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near tay jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -2783,7 +2783,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near tay jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -2795,7 +2795,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near tay jsr assertType // testUnaryOperator::@return @@ -2814,7 +2814,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near tay jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -2826,7 +2826,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near tay jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -2838,7 +2838,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near tay jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -2850,7 +2850,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near tay jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -2862,7 +2862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near tay jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -2874,7 +2874,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@6 @@ -2889,7 +2889,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near tay jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -2901,7 +2901,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near tay jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -2913,7 +2913,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near tay jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -2925,7 +2925,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near tay jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -2937,7 +2937,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near tay jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -2949,7 +2949,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@12 @@ -2964,7 +2964,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near tay jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -2976,7 +2976,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near tay jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2988,7 +2988,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near tay jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -3000,7 +3000,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near tay jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -3012,7 +3012,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near tay jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -3024,7 +3024,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near tay jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -3038,7 +3038,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near tay jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -3050,7 +3050,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near tay jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -3062,7 +3062,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near tay jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -3074,7 +3074,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near tay jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -3086,7 +3086,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near tay jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -3098,7 +3098,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@24 @@ -3113,7 +3113,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near tay jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -3125,7 +3125,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near tay jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -3137,7 +3137,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near tay jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -3149,7 +3149,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near tay jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -3161,7 +3161,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near tay jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -3173,7 +3173,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@30 @@ -3188,7 +3188,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near tay jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -3200,7 +3200,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near tay jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -3212,7 +3212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near tay jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -3224,7 +3224,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near tay jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -3236,7 +3236,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near tay jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -3248,7 +3248,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@return diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index 7e001ef35..21f38a123 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -836,7 +836,7 @@ main: { // main::@3 __b3: // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near testSimpleTypes_from___b3: jsr testSimpleTypes jmp __breturn @@ -871,7 +871,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -885,7 +885,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -899,7 +899,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -913,7 +913,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -927,7 +927,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -941,7 +941,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -955,7 +955,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -969,7 +969,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -983,7 +983,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -997,7 +997,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1011,7 +1011,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1025,7 +1025,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1039,7 +1039,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1053,7 +1053,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1067,7 +1067,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1081,7 +1081,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType jmp __breturn @@ -1296,7 +1296,7 @@ main: { // main::@3 // testSimpleTypes() // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near jsr testSimpleTypes // main::@return // } @@ -1330,7 +1330,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -1341,7 +1341,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -1352,7 +1352,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -1363,7 +1363,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -1374,7 +1374,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -1385,7 +1385,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -1396,7 +1396,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -1407,7 +1407,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -1418,7 +1418,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -1429,7 +1429,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1440,7 +1440,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1451,7 +1451,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1462,7 +1462,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1473,7 +1473,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1484,7 +1484,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1495,7 +1495,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // testSimpleTypes::@return diff --git a/src/test/ref/intermediates-simple.log b/src/test/ref/intermediates-simple.log index e1c27b801..e7f494d08 100644 --- a/src/test/ref/intermediates-simple.log +++ b/src/test/ref/intermediates-simple.log @@ -427,7 +427,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum + // [12] call sum -- call_phi_near jsr sum // [13] sum::return#0 = sum::return#1 jmp __b5 @@ -593,7 +593,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum + // [12] call sum -- call_phi_near jsr sum // [13] sum::return#0 = sum::return#1 // main::@5 diff --git a/src/test/ref/intermediates-struct.log b/src/test/ref/intermediates-struct.log index e5d380194..87e4ff885 100644 --- a/src/test/ref/intermediates-struct.log +++ b/src/test/ref/intermediates-struct.log @@ -322,7 +322,7 @@ main: { sum_from_main: // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near lda #1 jsr sum jmp __b1 @@ -343,7 +343,7 @@ main: { sum_from___b1: // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near lda #3 jsr sum jmp __b2 @@ -461,7 +461,7 @@ main: { // [8] phi from main to sum [phi:main->sum] // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near lda #1 jsr sum // main::@1 @@ -482,7 +482,7 @@ main: { // [8] phi from main::@1 to sum [phi:main::@1->sum] // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near lda #3 jsr sum // main::@2 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 60e6229f4..8888465a9 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -184,7 +184,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -289,7 +289,7 @@ __start: { sta.z col2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 3922bcedf..02cc05904 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -360,7 +360,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -567,7 +567,7 @@ __start: { sta.z col1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index c4418d11e..879ac1b96 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -271,7 +271,7 @@ ASSEMBLER BEFORE OPTIMIZATION irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 - // [1] call do_irq + // [1] call do_irq -- call_phi_near jsr do_irq jmp __breturn // irq::@return @@ -455,7 +455,7 @@ irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 // do_irq() - // [1] call do_irq + // [1] call do_irq -- call_phi_near jsr do_irq // irq::@return // } diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 2b82b1652..b1e8a310d 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -407,7 +407,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -649,7 +649,7 @@ __start: { sta.z irq_idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index e6cb4199f..d373a75d5 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -977,7 +977,7 @@ irq: { // [6] *FGCOL = irq::$3 -- _deref_pbuc1=vbuaa sta FGCOL // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near sub_irq_from___b3: jsr sub_irq jmp __b7 @@ -1096,7 +1096,7 @@ main: { // [29] *FGCOL = main::$1 -- _deref_pbuc1=vbuaa sta FGCOL // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near sub_main_from___b3: jsr sub_main jmp __b6 @@ -1554,7 +1554,7 @@ irq: { sta FGCOL // sub_irq() // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near jsr sub_irq // irq::@7 // for( byte k: 0..10 ) @@ -1667,7 +1667,7 @@ main: { sta FGCOL // sub_main() // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near jsr sub_main // main::@6 // for( byte k: 0..10 ) diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 4d3548707..81329ce03 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -670,7 +670,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near menu_from___b1: jsr menu jmp __b1_from___b1 @@ -686,7 +686,7 @@ menu: { // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_C jsr keyboard_key_pressed // [6] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -702,7 +702,7 @@ menu: { jmp __b5 // menu::@5 __b5: - // [10] call pressed + // [10] call pressed -- call_phi_near jsr pressed jmp __breturn // menu::@return @@ -717,7 +717,7 @@ menu: { // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] keyboard_key_pressed_from___b2: - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_I jsr keyboard_key_pressed // [14] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 @@ -745,7 +745,7 @@ menu: { // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] keyboard_key_pressed_from___b3: - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_E jsr keyboard_key_pressed // [21] keyboard_key_pressed::return#4 = keyboard_key_pressed::return#0 @@ -789,7 +789,7 @@ keyboard_key_pressed: { lsr // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read + // [31] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -817,7 +817,7 @@ pressed: { // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_SPACE jsr keyboard_key_pressed // [39] keyboard_key_pressed::return#10 = keyboard_key_pressed::return#0 @@ -1043,7 +1043,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near jsr menu jmp __b1 } @@ -1055,7 +1055,7 @@ menu: { // keyboard_key_pressed(KEY_C) // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_C jsr keyboard_key_pressed // keyboard_key_pressed(KEY_C) @@ -1069,7 +1069,7 @@ menu: { // [9] phi from menu::@8 to menu::@5 [phi:menu::@8->menu::@5] // menu::@5 // pressed() - // [10] call pressed + // [10] call pressed -- call_phi_near jsr pressed // menu::@return // } @@ -1081,7 +1081,7 @@ menu: { // keyboard_key_pressed(KEY_I) // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_I jsr keyboard_key_pressed // keyboard_key_pressed(KEY_I) @@ -1107,7 +1107,7 @@ menu: { // keyboard_key_pressed(KEY_E) // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_E jsr keyboard_key_pressed // keyboard_key_pressed(KEY_E) @@ -1155,7 +1155,7 @@ keyboard_key_pressed: { // keyboard_matrix_read(rowidx) // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read + // [31] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 @@ -1179,7 +1179,7 @@ pressed: { // keyboard_key_pressed(KEY_SPACE) // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_SPACE jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) diff --git a/src/test/ref/library-constructor-1.log b/src/test/ref/library-constructor-1.log index 0b755e7a0..4b87ac3cb 100644 --- a/src/test/ref/library-constructor-1.log +++ b/src/test/ref/library-constructor-1.log @@ -177,7 +177,7 @@ __start: { // [1] my_value = 0 -- vbuz1=vbuc1 lda #0 sta.z my_value - // [2] call my_init + // [2] call my_init -- call_phi_near jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -185,7 +185,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -207,7 +207,7 @@ my_init: { } // main main: { - // [9] call print + // [9] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -285,12 +285,12 @@ __start: { lda #0 sta.z my_value // #pragma constructor_for(my_init, print) - // [2] call my_init + // [2] call my_init -- call_phi_near jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return @@ -310,7 +310,7 @@ my_init: { // main main: { // print() - // [9] call print + // [9] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/library-constructor-3.log b/src/test/ref/library-constructor-3.log index 9e70da966..9319d815b 100644 --- a/src/test/ref/library-constructor-3.log +++ b/src/test/ref/library-constructor-3.log @@ -220,14 +220,14 @@ __start: { sta.z SCREEN lda #>0 sta.z SCREEN+1 - // [3] call init_1 + // [3] call init_1 -- call_phi_near jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] __b2_from___init1: jmp __b2 // __start::@2 __b2: - // [5] call init_2 + // [5] call init_2 -- call_phi_near jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] __b1_from___b2: @@ -235,7 +235,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] + // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -270,7 +270,7 @@ init_1: { } // main main: { - // [14] call print + // [14] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -363,17 +363,17 @@ __start: { sta.z SCREEN sta.z SCREEN+1 // #pragma constructor_for(init_1, print) - // [3] call init_1 + // [3] call init_1 -- call_phi_near jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] // __start::@2 // #pragma constructor_for(init_2, print) - // [5] call init_2 + // [5] call init_2 -- call_phi_near jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] // __start::@1 // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] + // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -406,7 +406,7 @@ init_1: { // main main: { // print() - // [14] call print + // [14] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index a5ce9bad7..3862c529e 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -2465,7 +2465,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -2489,7 +2489,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -2513,7 +2513,7 @@ main: { sta.z lin16u_gen.min lda #>0 sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -2525,7 +2525,7 @@ main: { // main::@6 __b6: // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near print_cls_from___b6: jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2541,7 +2541,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near lda #str @@ -2555,7 +2555,7 @@ main: { // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] print_uint_from___b8: - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near lda #<$22d sta.z print_uint.w lda #>$22d @@ -2570,7 +2570,7 @@ main: { // [81] phi from main::@9 to print_str [phi:main::@9->print_str] print_str_from___b9: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near lda #str1 @@ -2584,7 +2584,7 @@ main: { // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] print_uint_from___b10: - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -2599,7 +2599,7 @@ main: { // [81] phi from main::@11 to print_str [phi:main::@11->print_str] print_str_from___b11: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near lda #str1 @@ -2613,7 +2613,7 @@ main: { // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] print_uint_from___b12: - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near lda #<0 sta.z print_uint.w lda #>0 @@ -2627,7 +2627,7 @@ main: { // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] print_ln_from___b13: - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near lda #print_screen @@ -2657,7 +2657,7 @@ main: { // [81] phi from main::@3 to print_str [phi:main::@3->print_str] print_str_from___b3: // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near lda #str @@ -2671,7 +2671,7 @@ main: { // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] print_uint_from___b22: - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -2686,7 +2686,7 @@ main: { // [81] phi from main::@23 to print_str [phi:main::@23->print_str] print_str_from___b23: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near lda #str1 @@ -2700,7 +2700,7 @@ main: { // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] print_uint_from___b24: - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -2715,7 +2715,7 @@ main: { // [81] phi from main::@25 to print_str [phi:main::@25->print_str] print_str_from___b25: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near lda #str1 @@ -2729,7 +2729,7 @@ main: { // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] print_uint_from___b26: - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -2743,7 +2743,7 @@ main: { // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] print_ln_from___b27: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // main::@return @@ -2763,7 +2763,7 @@ main: { // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] __b14_from___b2: @@ -2774,7 +2774,7 @@ main: { // [81] phi from main::@14 to print_str [phi:main::@14->print_str] print_str_from___b14: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near lda #str1 @@ -2796,7 +2796,7 @@ main: { // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] print_uint_from___b15: - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -2807,7 +2807,7 @@ main: { // [81] phi from main::@16 to print_str [phi:main::@16->print_str] print_str_from___b16: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near lda #str1 @@ -2825,7 +2825,7 @@ main: { // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] print_uint_from___b17: - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -2836,7 +2836,7 @@ main: { // [81] phi from main::@18 to print_str [phi:main::@18->print_str] print_str_from___b18: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near lda #str1 @@ -2854,7 +2854,7 @@ main: { // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] print_uint_from___b19: - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] __b20_from___b19: @@ -2864,7 +2864,7 @@ main: { // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] print_ln_from___b20: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near jsr print_ln jmp __b21 // main::@21 @@ -2914,7 +2914,7 @@ lin16u_gen: { // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] divr16u_from_lin16u_gen: // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem lda #>0 @@ -2938,7 +2938,7 @@ lin16u_gen: { sta.z divr16u.dividend lda #>0 sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near jsr divr16u // [66] divr16u::return#3 = divr16u::return#0 jmp __b4 @@ -3039,7 +3039,7 @@ lin16u_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] + // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -3080,7 +3080,7 @@ print_str: { // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3103,7 +3103,7 @@ print_uint: { // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -3114,7 +3114,7 @@ print_uint: { // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -3173,7 +3173,7 @@ print_uchar: { // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -3187,7 +3187,7 @@ print_uchar: { // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3755,7 +3755,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -3776,7 +3776,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -3796,7 +3796,7 @@ main: { lda #<0 sta.z lin16u_gen.min sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -3806,7 +3806,7 @@ main: { // main::@6 // print_cls() // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3818,7 +3818,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near lda #str @@ -3829,7 +3829,7 @@ main: { // print_uint(557) // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near lda #<$22d sta.z print_uint.w lda #>$22d @@ -3841,7 +3841,7 @@ main: { // [13] call print_str // [81] phi from main::@9 to print_str [phi:main::@9->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near lda #str1 @@ -3852,7 +3852,7 @@ main: { // print_uint(31179) // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -3864,7 +3864,7 @@ main: { // [17] call print_str // [81] phi from main::@11 to print_str [phi:main::@11->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near lda #str1 @@ -3875,7 +3875,7 @@ main: { // print_uint(0) // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near lda #<0 sta.z print_uint.w sta.z print_uint.w+1 @@ -3885,7 +3885,7 @@ main: { // print_ln() // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near lda #print_screen @@ -3912,7 +3912,7 @@ main: { // [25] call print_str // [81] phi from main::@3 to print_str [phi:main::@3->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near lda #str @@ -3923,7 +3923,7 @@ main: { // print_uint(29793) // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -3935,7 +3935,7 @@ main: { // [29] call print_str // [81] phi from main::@23 to print_str [phi:main::@23->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near lda #str1 @@ -3946,7 +3946,7 @@ main: { // print_uint(63361) // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -3958,7 +3958,7 @@ main: { // [33] call print_str // [81] phi from main::@25 to print_str [phi:main::@25->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near lda #str1 @@ -3969,7 +3969,7 @@ main: { // print_uint($6488) // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -3980,7 +3980,7 @@ main: { // print_ln() // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near jsr print_ln // main::@return // } @@ -4000,7 +4000,7 @@ main: { // [41] call print_uchar // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] // main::@14 @@ -4008,7 +4008,7 @@ main: { // [43] call print_str // [81] phi from main::@14 to print_str [phi:main::@14->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near lda #str1 @@ -4028,7 +4028,7 @@ main: { sta.z print_uint.w+1 // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -4036,7 +4036,7 @@ main: { // [48] call print_str // [81] phi from main::@16 to print_str [phi:main::@16->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near lda #str1 @@ -4052,7 +4052,7 @@ main: { sta.z print_uint.w+1 // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -4060,7 +4060,7 @@ main: { // [52] call print_str // [81] phi from main::@18 to print_str [phi:main::@18->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near lda #str1 @@ -4076,14 +4076,14 @@ main: { sta.z print_uint.w+1 // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] // main::@20 // print_ln() // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near jsr print_ln // main::@21 // for(byte i=0; i<20; i++) @@ -4132,7 +4132,7 @@ lin16u_gen: { // [61] call divr16u // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4153,7 +4153,7 @@ lin16u_gen: { lda #<0 sta.z divr16u.dividend sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near jsr divr16u // word stepf = divr16u(0, length-1, rem16u) // [66] divr16u::return#3 = divr16u::return#0 @@ -4255,7 +4255,7 @@ lin16u_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] + // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -4291,7 +4291,7 @@ print_str: { // [86] call print_char // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4313,7 +4313,7 @@ print_uint: { // [90] call print_uchar // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4322,7 +4322,7 @@ print_uint: { // [92] call print_uchar // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4379,7 +4379,7 @@ print_uchar: { // Table of hexadecimal digits // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4392,7 +4392,7 @@ print_uchar: { // [105] call print_char // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/literal-word-pointer-0.log b/src/test/ref/literal-word-pointer-0.log index cf77457ea..f4f8a8669 100644 --- a/src/test/ref/literal-word-pointer-0.log +++ b/src/test/ref/literal-word-pointer-0.log @@ -119,7 +119,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -182,7 +182,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/literal-word-pointer-1.log b/src/test/ref/literal-word-pointer-1.log index 1cbc5c0cf..d5311dfc3 100644 --- a/src/test/ref/literal-word-pointer-1.log +++ b/src/test/ref/literal-word-pointer-1.log @@ -120,7 +120,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -183,7 +183,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/liverange-1.log b/src/test/ref/liverange-1.log index cf178a468..d04ec4df2 100644 --- a/src/test/ref/liverange-1.log +++ b/src/test/ref/liverange-1.log @@ -208,7 +208,7 @@ main: { out_from_main: // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -220,7 +220,7 @@ main: { // [5] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near lda #'m' jsr out jmp __breturn @@ -297,7 +297,7 @@ main: { // [5] phi from main to out [phi:main->out] // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -306,7 +306,7 @@ main: { // [3] call out // [5] phi from main::@1 to out [phi:main::@1->out] // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near lda #'m' jsr out // main::@return diff --git a/src/test/ref/liverange-10.log b/src/test/ref/liverange-10.log index 9d8e362be..f43be339a 100644 --- a/src/test/ref/liverange-10.log +++ b/src/test/ref/liverange-10.log @@ -678,7 +678,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw + // [3] call outsw -- call_phi_near jsr outsw jmp __b3 // main::@3 @@ -714,7 +714,7 @@ main: { // [20] phi from main::@2 to outw [phi:main::@2->outw] outw_from___b2: // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near jsr outw jmp __b4 // main::@4 @@ -753,7 +753,7 @@ outsw: { out_from___b2: // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near jsr out jmp __b3 // outsw::@3 @@ -779,7 +779,7 @@ outsw: { // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] outw_from___b1: // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near jsr outw jmp __breturn // outsw::@return @@ -805,7 +805,7 @@ outw: { // [38] phi from outw to out [phi:outw->out] out_from_outw: // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near jsr out jmp __b1 // outw::@1 @@ -821,7 +821,7 @@ outw: { // [38] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near jsr out jmp __b2 // outw::@2 @@ -840,7 +840,7 @@ outw: { // [38] phi from outw::@2 to out [phi:outw::@2->out] out_from___b2: // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near jsr out jmp __b3 // outw::@3 @@ -856,7 +856,7 @@ outw: { // [38] phi from outw::@3 to out [phi:outw::@3->out] out_from___b3: // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near jsr out jmp __breturn // outw::@return @@ -1033,7 +1033,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw + // [3] call outsw -- call_phi_near jsr outsw // main::@3 // for(signed int sw: -20..19 ) @@ -1063,7 +1063,7 @@ main: { // [8] call outw // [20] phi from main::@2 to outw [phi:main::@2->outw] // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near jsr outw // main::@4 // for(unsigned int w: 0..39 ) @@ -1098,7 +1098,7 @@ outsw: { // [38] phi from outsw::@2 to out [phi:outsw::@2->out] // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near jsr out // outsw::@3 // sw = -sw @@ -1120,7 +1120,7 @@ outsw: { // [18] call outw // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near jsr outw // outsw::@return // } @@ -1147,7 +1147,7 @@ outw: { // [24] call out // [38] phi from outw to out [phi:outw->out] // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near jsr out // outw::@1 // BYTE1(w) @@ -1163,7 +1163,7 @@ outw: { // [28] call out // [38] phi from outw::@1 to out [phi:outw::@1->out] // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near jsr out // outw::@2 // BYTE0(w) @@ -1182,7 +1182,7 @@ outw: { // [32] call out // [38] phi from outw::@2 to out [phi:outw::@2->out] // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near jsr out // outw::@3 // BYTE0(w) @@ -1198,7 +1198,7 @@ outw: { // [36] call out // [38] phi from outw::@3 to out [phi:outw::@3->out] // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near jsr out // outw::@return // } diff --git a/src/test/ref/liverange-2.log b/src/test/ref/liverange-2.log index 5c92c0723..87bd1b501 100644 --- a/src/test/ref/liverange-2.log +++ b/src/test/ref/liverange-2.log @@ -343,7 +343,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -499,7 +499,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-3.log b/src/test/ref/liverange-3.log index ba653de71..d434831cd 100644 --- a/src/test/ref/liverange-3.log +++ b/src/test/ref/liverange-3.log @@ -350,7 +350,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -508,7 +508,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-4.log b/src/test/ref/liverange-4.log index 1a9b9083e..8b05758c7 100644 --- a/src/test/ref/liverange-4.log +++ b/src/test/ref/liverange-4.log @@ -394,7 +394,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -432,7 +432,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out jmp __breturn // print::@return @@ -572,7 +572,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) @@ -607,7 +607,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out // print::@return // } diff --git a/src/test/ref/liverange-5.log b/src/test/ref/liverange-5.log index 1fd2e49e2..ff19a3bcd 100644 --- a/src/test/ref/liverange-5.log +++ b/src/test/ref/liverange-5.log @@ -401,7 +401,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -439,7 +439,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out jmp __breturn // print::@return @@ -581,7 +581,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) @@ -616,7 +616,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out // print::@return // } diff --git a/src/test/ref/liverange-6.log b/src/test/ref/liverange-6.log index 74a12a553..5e9a05aed 100644 --- a/src/test/ref/liverange-6.log +++ b/src/test/ref/liverange-6.log @@ -245,7 +245,7 @@ main: { __b1: // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out + // [3] call out -- call_phi_near jsr out jmp __b2 // main::@2 @@ -348,7 +348,7 @@ main: { // out(msg[i]) // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out + // [3] call out -- call_phi_near jsr out // main::@2 // for( byte i: 0..11) diff --git a/src/test/ref/liverange-7.log b/src/test/ref/liverange-7.log index 674748c62..5b899a517 100644 --- a/src/test/ref/liverange-7.log +++ b/src/test/ref/liverange-7.log @@ -294,7 +294,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 jmp __b2 // main::@2 @@ -315,7 +315,7 @@ main: { // void out2(__register(A) char c) out2: { // [7] out::c#0 = out2::c#0 - // [8] call out + // [8] call out -- call_phi_near jsr out jmp __breturn // out2::@return @@ -412,7 +412,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 // main::@2 // for(char c: 0..39 ) @@ -432,7 +432,7 @@ main: { out2: { // out(c) // [7] out::c#0 = out2::c#0 - // [8] call out + // [8] call out -- call_phi_near jsr out // out2::@return // } diff --git a/src/test/ref/liverange-8.log b/src/test/ref/liverange-8.log index 860335293..fc882b20b 100644 --- a/src/test/ref/liverange-8.log +++ b/src/test/ref/liverange-8.log @@ -319,7 +319,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 jmp __b2 // main::@2 @@ -344,7 +344,7 @@ out2: { // [12] phi from out2 to out [phi:out2->out] out_from_out2: // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near jsr out jmp __b1 // out2::@1 @@ -354,7 +354,7 @@ out2: { // [12] phi from out2::@1 to out [phi:out2::@1->out] out_from___b1: // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near jsr out jmp __breturn // out2::@return @@ -458,7 +458,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 // main::@2 // for(char c: 0..39 ) @@ -481,7 +481,7 @@ out2: { // [8] call out // [12] phi from out2 to out [phi:out2->out] // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near jsr out // out2::@1 // out(c) @@ -489,7 +489,7 @@ out2: { // [10] call out // [12] phi from out2::@1 to out [phi:out2::@1->out] // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near jsr out // out2::@return // } diff --git a/src/test/ref/liverange-9.log b/src/test/ref/liverange-9.log index 090151016..fd8477728 100644 --- a/src/test/ref/liverange-9.log +++ b/src/test/ref/liverange-9.log @@ -417,7 +417,7 @@ main: { __b1: // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near outsw_from___b1: jsr outsw jmp __b2 @@ -442,13 +442,13 @@ outsw: { out_from_outsw: // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near jsr out jmp __b1 // outsw::@1 __b1: // [9] outw::c#0 = outsw::c#0 - // [10] call outw + // [10] call outw -- call_phi_near jsr outw jmp __breturn // outsw::@return @@ -482,7 +482,7 @@ outw: { // [12] phi from outw to out [phi:outw->out] out_from_outw: // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near jsr out jmp __b1 // outw::@1 @@ -494,7 +494,7 @@ outw: { // [12] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near jsr out jmp __breturn // outw::@return @@ -595,7 +595,7 @@ main: { // outsw(c) // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near jsr outsw // main::@2 // for(char c: 0..39 ) @@ -617,12 +617,12 @@ outsw: { // [12] phi from outsw to out [phi:outsw->out] // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near jsr out // outsw::@1 // outw(c) // [9] outw::c#0 = outsw::c#0 - // [10] call outw + // [10] call outw -- call_phi_near jsr outw // outsw::@return // } @@ -656,7 +656,7 @@ outw: { // [17] call out // [12] phi from outw to out [phi:outw->out] // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near jsr out // outw::@1 // out(c&0x0f) @@ -666,7 +666,7 @@ outw: { // [19] call out // [12] phi from outw::@1 to out [phi:outw::@1->out] // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near jsr out // outw::@return // } diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index e61f1eb79..87040feb9 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -325,7 +325,7 @@ main: { // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] incw1_from_main: - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near lda #<0 sta.z w1 lda #>0 @@ -339,7 +339,7 @@ main: { // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from___b1: - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near lda #<0 sta.z w2 lda #>0 @@ -353,7 +353,7 @@ main: { // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] incw1_from___b2: - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -363,7 +363,7 @@ main: { // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] incw2_from___b3: - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near jsr incw2 jmp __b4 // main::@4 @@ -484,7 +484,7 @@ main: { // incw1() // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near lda #<0 sta.z w1 sta.z w1+1 @@ -494,7 +494,7 @@ main: { // incw2() // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near lda #<0 sta.z w2 sta.z w2+1 @@ -504,14 +504,14 @@ main: { // incw1() // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // incw2() // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near jsr incw2 // main::@4 // SCREEN[0] = w1 diff --git a/src/test/ref/liverange-problem-0.log b/src/test/ref/liverange-problem-0.log index 914eb6461..53d595e94 100644 --- a/src/test/ref/liverange-problem-0.log +++ b/src/test/ref/liverange-problem-0.log @@ -305,7 +305,7 @@ __start: { // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near lda #<$400 sta.z MEM lda #>$400 @@ -323,7 +323,7 @@ __start: { // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] malloc_from___b2: - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near jsr malloc // [6] malloc::return#3 = malloc::return#0 jmp __b3 @@ -335,7 +335,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [9] call main + // [9] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -458,7 +458,7 @@ __start: { // byte* SCREEN_1 = malloc() // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near lda #<$400 sta.z MEM lda #>$400 @@ -475,7 +475,7 @@ __start: { // byte* SCREEN_2 = malloc() // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near jsr malloc // byte* SCREEN_2 = malloc() // [6] malloc::return#3 = malloc::return#0 @@ -483,7 +483,7 @@ __start: { // [7] SCREEN_2#0 = malloc::return#3 // [8] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1] // __start::@1 - // [9] call main + // [9] call main -- call_phi_near jsr main // __start::@return // [10] return diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index 458f3370d..928b6882c 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -300,7 +300,7 @@ main: { // [1] call inci // [12] phi from main to inci [phi:main->inci] inci_from_main: - // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 + // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near ldy #0 jsr inci // [2] inci::return#0 = inci::return#2 @@ -315,7 +315,7 @@ main: { // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] inci_from___b1: - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near jsr inci // [6] inci::return#1 = inci::return#2 jmp __b2 @@ -415,7 +415,7 @@ main: { // inci() // [1] call inci // [12] phi from main to inci [phi:main->inci] - // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 + // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near ldy #0 jsr inci // inci() @@ -430,7 +430,7 @@ main: { // inci() // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near jsr inci // inci() // [6] inci::return#1 = inci::return#2 diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index c8bb0b78d..1333b4a9d 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -221,7 +221,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -338,7 +338,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/longjump2.log b/src/test/ref/longjump2.log index 124820e22..28d9a1199 100644 --- a/src/test/ref/longjump2.log +++ b/src/test/ref/longjump2.log @@ -225,7 +225,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] + // [5] phi from main to long1 [phi:main->long1] -- call_phi_near long1_from_main: jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -234,7 +234,7 @@ main: { // main::@1 __b1: // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] + // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near long2_from___b1: jsr long2 jmp __breturn @@ -881,13 +881,13 @@ Score: 10640 main: { // long1() // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] + // [5] phi from main to long1 [phi:main->long1] -- call_phi_near jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // long2() // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] + // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near jsr long2 // main::@return // } diff --git a/src/test/ref/loop-memset-min.log b/src/test/ref/loop-memset-min.log index 58b097890..050eaf119 100644 --- a/src/test/ref/loop-memset-min.log +++ b/src/test/ref/loop-memset-min.log @@ -276,7 +276,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memset - // [3] phi from main to memset [phi:main->memset] + // [3] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset jmp __breturn @@ -387,7 +387,7 @@ Score: 523 main: { // memset(SCREEN, 'c', 1000) // [1] call memset - // [3] phi from main to memset [phi:main->memset] + // [3] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // main::@return // } diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index ea713553e..4a4be12eb 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -200,7 +200,7 @@ main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 lda #'0' sta SCREEN - // [1] call d + // [1] call d -- call_phi_near jsr d // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -208,7 +208,7 @@ main: { // main::@1 __b1: // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] + // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near b_from___b1: jsr b jmp __breturn @@ -240,7 +240,7 @@ b: { jmp __b1 // b::@1 __b1: - // [9] call d + // [9] call d -- call_phi_near jsr d jmp __b2 // b::@2 @@ -317,13 +317,13 @@ main: { lda #'0' sta SCREEN // d() - // [1] call d + // [1] call d -- call_phi_near jsr d // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // b() // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] + // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near jsr b // main::@return // } @@ -350,7 +350,7 @@ b: { // b::@1 __b1: // d() - // [9] call d + // [9] call d -- call_phi_near jsr d // b::@2 // for( byte i: 0..3) diff --git a/src/test/ref/loop-problem2.log b/src/test/ref/loop-problem2.log index 7a74d1625..100d011b9 100644 --- a/src/test/ref/loop-problem2.log +++ b/src/test/ref/loop-problem2.log @@ -243,7 +243,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] + // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -252,7 +252,7 @@ main: { // main::@1 __b1: // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near mode_ctrl_from___b1: jsr mode_ctrl jmp __breturn @@ -385,13 +385,13 @@ Score: 794 main: { // print_cls() // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] + // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mode_ctrl() // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near jsr mode_ctrl // main::@return // } diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index 290ef02b1..c9022a575 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -371,7 +371,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label screen = $400 // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near scan_for_lowest_from_main: jsr scan_for_lowest // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 @@ -552,7 +552,7 @@ main: { .label screen = $400 // char hit_check=scan_for_lowest() // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near jsr scan_for_lowest // char hit_check=scan_for_lowest() // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index 637540734..bf1dd5e41 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -384,7 +384,7 @@ main: { .label result = 2 .label kaputt = $a // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] + // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near mul16u_from_main: jsr mul16u // [2] mul16u::return#2 = mul16u::res#2 @@ -591,7 +591,7 @@ main: { .label kaputt = $a // dword result = mul16u(4,123) // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] + // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near jsr mul16u // dword result = mul16u(4,123) // [2] mul16u::return#2 = mul16u::res#2 diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 47c442d02..20bd0994d 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -248,7 +248,7 @@ main: { lda #'a' sta screen+$28 // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] + // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near popup_selector_from_main: jsr popup_selector jmp __b1 @@ -356,7 +356,7 @@ main: { sta screen+$28 // popup_selector() // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] + // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near jsr popup_selector // main::@1 // screen[41] = opcode diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index 7e7d6ce10..deb69c6c0 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -204,7 +204,7 @@ main: { // main::@1 __b1: // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] + // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near nest_from___b1: jsr nest jmp __b2 @@ -314,7 +314,7 @@ main: { __b1: // nest() // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] + // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near jsr nest // main::@2 // while (--i>0) diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index 56e80a72b..d661e5dd3 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -430,7 +430,7 @@ main: { // main::@2 __b2: // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near nest1_from___b2: jsr nest1 jmp __b4 @@ -482,7 +482,7 @@ nest1: { // nest1::@2 __b2: // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near nest2_from___b2: jsr nest2 jmp __b4 @@ -679,7 +679,7 @@ main: { __b2: // nest1() // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near jsr nest1 // main::@4 // while (--j>0) @@ -720,7 +720,7 @@ nest1: { __b2: // nest2() // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near jsr nest2 // nest1::@4 // while (--j>0) diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index 71ea05214..24dc49f7e 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -257,7 +257,7 @@ main: { // main::@1 __b1: // [2] b::i#0 = main::i#2 - // [3] call b + // [3] call b -- call_phi_near jsr b jmp __b2 // main::@2 @@ -279,7 +279,7 @@ main: { b: { // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] + // [10] phi from b to c [phi:b->c] -- call_phi_near c_from_b: jsr c jmp __breturn @@ -391,7 +391,7 @@ main: { __b1: // b(i) // [2] b::i#0 = main::i#2 - // [3] call b + // [3] call b -- call_phi_near jsr b // main::@2 // for(byte i:0..100) @@ -412,7 +412,7 @@ b: { // c(i) // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] + // [10] phi from b to c [phi:b->c] -- call_phi_near jsr c // b::@return // } diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 0925f45ce..408edd611 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -298,7 +298,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -434,12 +434,12 @@ __start: { // __start::__init1 // byte* BYTES = malloc(0x100) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/malloc-1.log b/src/test/ref/malloc-1.log index 72f6b7643..310f06395 100644 --- a/src/test/ref/malloc-1.log +++ b/src/test/ref/malloc-1.log @@ -325,7 +325,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -334,7 +334,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -486,12 +486,12 @@ __start: { // __start::__init1 // word* WORDS = malloc(0x200) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index 3a6c0f1db..ea377248e 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -496,7 +496,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near lda #SCREEN @@ -523,7 +523,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near lda #CHARGEN @@ -722,7 +722,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near lda #SCREEN @@ -749,7 +749,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near lda #CHARGEN diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index ff7dcf584..65e8f759a 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -622,7 +622,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near lda #CAMELOT @@ -646,7 +646,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near lda #<__5 sta.z memcpy.source lda #>__5 @@ -940,7 +940,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near lda #CAMELOT @@ -961,7 +961,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near lda #<__5 sta.z memcpy.source lda #>__5 diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index a27fca8c9..b46ea16fc 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -451,7 +451,7 @@ main: { // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near lda #HEAP_TOP @@ -468,7 +468,7 @@ main: { // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] malloc_from___b2: - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near jsr malloc jmp __b3 // main::@3 @@ -629,7 +629,7 @@ main: { // unsigned char* buf1 = malloc(100) // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near lda #HEAP_TOP @@ -645,7 +645,7 @@ main: { // unsigned char* buf2 = malloc(100) // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near jsr malloc // main::@3 // unsigned char* buf2 = malloc(100) diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 88b764718..8e9709be8 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -1515,7 +1515,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1528,7 +1528,7 @@ __start: { main: { .label __5 = 6 .label i = $a - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1575,7 +1575,7 @@ main: { __b2: // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near prepend_from___b2: jsr prepend jmp __b5 @@ -1598,7 +1598,7 @@ main: { jmp __b3 // main::@3 __b3: - // [14] call sum + // [14] call sum -- call_phi_near jsr sum // [15] sum::return#2 = sum::s#3 jmp __b6 @@ -1611,7 +1611,7 @@ main: { // [40] phi from main::@6 to print_char [phi:main::@6->print_char] print_char_from___b6: // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near jsr print_char jmp __b7 // main::@7 @@ -1626,7 +1626,7 @@ main: { jmp __b4 // main::@4 __b4: - // [22] call end + // [22] call end -- call_phi_near jsr end jmp __breturn // main::@return @@ -1652,7 +1652,7 @@ start: { prepend: { .label new = 4 .label x = $a - // [27] call alloc + // [27] call alloc -- call_phi_near jsr alloc // [28] alloc::return#2 = alloc::return#0 jmp __b1 @@ -1765,7 +1765,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [45] call start + // [45] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -1784,7 +1784,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint + // [49] call print_uint -- call_phi_near jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1792,7 +1792,7 @@ end: { // end::@2 __b2: // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __breturn @@ -1843,7 +1843,7 @@ print_uint: { // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1853,7 +1853,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1919,7 +1919,7 @@ print_uchar: { // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1933,7 +1933,7 @@ print_uchar: { // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2169,7 +2169,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -2180,7 +2180,7 @@ main: { .label __5 = 6 .label i = $a // start() - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi main::c#7 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -2215,7 +2215,7 @@ main: { // prepend(i) // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near jsr prepend // main::@5 // for(unsigned int i : 0..2999) @@ -2234,7 +2234,7 @@ main: { // [13] phi from main::@5 to main::@3 [phi:main::@5->main::@3] // main::@3 // sum() - // [14] call sum + // [14] call sum -- call_phi_near jsr sum // [15] sum::return#2 = sum::s#3 // main::@6 @@ -2245,7 +2245,7 @@ main: { // [18] call print_char // [40] phi from main::@6 to print_char [phi:main::@6->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near jsr print_char // main::@7 // for(unsigned char c : 0..4) @@ -2257,7 +2257,7 @@ main: { // [21] phi from main::@7 to main::@4 [phi:main::@7->main::@4] // main::@4 // end() - // [22] call end + // [22] call end -- call_phi_near jsr end // main::@return // } @@ -2283,7 +2283,7 @@ prepend: { .label new = 4 .label x = $a // alloc() - // [27] call alloc + // [27] call alloc -- call_phi_near jsr alloc // [28] alloc::return#2 = alloc::return#0 // prepend::@1 @@ -2399,7 +2399,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [45] call start + // [45] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -2419,13 +2419,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint + // [49] call print_uint -- call_phi_near jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near jsr print_ln // end::@return // } @@ -2475,7 +2475,7 @@ print_uint: { ldx.z w+1 // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2483,7 +2483,7 @@ print_uint: { ldx.z w // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2546,7 +2546,7 @@ print_uchar: { // Table of hexadecimal digits // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2559,7 +2559,7 @@ print_uchar: { // [73] call print_char // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index 6498dc65b..717ae4bad 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -2315,7 +2315,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2330,7 +2330,7 @@ main: { .label v = $19 .label count = 2 // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] + // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near makechar_from_main: jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] @@ -2338,7 +2338,7 @@ main: { jmp __b4 // main::@4 __b4: - // [8] call start + // [8] call start -- call_phi_near jsr start jmp __b5 // main::@5 @@ -2378,7 +2378,7 @@ main: { // [16] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 lda.z block sta CIA2 - // [17] call end + // [17] call end -- call_phi_near /* Reset screen colors */ jsr end jmp __breturn @@ -2395,7 +2395,7 @@ main: { /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] doplasma_from___b2: - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near lda #SCREEN1 @@ -2411,7 +2411,7 @@ main: { /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] doplasma_from___b6: - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near lda #SCREEN2 @@ -2565,7 +2565,7 @@ makechar: { jmp __b6 // makechar::@6 __b6: - // [42] call rand + // [42] call rand -- call_phi_near jsr rand // [43] rand::return#2 = rand::return#0 jmp __b10 @@ -2623,7 +2623,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [53] call start + // [53] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -2642,7 +2642,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint + // [57] call print_uint -- call_phi_near jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2650,7 +2650,7 @@ end: { // end::@2 __b2: // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __breturn @@ -2897,7 +2897,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2908,7 +2908,7 @@ print_uint: { // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2974,7 +2974,7 @@ print_uchar: { // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2988,7 +2988,7 @@ print_uchar: { // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3361,7 +3361,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -3374,12 +3374,12 @@ main: { .label count = 2 // makechar() // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] + // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] // main::@4 // start() - // [8] call start + // [8] call start -- call_phi_near jsr start // main::@5 // block = CIA2->PORT_A @@ -3421,7 +3421,7 @@ main: { lda.z block sta CIA2 // end() - // [17] call end + // [17] call end -- call_phi_near /* Reset screen colors */ jsr end // main::@return @@ -3435,7 +3435,7 @@ main: { // [20] call doplasma /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near lda #SCREEN1 @@ -3450,7 +3450,7 @@ main: { // [22] call doplasma /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near lda #SCREEN2 @@ -3597,7 +3597,7 @@ makechar: { // makechar::@6 __b6: // rand() - // [42] call rand + // [42] call rand -- call_phi_near jsr rand // [43] rand::return#2 = rand::return#0 // makechar::@10 @@ -3653,7 +3653,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [53] call start + // [53] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -3673,13 +3673,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint + // [57] call print_uint -- call_phi_near jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near jsr print_ln // end::@return // } @@ -3932,7 +3932,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3941,7 +3941,7 @@ print_uint: { // [97] call print_uchar // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4004,7 +4004,7 @@ print_uchar: { // Table of hexadecimal digits // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4017,7 +4017,7 @@ print_uchar: { // [110] call print_char // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index a29fd50cf..f2b536ec9 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -2079,7 +2079,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2091,7 +2091,7 @@ __start: { // main main: { .label i = $d - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -2125,7 +2125,7 @@ main: { jmp __b3 // main::@3 __b3: - // [10] call end + // [10] call end -- call_phi_near jsr end jmp __breturn // main::@return @@ -2138,7 +2138,7 @@ main: { // main::@2 __b2: // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] + // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near sum_from___b2: jsr sum // [14] sum::return#2 = sum::s#3 @@ -2146,7 +2146,7 @@ main: { // main::@4 __b4: // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal + // [16] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2156,7 +2156,7 @@ main: { // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln jmp __b6 // main::@6 @@ -2198,7 +2198,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [24] call start + // [24] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -2217,7 +2217,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint + // [28] call print_uint -- call_phi_near jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2227,7 +2227,7 @@ end: { // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // end::@return @@ -2320,7 +2320,7 @@ print_uint_decimal: { .label w = 2 // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near utoa_from_print_uint_decimal: jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2329,7 +2329,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near print_str_from___b1: jsr print_str jmp __breturn @@ -2382,7 +2382,7 @@ print_uint: { // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2393,7 +2393,7 @@ print_uint: { // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2506,7 +2506,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [76] utoa_append::return#0 = utoa_append::value#2 @@ -2562,7 +2562,7 @@ print_str: { // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2596,7 +2596,7 @@ print_uchar: { // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2610,7 +2610,7 @@ print_uchar: { // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3007,7 +3007,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -3017,7 +3017,7 @@ __start: { main: { .label i = $d // start() - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi print_line_cursor#22 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3047,7 +3047,7 @@ main: { // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // end() - // [10] call end + // [10] call end -- call_phi_near jsr end // main::@return // } @@ -3058,21 +3058,21 @@ main: { __b2: // sum() // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] + // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near jsr sum // sum() // [14] sum::return#2 = sum::s#3 // main::@4 // print_uint_decimal(sum()) // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal + // [16] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_ln() // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln // main::@6 // for(i=0;i<6;i++) @@ -3114,7 +3114,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [24] call start + // [24] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -3134,14 +3134,14 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint + // [28] call print_uint -- call_phi_near jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near jsr print_ln // end::@return // } @@ -3231,13 +3231,13 @@ print_uint_decimal: { // utoa(w, decimal_digits, DECIMAL) // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near jsr print_str // print_uint_decimal::@return // } @@ -3286,7 +3286,7 @@ print_uint: { // [54] call print_uchar // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3295,7 +3295,7 @@ print_uint: { // [56] call print_uchar // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -3404,7 +3404,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [76] utoa_append::return#0 = utoa_append::value#2 @@ -3457,7 +3457,7 @@ print_str: { // [84] call print_char // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3490,7 +3490,7 @@ print_uchar: { // Table of hexadecimal digits // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3503,7 +3503,7 @@ print_uchar: { // [92] call print_char // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index 2d2c4c18b..c022d9e19 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1162,7 +1162,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1173,7 +1173,7 @@ __start: { } // main main: { - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1181,7 +1181,7 @@ main: { // main::@1 __b1: // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] + // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near round_from___b1: jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1190,7 +1190,7 @@ main: { // main::@2 __b2: // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] + // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near round_from___b2: jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1199,7 +1199,7 @@ main: { // main::@3 __b3: // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] + // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near round_from___b3: jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1208,7 +1208,7 @@ main: { // main::@4 __b4: // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] + // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near round_from___b4: jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1217,7 +1217,7 @@ main: { // main::@5 __b5: // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] + // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near round_from___b5: jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1226,7 +1226,7 @@ main: { // main::@6 __b6: // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] + // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near round_from___b6: jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1235,7 +1235,7 @@ main: { // main::@7 __b7: // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] + // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near round_from___b7: jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1244,7 +1244,7 @@ main: { // main::@8 __b8: // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] + // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near round_from___b8: jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1253,7 +1253,7 @@ main: { // main::@9 __b9: // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] + // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near round_from___b9: jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1262,7 +1262,7 @@ main: { // main::@10 __b10: // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] + // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near round_from___b10: jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1270,7 +1270,7 @@ main: { jmp __b11 // main::@11 __b11: - // [28] call end + // [28] call end -- call_phi_near jsr end jmp __breturn // main::@return @@ -1411,7 +1411,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [49] call start + // [49] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -1430,7 +1430,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint + // [53] call print_uint -- call_phi_near jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1438,7 +1438,7 @@ end: { // end::@2 __b2: // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __breturn @@ -1462,7 +1462,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1473,7 +1473,7 @@ print_uint: { // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1539,7 +1539,7 @@ print_uchar: { // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1553,7 +1553,7 @@ print_uchar: { // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1802,7 +1802,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -1811,72 +1811,72 @@ __start: { // main main: { // start() - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // main::@1 // round() // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] + // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // round() // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] + // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // round() // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] + // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // round() // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] + // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // round() // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] + // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // round() // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] + // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // round() // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] + // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // round() // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] + // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // round() // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] + // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // round() // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] + // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // end() - // [28] call end + // [28] call end -- call_phi_near jsr end // main::@return // } @@ -2016,7 +2016,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [49] call start + // [49] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -2036,13 +2036,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint + // [53] call print_uint -- call_phi_near jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near jsr print_ln // end::@return // } @@ -2064,7 +2064,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2073,7 +2073,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2136,7 +2136,7 @@ print_uchar: { // Table of hexadecimal digits // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2149,7 +2149,7 @@ print_uchar: { // [73] call print_char // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index a5d1cdb6c..c77e7eb9b 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -1304,7 +1304,7 @@ main: { .label b = $929 .label r = $a // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] + // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near mulf_init_from_main: jsr mulf_init jmp __b4 @@ -1334,7 +1334,7 @@ main: { __b3: // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR - // [6] call mulf16u + // [6] call mulf16u -- call_phi_near jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 jmp __b5 @@ -1344,7 +1344,7 @@ main: { // [9] *BORDER_COLOR = -- *BORDER_COLOR -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDER_COLOR // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong + // [11] call print_ulong -- call_phi_near jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: @@ -1702,7 +1702,7 @@ print_ulong: { // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint jmp __b1 // print_ulong::@1 @@ -1716,7 +1716,7 @@ print_ulong: { // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_ulong::@return @@ -1735,7 +1735,7 @@ print_uint: { // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1746,7 +1746,7 @@ print_uint: { // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2039,7 +2039,7 @@ main: { .label r = $a // mulf_init() // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] + // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near jsr mulf_init // main::@4 // asm @@ -2064,7 +2064,7 @@ main: { // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // dword r = mulf16u(a, b) - // [6] call mulf16u + // [6] call mulf16u -- call_phi_near jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 // main::@5 @@ -2074,7 +2074,7 @@ main: { dec BORDER_COLOR // print_ulong(r) // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong + // [11] call print_ulong -- call_phi_near jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [3] phi print_char_cursor#15 = SCREEN [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -2431,7 +2431,7 @@ print_ulong: { // [47] call print_uint // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2443,7 +2443,7 @@ print_ulong: { // [49] call print_uint // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@return // } @@ -2461,7 +2461,7 @@ print_uint: { // [53] call print_uchar // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2470,7 +2470,7 @@ print_uint: { // [55] call print_uchar // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2496,7 +2496,7 @@ print_uchar: { // Table of hexadecimal digits // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2509,7 +2509,7 @@ print_uchar: { // [63] call print_char // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/missing-band.log b/src/test/ref/missing-band.log index 344b3707d..f452c37cb 100644 --- a/src/test/ref/missing-band.log +++ b/src/test/ref/missing-band.log @@ -198,7 +198,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label a = 2 - // [1] call foo + // [1] call foo -- call_phi_near jsr foo // [2] foo::return#0 = foo::return#1 jmp __b1 @@ -287,7 +287,7 @@ Score: 39 main: { .label a = 2 // foo(1) - // [1] call foo + // [1] call foo -- call_phi_near jsr foo // [2] foo::return#0 = foo::return#1 // main::@1 diff --git a/src/test/ref/modglobal.log b/src/test/ref/modglobal.log index 955b0c772..c76028bca 100644 --- a/src/test/ref/modglobal.log +++ b/src/test/ref/modglobal.log @@ -394,7 +394,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near lda #0 jsr inccnt // [2] inccnt::return#0 = inccnt::return#2 @@ -413,7 +413,7 @@ main: { inccnt_from___b1: // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near jsr inccnt // [7] inccnt::return#1 = inccnt::return#2 jmp __b2 @@ -527,7 +527,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near txa jsr inccnt // inccnt() @@ -547,7 +547,7 @@ main: { // [13] phi from main::@1 to inccnt [phi:main::@1->inccnt] // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near jsr inccnt // inccnt() // [7] inccnt::return#1 = inccnt::return#2 diff --git a/src/test/ref/modglobalmin.log b/src/test/ref/modglobalmin.log index be74abc80..1868da3ec 100644 --- a/src/test/ref/modglobalmin.log +++ b/src/test/ref/modglobalmin.log @@ -215,7 +215,7 @@ main: { // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] inccnt_from_main: - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near ldx #0 jsr inccnt jmp __b1 @@ -228,7 +228,7 @@ main: { // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] inccnt_from___b1: - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near jsr inccnt jmp __b2 // main::@2 @@ -305,7 +305,7 @@ main: { // inccnt() // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near ldx #0 jsr inccnt // main::@1 @@ -318,7 +318,7 @@ main: { // inccnt() // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near jsr inccnt // main::@2 // SCREEN[1]=++cnt; diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index 200b2bb19..7fc828d4b 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -516,7 +516,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u + // [5] call mul8u -- call_phi_near jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 jmp __b4 @@ -757,7 +757,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u + // [5] call mul8u -- call_phi_near jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 // main::@4 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index ba50c3453..4028e59da 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1759,7 +1759,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [8] call main + // [8] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1782,7 +1782,7 @@ plex_irq: { jmp __b3 // plex_irq::@3 __b3: - // [13] call plexShowSprite + // [13] call plexShowSprite -- call_phi_near jsr plexShowSprite jmp plexFreeNextYpos1 // plex_irq::plexFreeNextYpos1 @@ -1851,7 +1851,7 @@ plex_irq: { main: { // asm { sei } sei - // [27] call init + // [27] call init -- call_phi_near jsr init // [28] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1859,7 +1859,7 @@ main: { // main::@1 __b1: // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] + // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near loop_from___b1: jsr loop jmp __breturn @@ -1981,7 +1981,7 @@ init: { sta D011 // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] + // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near plexInit_from_init: jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] @@ -2147,7 +2147,7 @@ loop: { // [90] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near plexSort_from___b5: jsr plexSort jmp __b6 @@ -2756,7 +2756,7 @@ __start: { sta.z framedone // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [8] call main + // [8] call main -- call_phi_near jsr main // __start::@return // [9] return @@ -2777,7 +2777,7 @@ plex_irq: { // plex_irq::@3 __b3: // plexShowSprite() - // [13] call plexShowSprite + // [13] call plexShowSprite -- call_phi_near jsr plexShowSprite // plex_irq::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; @@ -2847,13 +2847,13 @@ main: { // asm { sei } sei // init() - // [27] call init + // [27] call init -- call_phi_near jsr init // [28] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] + // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near jsr loop // main::@return // } @@ -2989,7 +2989,7 @@ init: { // plexInit(SCREEN) // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] + // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] // [58] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -3153,7 +3153,7 @@ loop: { inc BORDER_COLOR // plexSort() // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near jsr plexSort // loop::@6 // *BORDER_COLOR = GREEN diff --git a/src/test/ref/multiply-16bit-const.log b/src/test/ref/multiply-16bit-const.log index d043c37d7..a2bb26f85 100644 --- a/src/test/ref/multiply-16bit-const.log +++ b/src/test/ref/multiply-16bit-const.log @@ -1638,7 +1638,7 @@ main: { .label __10 = 2 .label __11 = 2 // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1793,7 +1793,7 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal + // [13] call print_ulong_decimal -- call_phi_near jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1801,7 +1801,7 @@ main: { // main::@3 __b3: // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near print_ln_from___b3: jsr print_ln jmp __b4 @@ -1837,7 +1837,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] + // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1853,7 +1853,7 @@ print_ulong_decimal: { .label w = 2 // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near ultoa_from_print_ulong_decimal: jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] @@ -1861,7 +1861,7 @@ print_ulong_decimal: { jmp __b1 // print_ulong_decimal::@1 __b1: - // [24] call print_str + // [24] call print_str -- call_phi_near jsr print_str jmp __breturn // print_ulong_decimal::@return @@ -2076,7 +2076,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near ultoa_append_from___b5: jsr ultoa_append // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2133,7 +2133,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char + // [64] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2473,7 +2473,7 @@ main: { .label __11 = 2 // print_cls() // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#13 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2625,13 +2625,13 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal + // [13] call print_ulong_decimal -- call_phi_near jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near jsr print_ln // main::@4 // i+=333 @@ -2665,7 +2665,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] + // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2680,12 +2680,12 @@ print_ulong_decimal: { // ultoa(w, decimal_digits_long, DECIMAL) // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] // print_ulong_decimal::@1 // print_str(decimal_digits_long) - // [24] call print_str + // [24] call print_str -- call_phi_near jsr print_str // print_ulong_decimal::@return // } @@ -2893,7 +2893,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2948,7 +2948,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char + // [64] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index 9730630ef..7aef83712 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -318,7 +318,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near ldx #1 jsr foo // [3] foo::return#2 = foo::return#0 @@ -339,7 +339,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near ldx #2 jsr foo // [7] foo::return#3 = foo::return#0 @@ -476,7 +476,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near ldx #1 jsr foo // foo(1, &y1) @@ -497,7 +497,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near ldx #2 jsr foo // foo(2, &y2) diff --git a/src/test/ref/nomodify-3.log b/src/test/ref/nomodify-3.log index 54e25b59f..c417d2987 100644 --- a/src/test/ref/nomodify-3.log +++ b/src/test/ref/nomodify-3.log @@ -133,7 +133,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -204,7 +204,7 @@ __start: { sta.z i // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/nomodify-4.log b/src/test/ref/nomodify-4.log index 7acfaf501..2967bc6f7 100644 --- a/src/test/ref/nomodify-4.log +++ b/src/test/ref/nomodify-4.log @@ -140,7 +140,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -151,7 +151,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near lda #'b' jsr print jmp __breturn @@ -219,7 +219,7 @@ main: { // print('a') // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -227,7 +227,7 @@ main: { // print('b') // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near lda #'b' jsr print // main::@return diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index d4b232a12..9004c2050 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -606,7 +606,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near gen_char3_from___b2: jsr gen_char3 jmp __b4 @@ -868,7 +868,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near jsr gen_char3 // main::@4 // charset = charset+8 diff --git a/src/test/ref/null-constant-1.log b/src/test/ref/null-constant-1.log index 1c2cc9f25..5927f14f1 100644 --- a/src/test/ref/null-constant-1.log +++ b/src/test/ref/null-constant-1.log @@ -249,7 +249,7 @@ main: { // [1] call get // [10] phi from main to get [phi:main->get] get_from_main: - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near lda #SCREEN @@ -265,7 +265,7 @@ main: { // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near lda #<0 sta.z get.ptr lda #>0 @@ -379,7 +379,7 @@ main: { // get(SCREEN) // [1] call get // [10] phi from main to get [phi:main->get] - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near lda #SCREEN @@ -395,7 +395,7 @@ main: { // get(NULL) // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near lda #<0 sta.z get.ptr sta.z get.ptr+1 diff --git a/src/test/ref/number-conversion.log b/src/test/ref/number-conversion.log index db482258b..7c834dd71 100644 --- a/src/test/ref/number-conversion.log +++ b/src/test/ref/number-conversion.log @@ -1393,7 +1393,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near ldy #TYPEID_SIGNED_CHAR jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1408,7 +1408,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1423,7 +1423,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1438,7 +1438,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1453,7 +1453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1468,7 +1468,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1483,7 +1483,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1498,7 +1498,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1513,7 +1513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1529,7 +1529,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1544,7 +1544,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1559,7 +1559,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -1574,7 +1574,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -1589,7 +1589,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1604,7 +1604,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -1619,7 +1619,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -1634,7 +1634,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -1649,7 +1649,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -1664,7 +1664,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -1679,7 +1679,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -1694,7 +1694,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -1710,7 +1710,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -1725,7 +1725,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -1740,7 +1740,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -1755,7 +1755,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -1770,7 +1770,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -1785,7 +1785,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -1800,7 +1800,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -1815,7 +1815,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -1830,7 +1830,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -1845,7 +1845,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -1860,7 +1860,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -1875,7 +1875,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -1890,7 +1890,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -1905,7 +1905,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2199,7 +2199,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near tay jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2211,7 +2211,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near tay jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2223,7 +2223,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near tay jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2235,7 +2235,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near tay jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -2247,7 +2247,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near tay jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2259,7 +2259,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near tay jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2271,7 +2271,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near tay jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2283,7 +2283,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near tay jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2295,7 +2295,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near tay jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2308,7 +2308,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near tay jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2320,7 +2320,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near tay jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2332,7 +2332,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near tay jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2344,7 +2344,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near tay jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2356,7 +2356,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near tay jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2368,7 +2368,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near tay jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2380,7 +2380,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near tay jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2392,7 +2392,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near tay jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2404,7 +2404,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near tay jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2416,7 +2416,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near tay jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2428,7 +2428,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near tay jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2440,7 +2440,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near tay jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2453,7 +2453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near tay jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2465,7 +2465,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near tay jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2477,7 +2477,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near tay jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2489,7 +2489,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near tay jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2501,7 +2501,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near tay jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2513,7 +2513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near tay jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -2525,7 +2525,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near tay jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -2537,7 +2537,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near tay jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -2549,7 +2549,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near tay jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -2561,7 +2561,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near tay jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -2573,7 +2573,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near tay jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -2585,7 +2585,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near tay jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -2597,7 +2597,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near tay jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -2609,7 +2609,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // main::@return diff --git a/src/test/ref/number-ternary-fail-2.log b/src/test/ref/number-ternary-fail-2.log index 99ddb8acf..da320d2ee 100644 --- a/src/test/ref/number-ternary-fail-2.log +++ b/src/test/ref/number-ternary-fail-2.log @@ -560,7 +560,7 @@ main: { .label height = 6*2+3 .label maze = malloc.return // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] + // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near malloc_from_main: jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] @@ -569,7 +569,7 @@ main: { // main::@1 __b1: // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near SolveMaze_from___b1: jsr SolveMaze jmp __b2 @@ -742,13 +742,13 @@ main: { .label maze = malloc.return // malloc(width * height) // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] + // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // SolveMaze(maze, width, height) // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near jsr SolveMaze // main::@2 // asm diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index 88a159a46..78c5c6e98 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -609,14 +609,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testBytes + // [1] call testBytes -- call_phi_near jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testSBytes + // [3] call testSBytes -- call_phi_near jsr testSBytes jmp __breturn // main::@return @@ -765,12 +765,12 @@ Score: 180 // main main: { // testBytes() - // [1] call testBytes + // [1] call testBytes -- call_phi_near jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testSBytes() - // [3] call testSBytes + // [3] call testSBytes -- call_phi_near jsr testSBytes // main::@return // } diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 3eeee67ea..349d1069a 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -318,7 +318,7 @@ main: { // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] line_from___b1: - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near jsr line jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] line_from___b2: - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near jsr line jmp __b4 // main::@4 @@ -368,7 +368,7 @@ line: { // [14] call plot // [18] phi from line to plot [phi:line->plot] plot_from_line: - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near jsr plot jmp __b1 // line::@1 @@ -379,7 +379,7 @@ line: { // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] plot_from___b1: - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near jsr plot jmp __breturn // line::@return @@ -491,7 +491,7 @@ main: { tax // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near jsr line // main::@3 // for(byte i : 0..8) @@ -513,7 +513,7 @@ main: { tax // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near jsr line // main::@4 // for(byte j : 10..18) @@ -534,7 +534,7 @@ line: { // [13] plot::x#0 = line::l#2 // [14] call plot // [18] phi from line to plot [phi:line->plot] - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near jsr plot // line::@1 // plot(l+20) @@ -543,7 +543,7 @@ line: { axs #-[$14] // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near jsr plot // line::@return // } diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index 52b2b1b17..7fa4b33d3 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -308,7 +308,7 @@ main: { // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] plot_from___b1: - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near jsr plot jmp __b4 // main::@4 @@ -333,7 +333,7 @@ main: { // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] plot_from___b2: - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near jsr plot jmp __b5 // main::@5 @@ -358,7 +358,7 @@ main: { // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] plot_from___b3: - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near jsr plot jmp __b6 // main::@6 @@ -478,7 +478,7 @@ main: { // [2] plot::x#0 = main::i#2 // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near jsr plot // main::@4 // for(byte i : 0..10) @@ -498,7 +498,7 @@ main: { // [7] plot::x#1 = main::j#2 // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near jsr plot // main::@5 // for(byte j : 0..10) @@ -518,7 +518,7 @@ main: { // [12] plot::x#2 = main::k#2 // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near jsr plot // main::@6 // for(byte k : 0..10) diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 3b95a5fc5..896fa94b1 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -369,7 +369,7 @@ main: { fill_from_main: // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near lda #<$400 sta.z fill.screen lda #>$400 @@ -385,7 +385,7 @@ main: { fill_from___b1: // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near lda #<$2000 sta.z fill.screen lda #>$2000 @@ -537,7 +537,7 @@ main: { // [5] phi from main to fill [phi:main->fill] // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near lda #<$400 sta.z fill.screen lda #>$400 @@ -550,7 +550,7 @@ main: { // [5] phi from main::@1 to fill [phi:main::@1->fill] // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near lda #<$2000 sta.z fill.screen lda #>$2000 diff --git a/src/test/ref/plus4-kbhit.log b/src/test/ref/plus4-kbhit.log index 88c782d0d..8fdc1fc16 100644 --- a/src/test/ref/plus4-kbhit.log +++ b/src/test/ref/plus4-kbhit.log @@ -226,7 +226,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call kbhit + // [2] call kbhit -- call_phi_near jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 jmp __b2 @@ -338,7 +338,7 @@ main: { // main::@1 __b1: // kbhit() - // [2] call kbhit + // [2] call kbhit -- call_phi_near jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 // main::@2 diff --git a/src/test/ref/plus4-keyboard-test.log b/src/test/ref/plus4-keyboard-test.log index 3e88ecc22..0fa8a6a96 100644 --- a/src/test/ref/plus4-keyboard-test.log +++ b/src/test/ref/plus4-keyboard-test.log @@ -573,7 +573,7 @@ main: { // asm { sei } sei // [1] call memset - // [18] phi from main to memset [phi:main->memset] + // [18] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] @@ -830,7 +830,7 @@ main: { sei // memset(DEFAULT_SCREEN, ' ', 0x0400) // [1] call memset - // [18] phi from main to memset [phi:main->memset] + // [18] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] __b5: diff --git a/src/test/ref/pointer-plus-0.log b/src/test/ref/pointer-plus-0.log index 359e48e62..8240d1a2b 100644 --- a/src/test/ref/pointer-plus-0.log +++ b/src/test/ref/pointer-plus-0.log @@ -241,7 +241,7 @@ main: { // [1] call first // [10] phi from main to first [phi:main->first] first_from_main: - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near lda #msg1 @@ -259,7 +259,7 @@ main: { // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] first_from___b1: - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near lda #msg2 @@ -352,7 +352,7 @@ main: { // first(msg1) // [1] call first // [10] phi from main to first [phi:main->first] - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near lda #msg1 @@ -370,7 +370,7 @@ main: { // first(msg2) // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near lda #msg2 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index ddb2effb8..618e61fe6 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -394,7 +394,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call nexttext + // [2] call nexttext -- call_phi_near jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: @@ -584,7 +584,7 @@ main: { // main::@1 __b1: // nexttext(&text) - // [2] call nexttext + // [2] call nexttext -- call_phi_near jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] // [3] phi main::screen#2 = main::screen#4 [phi:main::@1/main::@3->main::@2#0] -- register_copy diff --git a/src/test/ref/pointer-pointer-3.log b/src/test/ref/pointer-pointer-3.log index 45197a30d..78e4ba2e4 100644 --- a/src/test/ref/pointer-pointer-3.log +++ b/src/test/ref/pointer-pointer-3.log @@ -224,7 +224,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -238,7 +238,7 @@ main: { // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] setscreen_from_main: - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near lda #screen1 @@ -254,7 +254,7 @@ main: { // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] setscreen_from___b1: - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near lda #screen2 @@ -359,7 +359,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -370,7 +370,7 @@ main: { // setscreen(&screen, screen1) // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near lda #screen1 @@ -385,7 +385,7 @@ main: { // setscreen(&screen, screen2) // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near lda #screen2 diff --git a/src/test/ref/pointer-swap.log b/src/test/ref/pointer-swap.log index 3044bc33c..25a014563 100644 --- a/src/test/ref/pointer-swap.log +++ b/src/test/ref/pointer-swap.log @@ -611,7 +611,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near lda #<0 sta.z tempbuffer_1 lda #>0 @@ -630,7 +630,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near lda #buffer1 @@ -653,7 +653,7 @@ main: { // [23] phi from main::@2 to swap [phi:main::@2->swap] swap_from___b2: // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near jsr swap jmp __b3 // main::@3 @@ -672,7 +672,7 @@ main: { // [23] phi from main::@3 to swap [phi:main::@3->swap] swap_from___b3: // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near jsr swap jmp __breturn // main::@return @@ -746,7 +746,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near jsr print jmp __breturn // swap::@return @@ -872,7 +872,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near lda #<0 sta.z tempbuffer_1 sta.z tempbuffer_1+1 @@ -887,7 +887,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near lda #buffer1 @@ -908,7 +908,7 @@ main: { // [6] call swap // [23] phi from main::@2 to swap [phi:main::@2->swap] // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near jsr swap // main::@3 // [7] tempbuffer#23 = newbuffer#0 -- pbuz1=pbuz2 @@ -925,7 +925,7 @@ main: { // [9] call swap // [23] phi from main::@3 to swap [phi:main::@3->swap] // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near jsr swap // main::@return // } @@ -1004,7 +1004,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near jsr print // swap::@return // } diff --git a/src/test/ref/pointer-void-1.log b/src/test/ref/pointer-void-1.log index d8e90126b..1910db674 100644 --- a/src/test/ref/pointer-void-1.log +++ b/src/test/ref/pointer-void-1.log @@ -290,7 +290,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near lda #vb @@ -305,7 +305,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near lda #vw @@ -320,7 +320,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near lda #vd @@ -441,7 +441,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near lda #vb @@ -453,7 +453,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near lda #vw @@ -465,7 +465,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near lda #vd diff --git a/src/test/ref/pointer-void-2.log b/src/test/ref/pointer-void-2.log index 1ddbf6b8f..36f96bc13 100644 --- a/src/test/ref/pointer-void-2.log +++ b/src/test/ref/pointer-void-2.log @@ -284,7 +284,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near lda #b @@ -299,7 +299,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near lda #w @@ -314,7 +314,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near lda #d @@ -429,7 +429,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near lda #b @@ -441,7 +441,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near lda #w @@ -453,7 +453,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near lda #d diff --git a/src/test/ref/pointer-void-3.log b/src/test/ref/pointer-void-3.log index e6393cae6..8c1aced57 100644 --- a/src/test/ref/pointer-void-3.log +++ b/src/test/ref/pointer-void-3.log @@ -284,7 +284,7 @@ main: { // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near lda #<$c000 sta.z heap_head lda #>$c000 @@ -302,7 +302,7 @@ main: { // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] malloc_from___b1: - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near jsr malloc // [5] malloc::return#1 = malloc::return#2 jmp __b2 @@ -418,7 +418,7 @@ main: { // byte* buf1 = malloc() // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near lda #<$c000 sta.z heap_head lda #>$c000 @@ -435,7 +435,7 @@ main: { // byte* buf2 = malloc() // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near jsr malloc // byte* buf2 = malloc() // [5] malloc::return#1 = malloc::return#2 diff --git a/src/test/ref/post-increment-problem-2.log b/src/test/ref/post-increment-problem-2.log index 0b912585f..fb71a2f3d 100644 --- a/src/test/ref/post-increment-problem-2.log +++ b/src/test/ref/post-increment-problem-2.log @@ -245,7 +245,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call incscreen + // [5] call incscreen -- call_phi_near jsr incscreen jmp __b3 // main::@3 @@ -342,7 +342,7 @@ main: { // main::@2 __b2: // incscreen(offset) - // [5] call incscreen + // [5] call incscreen -- call_phi_near jsr incscreen // main::@3 // for (char x=0;x<254;x++) diff --git a/src/test/ref/pragma-noparenthesis.log b/src/test/ref/pragma-noparenthesis.log index c12b0e992..7632e3d44 100644 --- a/src/test/ref/pragma-noparenthesis.log +++ b/src/test/ref/pragma-noparenthesis.log @@ -150,14 +150,14 @@ __start: { jmp __init1 // __start::__init1 __init1: - // [2] call init + // [2] call init -- call_phi_near jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -235,11 +235,11 @@ Score: 42 __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] // __start::__init1 - // [2] call init + // [2] call init -- call_phi_near jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/primes-1000-2.log b/src/test/ref/primes-1000-2.log index 178959548..c6f05a9b7 100644 --- a/src/test/ref/primes-1000-2.log +++ b/src/test/ref/primes-1000-2.log @@ -2572,7 +2572,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u + // [7] call mul8u -- call_phi_near jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 jmp __b8 @@ -2630,7 +2630,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u + // [18] call div16u8u -- call_phi_near jsr div16u8u jmp __b9 // main::@9 @@ -2700,7 +2700,7 @@ main: { lda.z potential+1 sta (__15),y // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal + // [29] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] __b10_from___b6: @@ -2710,7 +2710,7 @@ main: { // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] print_char_from___b10: - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near lda #' ' jsr print_char jmp __b11 @@ -2818,7 +2818,7 @@ div16u8u: { divr8u_from_div16u8u: // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near ldy #0 jsr divr8u jmp __b1 @@ -2834,7 +2834,7 @@ div16u8u: { divr8u_from___b1: // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near jsr divr8u jmp __breturn // div16u8u::@return @@ -2853,7 +2853,7 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near utoa_from_print_uint_decimal: jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2862,7 +2862,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near print_str_from___b1: jsr print_str jmp __breturn @@ -3088,7 +3088,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [96] utoa_append::return#0 = utoa_append::value#2 @@ -3143,7 +3143,7 @@ print_str: { // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3628,7 +3628,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u + // [7] call mul8u -- call_phi_near jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 // main::@8 @@ -3679,7 +3679,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u + // [18] call div16u8u -- call_phi_near jsr div16u8u // main::@9 // div16u8u(potential, (char)PRIMES[test_idx++]); @@ -3746,14 +3746,14 @@ main: { sta (__15),y // print_uint_decimal(potential) // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal + // [29] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] // main::@10 // print_char(' ') // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near lda #' ' jsr print_char // main::@11 @@ -3859,7 +3859,7 @@ div16u8u: { // [61] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near ldy #0 jsr divr8u // div16u8u::@1 @@ -3873,7 +3873,7 @@ div16u8u: { // [61] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near jsr divr8u // div16u8u::@return // } @@ -3892,13 +3892,13 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near jsr print_str // print_uint_decimal::@return // } @@ -4114,7 +4114,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [96] utoa_append::return#0 = utoa_append::value#2 @@ -4166,7 +4166,7 @@ print_str: { lda (str),y // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/print-problem.log b/src/test/ref/print-problem.log index 660c6d482..f20359e65 100644 --- a/src/test/ref/print-problem.log +++ b/src/test/ref/print-problem.log @@ -273,7 +273,7 @@ main: { // [1] call ln // [9] phi from main to ln [phi:main->ln] ln_from_main: - // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 + // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -284,7 +284,7 @@ main: { // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] ln_from___b1: - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -294,7 +294,7 @@ main: { // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] ln_from___b2: - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near jsr ln jmp __b3 // main::@3 @@ -375,7 +375,7 @@ main: { // ln() // [1] call ln // [9] phi from main to ln [phi:main->ln] - // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 + // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -383,14 +383,14 @@ main: { // ln() // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // ln() // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near jsr ln // main::@3 // *SCREEN = ch diff --git a/src/test/ref/printf-1.log b/src/test/ref/printf-1.log index 697639266..17ab790c4 100644 --- a/src/test/ref/printf-1.log +++ b/src/test/ref/printf-1.log @@ -2496,7 +2496,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2504,7 +2504,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2540,7 +2540,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2581,7 +2581,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2593,14 +2593,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] + // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -2616,7 +2616,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2625,7 +2625,7 @@ main: { jmp __b2 // main::@2 __b2: - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -2640,7 +2640,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2649,7 +2649,7 @@ main: { jmp __b4 // main::@4 __b4: - // [36] call cputln + // [36] call cputln -- call_phi_near jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2664,7 +2664,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2673,7 +2673,7 @@ main: { jmp __b6 // main::@6 __b6: - // [40] call cputln + // [40] call cputln -- call_phi_near jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2827,7 +2827,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2954,7 +2954,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near strlen_from___b3: jsr strlen // [83] strlen::return#2 = strlen::len#2 @@ -3012,14 +3012,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near jsr printf_padding jmp __b2 // printf_string::@2 __b2: // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near printf_str_from___b2: jsr printf_str jmp __b7 @@ -3047,7 +3047,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near jsr printf_padding jmp __breturn // printf_string::@return @@ -3075,7 +3075,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3094,7 +3094,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3110,7 +3110,7 @@ cscroll: { memset_from___b3: // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3126,7 +3126,7 @@ cscroll: { memset_from___b4: // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -3782,12 +3782,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -3816,7 +3816,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -3855,7 +3855,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3866,7 +3866,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -3874,7 +3874,7 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] + // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -3886,14 +3886,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string // [31] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // cputln() - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -3905,14 +3905,14 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string // [35] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputln() - // [36] call cputln + // [36] call cputln -- call_phi_near jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3924,14 +3924,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string // [39] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // cputln() - // [40] call cputln + // [40] call cputln -- call_phi_near jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3943,7 +3943,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -4084,7 +4084,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -4210,7 +4210,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near jsr strlen // strlen(str) // [83] strlen::return#2 = strlen::len#2 @@ -4260,14 +4260,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near jsr printf_padding // printf_string::@2 __b2: // printf_str(putc, str) // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near jsr printf_str // printf_string::@7 // if(format.justify_left && padding) @@ -4291,7 +4291,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near jsr printf_padding // printf_string::@return __breturn: @@ -4317,7 +4317,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4333,7 +4333,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4346,7 +4346,7 @@ cscroll: { // [147] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4359,7 +4359,7 @@ cscroll: { // [147] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-10.log b/src/test/ref/printf-10.log index d9c32976a..dc91acd48 100644 --- a/src/test/ref/printf-10.log +++ b/src/test/ref/printf-10.log @@ -394,7 +394,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -406,7 +406,7 @@ main: { // main::@1 __b1: // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near printf_string_from___b1: jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -418,7 +418,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 @@ -488,7 +488,7 @@ printf_string: { // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] printf_str_from_printf_string: // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near lda #main.name @@ -585,7 +585,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -595,7 +595,7 @@ main: { // main::@1 // printf("Hello, I am %s. who are you?", name) // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -603,7 +603,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 @@ -670,7 +670,7 @@ printf_string: { // [15] call printf_str // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near lda #main.name diff --git a/src/test/ref/printf-11.log b/src/test/ref/printf-11.log index 9aa0d1b12..7ebcbc0f7 100644 --- a/src/test/ref/printf-11.log +++ b/src/test/ref/printf-11.log @@ -521,7 +521,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -532,7 +532,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call printf_uint + // [3] call printf_uint -- call_phi_near jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -543,7 +543,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 @@ -748,7 +748,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -757,7 +757,7 @@ main: { // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Commodore is %x cool", pct) - // [3] call printf_uint + // [3] call printf_uint -- call_phi_near jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -765,7 +765,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 diff --git a/src/test/ref/printf-12.log b/src/test/ref/printf-12.log index b25c502ae..d8bb5d234 100644 --- a/src/test/ref/printf-12.log +++ b/src/test/ref/printf-12.log @@ -7801,7 +7801,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -7809,7 +7809,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -7845,7 +7845,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -7886,7 +7886,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -7898,7 +7898,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -7912,7 +7912,7 @@ main: { .label ul = $8aa52 .label c = $2c // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] + // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr jmp __b1 @@ -7929,7 +7929,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near lda #s1 @@ -7972,7 +7972,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near lda #s2 @@ -7988,7 +7988,7 @@ main: { printf_uint_from___b4: // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near lda #c @@ -8007,7 +8007,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -8026,7 +8026,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near lda #s4 @@ -8050,7 +8050,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near lda #s1 @@ -8069,7 +8069,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near lda #s6 @@ -8080,7 +8080,7 @@ main: { jmp __b9 // main::@9 __b9: - // [50] call printf_schar + // [50] call printf_schar -- call_phi_near jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -8095,7 +8095,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near lda #s1 @@ -8114,7 +8114,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near lda #s8 @@ -8126,7 +8126,7 @@ main: { // main::@12 __b12: // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near printf_uchar_from___b12: jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -8142,7 +8142,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near lda #s1 @@ -8161,7 +8161,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near lda #s10 @@ -8172,7 +8172,7 @@ main: { jmp __b15 // main::@15 __b15: - // [62] call printf_sint + // [62] call printf_sint -- call_phi_near jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -8187,7 +8187,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near lda #s1 @@ -8206,7 +8206,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near lda #s12 @@ -8222,7 +8222,7 @@ main: { printf_uint_from___b18: // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near lda #ui @@ -8241,7 +8241,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near lda #s1 @@ -8260,7 +8260,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near lda #s14 @@ -8271,7 +8271,7 @@ main: { jmp __b21 // main::@21 __b21: - // [74] call printf_slong + // [74] call printf_slong -- call_phi_near jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] __b22_from___b21: @@ -8286,7 +8286,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near lda #s1 @@ -8305,7 +8305,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near lda #s16 @@ -8317,7 +8317,7 @@ main: { // main::@24 __b24: // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near printf_ulong_from___b24: jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -8333,7 +8333,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near lda #s1 @@ -8490,7 +8490,7 @@ cputln: { sta.z conio_cursor_x // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [102] call cscroll + // [102] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -8660,7 +8660,7 @@ printf_uint: { // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near jsr utoa jmp __b2 // printf_uint::@2 @@ -8687,7 +8687,7 @@ printf_uint: { // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #0 jsr printf_number_buffer jmp __breturn @@ -8726,7 +8726,7 @@ printf_schar: { // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] uctoa_from___b2: - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near ldx #uvalue jsr uctoa jmp __b3 @@ -8754,7 +8754,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8783,7 +8783,7 @@ printf_uchar: { // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near ldx #main.uc jsr uctoa jmp __b2 @@ -8811,7 +8811,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8855,7 +8855,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa jmp __b3 @@ -8883,7 +8883,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8922,7 +8922,7 @@ printf_slong: { // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] ultoa_from___b2: - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near lda #uvalue @@ -8957,7 +8957,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8986,7 +8986,7 @@ printf_ulong: { // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] ultoa_from___b1: - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near lda #main.ul @@ -9021,7 +9021,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -9050,7 +9050,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -9069,7 +9069,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -9085,7 +9085,7 @@ cscroll: { memset_from___b3: // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -9101,7 +9101,7 @@ cscroll: { memset_from___b4: // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -9330,7 +9330,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near utoa_append_from___b10: jsr utoa_append // [211] utoa_append::return#0 = utoa_append::value#2 @@ -9372,7 +9372,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near strlen_from___b6: jsr strlen // [218] strlen::return#2 = strlen::len#2 @@ -9456,7 +9456,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -9501,7 +9501,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -9515,7 +9515,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near strupr_from___b11: jsr strupr jmp __b5 @@ -9526,7 +9526,7 @@ printf_number_buffer: { // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -9565,7 +9565,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -9668,7 +9668,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -9808,7 +9808,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near ultoa_append_from___b5: jsr ultoa_append // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -10129,7 +10129,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper + // [339] call toupper -- call_phi_near jsr toupper // [340] toupper::return#3 = toupper::return#2 jmp __b3 @@ -11291,12 +11291,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -11325,7 +11325,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -11364,7 +11364,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -11375,7 +11375,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -11390,7 +11390,7 @@ main: { .label c = $2c // clrscr() // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] + // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // main::@1 // char c = 'x' @@ -11405,7 +11405,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -11427,7 +11427,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near lda #s1 @@ -11443,7 +11443,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near lda #s2 @@ -11456,7 +11456,7 @@ main: { // [129] phi from main::@4 to printf_uint [phi:main::@4->printf_uint] // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near lda #c @@ -11472,7 +11472,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -11488,7 +11488,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near lda #s4 @@ -11510,7 +11510,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near lda #s1 @@ -11526,7 +11526,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near lda #s6 @@ -11535,7 +11535,7 @@ main: { // [49] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // printf("A signed char: %hhd\n", sc) - // [50] call printf_schar + // [50] call printf_schar -- call_phi_near jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 @@ -11547,7 +11547,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near lda #s1 @@ -11563,7 +11563,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near lda #s8 @@ -11573,7 +11573,7 @@ main: { // main::@12 // printf("An unsigned char: %hhu\n", uc) // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -11585,7 +11585,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near lda #s1 @@ -11601,7 +11601,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near lda #s10 @@ -11610,7 +11610,7 @@ main: { // [61] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // printf("A signed int: %d\n", si) - // [62] call printf_sint + // [62] call printf_sint -- call_phi_near jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -11622,7 +11622,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near lda #s1 @@ -11638,7 +11638,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near lda #s12 @@ -11651,7 +11651,7 @@ main: { // [129] phi from main::@18 to printf_uint [phi:main::@18->printf_uint] // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near lda #ui @@ -11667,7 +11667,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near lda #s1 @@ -11683,7 +11683,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near lda #s14 @@ -11692,7 +11692,7 @@ main: { // [73] phi from main::@20 to main::@21 [phi:main::@20->main::@21] // main::@21 // printf("A signed long: %ld\n", sl) - // [74] call printf_slong + // [74] call printf_slong -- call_phi_near jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] // main::@22 @@ -11704,7 +11704,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near lda #s1 @@ -11720,7 +11720,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near lda #s16 @@ -11730,7 +11730,7 @@ main: { // main::@24 // printf("An unsigned long: %lu\n", ul) // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] // main::@25 @@ -11742,7 +11742,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near lda #s1 @@ -11901,7 +11901,7 @@ cputln: { // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [102] call cscroll + // [102] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -12068,7 +12068,7 @@ printf_uint: { // Format number into buffer // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -12092,7 +12092,7 @@ printf_uint: { sta.z printf_number_buffer.format_zero_padding // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near tax jsr printf_number_buffer // printf_uint::@return @@ -12127,7 +12127,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near ldx #uvalue jsr uctoa // printf_schar::@3 @@ -12153,7 +12153,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_schar::@return @@ -12180,7 +12180,7 @@ printf_uchar: { // [146] call uctoa // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near ldx #main.uc jsr uctoa // printf_uchar::@2 @@ -12206,7 +12206,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_uchar::@return @@ -12246,7 +12246,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -12272,7 +12272,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -12307,7 +12307,7 @@ printf_slong: { // ultoa(uvalue, printf_buffer.digits, format.radix) // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near lda #uvalue @@ -12340,7 +12340,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -12367,7 +12367,7 @@ printf_ulong: { // [166] call ultoa // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near lda #main.ul @@ -12400,7 +12400,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_ulong::@return @@ -12426,7 +12426,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -12442,7 +12442,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -12455,7 +12455,7 @@ cscroll: { // [305] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12468,7 +12468,7 @@ cscroll: { // [305] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -12693,7 +12693,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [211] utoa_append::return#0 = utoa_append::value#2 @@ -12733,7 +12733,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [218] strlen::return#2 = strlen::len#2 @@ -12804,7 +12804,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -12845,7 +12845,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@4 __b4: @@ -12857,7 +12857,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near jsr strupr // printf_number_buffer::@5 __b5: @@ -12866,7 +12866,7 @@ printf_number_buffer: { // [247] call printf_str // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -12900,7 +12900,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@return __breturn: @@ -13000,7 +13000,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -13137,7 +13137,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -13446,7 +13446,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper + // [339] call toupper -- call_phi_near jsr toupper // [340] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-14.log b/src/test/ref/printf-14.log index 8ab5f163e..4a61c0595 100644 --- a/src/test/ref/printf-14.log +++ b/src/test/ref/printf-14.log @@ -3645,7 +3645,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3653,7 +3653,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -3689,7 +3689,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3730,7 +3730,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -3742,7 +3742,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -3750,7 +3750,7 @@ cputc: { main: { .label c = 7 // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] + // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3759,7 +3759,7 @@ main: { // main::@1 __b1: // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near printf_uchar_from___b1: jsr printf_uchar jmp __breturn @@ -3891,7 +3891,7 @@ cputln: { sta.z conio_cursor_x // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [50] call cscroll + // [50] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4013,7 +4013,7 @@ printf_uchar: { sta printf_buffer // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near uctoa_from___b1: jsr uctoa jmp __b2 @@ -4023,7 +4023,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4052,7 +4052,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4071,7 +4071,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4087,7 +4087,7 @@ cscroll: { memset_from___b3: // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4103,7 +4103,7 @@ cscroll: { memset_from___b4: // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4230,7 +4230,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -4280,7 +4280,7 @@ printf_number_buffer: { // printf_number_buffer::@2 __b2: // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near printf_str_from___b2: jsr printf_str jmp __breturn @@ -4903,12 +4903,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -4937,7 +4937,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -4976,7 +4976,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -4987,7 +4987,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -4996,13 +4996,13 @@ main: { .label c = 7 // clrscr() // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] + // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("%u", c) // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near jsr printf_uchar // main::@return // } @@ -5135,7 +5135,7 @@ cputln: { // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [50] call cscroll + // [50] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5257,7 +5257,7 @@ printf_uchar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5265,7 +5265,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uchar::@return // } @@ -5290,7 +5290,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5306,7 +5306,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5319,7 +5319,7 @@ cscroll: { // [124] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5332,7 +5332,7 @@ cscroll: { // [124] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5457,7 +5457,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -5502,7 +5502,7 @@ printf_number_buffer: { __b2: // printf_str(putc, buffer.digits) // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near jsr printf_str // printf_number_buffer::@return // } diff --git a/src/test/ref/printf-15.log b/src/test/ref/printf-15.log index 1717f7db4..dcca7d5bb 100644 --- a/src/test/ref/printf-15.log +++ b/src/test/ref/printf-15.log @@ -1683,7 +1683,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1691,7 +1691,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1727,7 +1727,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1768,7 +1768,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1780,14 +1780,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] + // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -1798,7 +1798,7 @@ main: { // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near lda #s @@ -1812,7 +1812,7 @@ main: { // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near lda #s1 @@ -1953,7 +1953,7 @@ cputln: { sta.z conio_cursor_x // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [52] call cscroll + // [52] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2120,7 +2120,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2139,7 +2139,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2155,7 +2155,7 @@ cscroll: { memset_from___b3: // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2171,7 +2171,7 @@ cscroll: { memset_from___b4: // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2604,12 +2604,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2638,7 +2638,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2677,7 +2677,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2688,7 +2688,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -2696,14 +2696,14 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] + // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Lone 1\n") // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near lda #s @@ -2714,7 +2714,7 @@ main: { // printf("Lone 2\n") // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near lda #s1 @@ -2857,7 +2857,7 @@ cputln: { // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [52] call cscroll + // [52] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -3020,7 +3020,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3036,7 +3036,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3049,7 +3049,7 @@ cscroll: { // [102] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3062,7 +3062,7 @@ cscroll: { // [102] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-17.log b/src/test/ref/printf-17.log index 234dffab6..dbf187967 100644 --- a/src/test/ref/printf-17.log +++ b/src/test/ref/printf-17.log @@ -4498,7 +4498,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -4579,7 +4579,7 @@ main: { // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4598,7 +4598,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -4617,7 +4617,7 @@ main: { // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -4631,7 +4631,7 @@ main: { // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] snprintf_init_from___b3: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -4662,7 +4662,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near printf_string_from___b5: jsr printf_string jmp __b6 @@ -4683,7 +4683,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -4702,7 +4702,7 @@ main: { // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -4712,7 +4712,7 @@ main: { // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] snprintf_init_from___b8: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4731,7 +4731,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -4745,7 +4745,7 @@ main: { // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] printf_sint_from___b10: - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near lda #<3 sta.z printf_sint.value lda #>3 @@ -4764,7 +4764,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -4776,7 +4776,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -4792,7 +4792,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -4811,7 +4811,7 @@ main: { // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -4821,7 +4821,7 @@ main: { // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] snprintf_init_from___b15: - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near lda #<6 sta.z snprintf_init.n lda #>6 @@ -4840,7 +4840,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -4854,7 +4854,7 @@ main: { // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] printf_sint_from___b17: - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -4873,7 +4873,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -4892,7 +4892,7 @@ main: { // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -5051,7 +5051,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -5101,7 +5101,7 @@ printf_sint: { // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa jmp __b3 @@ -5129,7 +5129,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near ldx #0 jsr printf_number_buffer jmp __breturn @@ -5164,7 +5164,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -5192,7 +5192,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -5397,7 +5397,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -5439,7 +5439,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -5523,7 +5523,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -5568,7 +5568,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -5582,7 +5582,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near strupr_from___b11: jsr strupr jmp __b5 @@ -5593,7 +5593,7 @@ printf_number_buffer: { // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -5632,7 +5632,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -5833,7 +5833,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper + // [207] call toupper -- call_phi_near jsr toupper // [208] toupper::return#3 = toupper::return#2 jmp __b3 @@ -6471,7 +6471,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [6] return @@ -6546,7 +6546,7 @@ main: { // snprintf(BUF, 20, "hello world! ") // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6562,7 +6562,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -6580,7 +6580,7 @@ main: { // print(BUF) // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -6591,7 +6591,7 @@ main: { // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6607,7 +6607,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -6617,7 +6617,7 @@ main: { // main::@5 // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near jsr printf_string // main::@6 // snprintf(BUF, 20, "hello %s%c ", "world", '!') @@ -6635,7 +6635,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -6653,14 +6653,14 @@ main: { // print(BUF) // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6676,7 +6676,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -6687,7 +6687,7 @@ main: { // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near lda #<3 sta.z printf_sint.value lda #>3 @@ -6703,7 +6703,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -6713,7 +6713,7 @@ main: { // main::@12 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -6725,7 +6725,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -6743,14 +6743,14 @@ main: { // print(BUF) // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // snprintf(BUF, 6, "hi %d! ", 22222) // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near lda #<6 sta.z snprintf_init.n lda #>6 @@ -6766,7 +6766,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -6777,7 +6777,7 @@ main: { // snprintf(BUF, 6, "hi %d! ", 22222) // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -6793,7 +6793,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -6811,7 +6811,7 @@ main: { // print(BUF) // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print // main::@return // } @@ -6963,7 +6963,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -7013,7 +7013,7 @@ printf_sint: { // [99] call utoa // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -7038,7 +7038,7 @@ printf_sint: { sta.z printf_number_buffer.format_zero_padding // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near tax jsr printf_number_buffer // printf_sint::@return @@ -7071,7 +7071,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -7097,7 +7097,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -7296,7 +7296,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -7336,7 +7336,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -7407,7 +7407,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7448,7 +7448,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@4 __b4: @@ -7460,7 +7460,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near jsr strupr // printf_number_buffer::@5 __b5: @@ -7469,7 +7469,7 @@ printf_number_buffer: { // [173] call printf_str // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -7503,7 +7503,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@return __breturn: @@ -7696,7 +7696,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper + // [207] call toupper -- call_phi_near jsr toupper // [208] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-18.log b/src/test/ref/printf-18.log index ef837a417..03e8f0b22 100644 --- a/src/test/ref/printf-18.log +++ b/src/test/ref/printf-18.log @@ -2389,7 +2389,7 @@ __start: { sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2397,7 +2397,7 @@ __start: { // __start::@1 __b1: // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] + // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2500,7 +2500,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy + // [26] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2541,7 +2541,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [35] call cputln + // [35] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2553,7 +2553,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [38] call cputln + // [38] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -2562,7 +2562,7 @@ main: { // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near lda #BUF1 @@ -2581,7 +2581,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -2600,7 +2600,7 @@ main: { // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] snprintf_init_from___b2: - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near lda #BUF2 @@ -2619,7 +2619,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near lda #s1 @@ -2638,7 +2638,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near lda #str @@ -2669,7 +2669,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near lda #s2 @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near lda #BUF1 @@ -2707,7 +2707,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near lda #s3 @@ -2726,7 +2726,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near lda #BUF2 @@ -2745,7 +2745,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near lda #s2 @@ -2892,7 +2892,7 @@ cputln: { sta.z conio_cursor_x // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [85] call cscroll + // [85] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2984,7 +2984,7 @@ printf_string: { // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str jmp __breturn // printf_string::@return @@ -3012,7 +3012,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3031,7 +3031,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3047,7 +3047,7 @@ cscroll: { memset_from___b3: // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3063,7 +3063,7 @@ cscroll: { memset_from___b4: // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -3577,12 +3577,12 @@ __start: { sta.z __snprintf_buffer sta.z __snprintf_buffer+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] + // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [11] return @@ -3675,7 +3675,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy + // [26] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -3714,7 +3714,7 @@ cputc: { // [34] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [35] call cputln + // [35] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3725,7 +3725,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [38] call cputln + // [38] call cputln -- call_phi_near jsr cputln rts } @@ -3734,7 +3734,7 @@ main: { // snprintf(BUF1, 20, "hello world!") // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near lda #BUF1 @@ -3750,7 +3750,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -3768,7 +3768,7 @@ main: { // snprintf(BUF2, 20, "hello %s%c", "world", '!') // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near lda #BUF2 @@ -3784,7 +3784,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near lda #s1 @@ -3800,7 +3800,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near lda #str @@ -3830,7 +3830,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near lda #s2 @@ -3846,7 +3846,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near lda #BUF1 @@ -3862,7 +3862,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near lda #s3 @@ -3878,7 +3878,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near lda #BUF2 @@ -3894,7 +3894,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near lda #s2 @@ -4043,7 +4043,7 @@ cputln: { // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [85] call cscroll + // [85] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -4131,7 +4131,7 @@ printf_string: { // [104] call printf_str // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str // printf_string::@return // } @@ -4156,7 +4156,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4172,7 +4172,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4185,7 +4185,7 @@ cscroll: { // [129] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4198,7 +4198,7 @@ cscroll: { // [129] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-19.log b/src/test/ref/printf-19.log index a8ac45c87..df40a64fe 100644 --- a/src/test/ref/printf-19.log +++ b/src/test/ref/printf-19.log @@ -5428,7 +5428,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -5506,7 +5506,7 @@ snputc: { } // main main: { - // [17] call snprintf_init + // [17] call snprintf_init -- call_phi_near jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -5521,7 +5521,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -5540,7 +5540,7 @@ main: { // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -5551,7 +5551,7 @@ main: { jmp __b3 // main::@3 __b3: - // [25] call snprintf_init + // [25] call snprintf_init -- call_phi_near jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -5566,7 +5566,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -5578,7 +5578,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near printf_string_from___b5: jsr printf_string jmp __b6 @@ -5599,7 +5599,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -5618,14 +5618,14 @@ main: { // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [39] call snprintf_init + // [39] call snprintf_init -- call_phi_near jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -5640,7 +5640,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -5651,7 +5651,7 @@ main: { jmp __b10 // main::@10 __b10: - // [43] call printf_sint + // [43] call printf_sint -- call_phi_near jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -5666,7 +5666,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -5678,7 +5678,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -5694,7 +5694,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -5713,14 +5713,14 @@ main: { // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [55] call snprintf_init + // [55] call snprintf_init -- call_phi_near jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -5735,7 +5735,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -5746,7 +5746,7 @@ main: { jmp __b17 // main::@17 __b17: - // [59] call printf_slong + // [59] call printf_slong -- call_phi_near jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -5780,7 +5780,7 @@ main: { // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -5938,7 +5938,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -5979,7 +5979,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa jmp __b2 @@ -6007,7 +6007,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6042,7 +6042,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -6070,7 +6070,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6101,7 +6101,7 @@ printf_slong: { // printf_slong::@1 __b1: // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near ultoa_from___b1: jsr ultoa jmp __b2 @@ -6129,7 +6129,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6334,7 +6334,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -6376,7 +6376,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -6460,7 +6460,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -6505,7 +6505,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -6519,7 +6519,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near strupr_from___b11: jsr strupr jmp __b5 @@ -6530,7 +6530,7 @@ printf_number_buffer: { // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -6569,7 +6569,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -6707,7 +6707,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near ultoa_append_from___b5: jsr ultoa_append // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -6918,7 +6918,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper + // [228] call toupper -- call_phi_near jsr toupper // [229] toupper::return#3 = toupper::return#2 jmp __b3 @@ -7723,7 +7723,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [6] return @@ -7796,7 +7796,7 @@ snputc: { // main main: { // sprintf(BUF, "hello world! ") - // [17] call snprintf_init + // [17] call snprintf_init -- call_phi_near jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -7808,7 +7808,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -7826,7 +7826,7 @@ main: { // print(BUF) // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -7835,7 +7835,7 @@ main: { // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // sprintf(BUF, "hello %s%c ", "world", '!') - // [25] call snprintf_init + // [25] call snprintf_init -- call_phi_near jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -7847,7 +7847,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -7857,7 +7857,7 @@ main: { // main::@5 // sprintf(BUF, "hello %s%c ", "world", '!') // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near jsr printf_string // main::@6 // sprintf(BUF, "hello %s%c ", "world", '!') @@ -7875,7 +7875,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -7893,12 +7893,12 @@ main: { // print(BUF) // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [39] call snprintf_init + // [39] call snprintf_init -- call_phi_near jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -7910,7 +7910,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -7919,7 +7919,7 @@ main: { // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [43] call printf_sint + // [43] call printf_sint -- call_phi_near jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -7931,7 +7931,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -7941,7 +7941,7 @@ main: { // main::@12 // sprintf(BUF, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -7971,12 +7971,12 @@ main: { // print(BUF) // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // sprintf(BUF, "hi %ld! ", 22222222l) - // [55] call snprintf_init + // [55] call snprintf_init -- call_phi_near jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -7988,7 +7988,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -7997,7 +7997,7 @@ main: { // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] // main::@17 // sprintf(BUF, "hi %ld! ", 22222222l) - // [59] call printf_slong + // [59] call printf_slong -- call_phi_near jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -8009,7 +8009,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -8027,7 +8027,7 @@ main: { // print(BUF) // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print // main::@return // } @@ -8178,7 +8178,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -8216,7 +8216,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa // printf_sint::@2 @@ -8242,7 +8242,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -8275,7 +8275,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -8301,7 +8301,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -8330,7 +8330,7 @@ printf_slong: { // printf_slong::@1 // ultoa(uvalue, printf_buffer.digits, format.radix) // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near jsr ultoa // printf_slong::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -8355,7 +8355,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -8554,7 +8554,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -8594,7 +8594,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -8665,7 +8665,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -8706,7 +8706,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@4 __b4: @@ -8718,7 +8718,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near jsr strupr // printf_number_buffer::@5 __b5: @@ -8727,7 +8727,7 @@ printf_number_buffer: { // [173] call printf_str // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -8761,7 +8761,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@return __breturn: @@ -8897,7 +8897,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -9099,7 +9099,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper + // [228] call toupper -- call_phi_near jsr toupper // [229] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index 292681b07..abad22ec3 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -531,7 +531,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near lda #msg @@ -545,7 +545,7 @@ main: { // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near lda #print_screen @@ -563,7 +563,7 @@ main: { // [13] phi from main::@2 to print_str [phi:main::@2->print_str] print_str_from___b2: // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near lda #msg2 @@ -577,7 +577,7 @@ main: { // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near jsr print_ln jmp __b4 // main::@4 @@ -591,7 +591,7 @@ main: { // [13] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near lda #msg3 @@ -605,7 +605,7 @@ main: { // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // main::@return @@ -641,7 +641,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char + // [18] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -825,7 +825,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near lda #msg @@ -836,7 +836,7 @@ main: { // print_ln() // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near lda #print_screen @@ -852,7 +852,7 @@ main: { // [5] call print_str // [13] phi from main::@2 to print_str [phi:main::@2->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near lda #msg2 @@ -863,7 +863,7 @@ main: { // print_ln() // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near jsr print_ln // main::@4 // [8] print_char_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -875,7 +875,7 @@ main: { // [9] call print_str // [13] phi from main::@4 to print_str [phi:main::@4->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near lda #msg3 @@ -886,7 +886,7 @@ main: { // print_ln() // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln // main::@return // } @@ -919,7 +919,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char + // [18] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/problem-ma-var-overwrite.log b/src/test/ref/problem-ma-var-overwrite.log index d18329c7a..5e3db2880 100644 --- a/src/test/ref/problem-ma-var-overwrite.log +++ b/src/test/ref/problem-ma-var-overwrite.log @@ -252,7 +252,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test + // [6] call test -- call_phi_near jsr test jmp __breturn // main::@return @@ -396,7 +396,7 @@ __start: { sta.z h1+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -410,7 +410,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test + // [6] call test -- call_phi_near jsr test // main::@return // } diff --git a/src/test/ref/problem-negate-const.log b/src/test/ref/problem-negate-const.log index 31fdf120c..95d7df45e 100644 --- a/src/test/ref/problem-negate-const.log +++ b/src/test/ref/problem-negate-const.log @@ -145,7 +145,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call printneg + // [1] call printneg -- call_phi_near jsr printneg jmp __breturn // main::@return @@ -204,7 +204,7 @@ Score: 24 // main main: { // printneg(-4) - // [1] call printneg + // [1] call printneg -- call_phi_near jsr printneg // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter-1.log b/src/test/ref/problem-struct-inline-parameter-1.log index 288ce050f..083face16 100644 --- a/src/test/ref/problem-struct-inline-parameter-1.log +++ b/src/test/ref/problem-struct-inline-parameter-1.log @@ -224,7 +224,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -298,7 +298,7 @@ Score: 36 // main main: { // print('c', { '-', '-' } ) - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter.log b/src/test/ref/problem-struct-inline-parameter.log index 90545c237..9c2be3a86 100644 --- a/src/test/ref/problem-struct-inline-parameter.log +++ b/src/test/ref/problem-struct-inline-parameter.log @@ -223,7 +223,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -297,7 +297,7 @@ Score: 36 // main main: { // print('c', (struct format){ '-', '-' } ) - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/procedure-callingconvention-stack-4.log b/src/test/ref/procedure-callingconvention-stack-4.log index b07b5e8a0..b45d2c468 100644 --- a/src/test/ref/procedure-callingconvention-stack-4.log +++ b/src/test/ref/procedure-callingconvention-stack-4.log @@ -328,7 +328,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -503,7 +503,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-callingconvention-stack-5.log b/src/test/ref/procedure-callingconvention-stack-5.log index 31ccc9f71..dd9548762 100644 --- a/src/test/ref/procedure-callingconvention-stack-5.log +++ b/src/test/ref/procedure-callingconvention-stack-5.log @@ -245,7 +245,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -387,7 +387,7 @@ __start: { sta.z current+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-declare-10.log b/src/test/ref/procedure-declare-10.log index 5f3d5ca17..3218ad121 100644 --- a/src/test/ref/procedure-declare-10.log +++ b/src/test/ref/procedure-declare-10.log @@ -263,7 +263,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] + // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near memcpy_from_main: jsr memcpy jmp __breturn @@ -400,7 +400,7 @@ Score: 783 main: { // memcpy(SCREEN, STRING, sizeof(STRING)) // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] + // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near jsr memcpy // main::@return // } diff --git a/src/test/ref/procedure-declare-2.log b/src/test/ref/procedure-declare-2.log index 21d1bd4ac..47974ca58 100644 --- a/src/test/ref/procedure-declare-2.log +++ b/src/test/ref/procedure-declare-2.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-3.log b/src/test/ref/procedure-declare-3.log index bf558df5c..b5e6d9a40 100644 --- a/src/test/ref/procedure-declare-3.log +++ b/src/test/ref/procedure-declare-3.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-4.log b/src/test/ref/procedure-declare-4.log index 15d26e0d7..91a28e0c1 100644 --- a/src/test/ref/procedure-declare-4.log +++ b/src/test/ref/procedure-declare-4.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -371,7 +371,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 1) @@ -386,7 +386,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-5.log b/src/test/ref/procedure-declare-5.log index b7f393e78..cd4778497 100644 --- a/src/test/ref/procedure-declare-5.log +++ b/src/test/ref/procedure-declare-5.log @@ -150,7 +150,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call f - // [4] phi from main to f [phi:main->f] + // [4] phi from main to f [phi:main->f] -- call_phi_near f_from_main: jsr f jmp __b1 @@ -217,7 +217,7 @@ main: { .label SCREEN = $400 // f() // [1] call f - // [4] phi from main to f [phi:main->f] + // [4] phi from main to f [phi:main->f] -- call_phi_near jsr f // main::@1 // SCREEN[0] = f() diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 77456ef24..5e5e887b4 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -2507,7 +2507,7 @@ main: { lda #$dd sta IO_RAM // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] + // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] @@ -2523,7 +2523,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near lda #str @@ -2538,7 +2538,7 @@ main: { // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near lda #print_screen @@ -2558,7 +2558,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2575,7 +2575,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2592,7 +2592,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2609,7 +2609,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2626,7 +2626,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2643,7 +2643,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near ldx #0 jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2660,7 +2660,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2677,7 +2677,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2694,7 +2694,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2711,7 +2711,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2728,7 +2728,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2745,7 +2745,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2762,7 +2762,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2779,7 +2779,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2796,7 +2796,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2813,7 +2813,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2830,7 +2830,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2847,7 +2847,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2864,7 +2864,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2881,7 +2881,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2898,7 +2898,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2915,7 +2915,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2932,7 +2932,7 @@ main: { // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 lda #$17 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport jmp __b27 @@ -2963,7 +2963,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] + // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -3004,7 +3004,7 @@ print_str: { // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3077,7 +3077,7 @@ testProcport: { // [67] phi from testProcport to print_str [phi:testProcport->print_str] print_str_from_testProcport: // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near lda #str @@ -3090,7 +3090,7 @@ testProcport: { // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] print_uchar_from___b1: - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] __b2_from___b1: @@ -3101,7 +3101,7 @@ testProcport: { // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] print_str_from___b2: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near lda #str1 @@ -3115,7 +3115,7 @@ testProcport: { // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] print_uchar_from___b3: - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] __b4_from___b3: @@ -3126,7 +3126,7 @@ testProcport: { // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] print_str_from___b4: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near lda #str1 @@ -3140,7 +3140,7 @@ testProcport: { // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] print_uchar_from___b5: - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] __b6_from___b5: @@ -3151,7 +3151,7 @@ testProcport: { // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] print_str_from___b6: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near lda #str3 @@ -3165,7 +3165,7 @@ testProcport: { // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] print_uchar_from___b7: - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] __b8_from___b7: @@ -3176,7 +3176,7 @@ testProcport: { // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] print_str_from___b8: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near lda #str3 @@ -3190,7 +3190,7 @@ testProcport: { // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] print_uchar_from___b9: - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] __b10_from___b9: @@ -3201,7 +3201,7 @@ testProcport: { // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] print_str_from___b10: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near lda #str5 @@ -3215,7 +3215,7 @@ testProcport: { // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] print_uchar_from___b11: - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] __b12_from___b11: @@ -3226,7 +3226,7 @@ testProcport: { // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] print_str_from___b12: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near lda #str5 @@ -3240,7 +3240,7 @@ testProcport: { // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] print_uchar_from___b13: - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] __b14_from___b13: @@ -3251,7 +3251,7 @@ testProcport: { // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] print_str_from___b14: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near lda #str5 @@ -3265,7 +3265,7 @@ testProcport: { // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] print_uchar_from___b15: - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] __b16_from___b15: @@ -3276,7 +3276,7 @@ testProcport: { // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] print_ln_from___b16: // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near jsr print_ln jmp __breturn // testProcport::@return @@ -3377,7 +3377,7 @@ print_uchar: { // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -3391,7 +3391,7 @@ print_uchar: { // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3795,7 +3795,7 @@ main: { sta IO_RAM // print_cls() // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] + // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] // main::@2 @@ -3807,7 +3807,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near lda #str @@ -3819,7 +3819,7 @@ main: { // [13] call print_ln // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near lda #print_screen @@ -3836,7 +3836,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -3850,7 +3850,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -3864,7 +3864,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -3878,7 +3878,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -3892,7 +3892,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -3905,7 +3905,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near tax jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -3918,7 +3918,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -3932,7 +3932,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near tax jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -3946,7 +3946,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -3960,7 +3960,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -3974,7 +3974,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -3987,7 +3987,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near tax jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -4001,7 +4001,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -4014,7 +4014,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near tax jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -4028,7 +4028,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -4042,7 +4042,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -4056,7 +4056,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -4069,7 +4069,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near tax jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -4083,7 +4083,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -4096,7 +4096,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -4109,7 +4109,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -4123,7 +4123,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -4136,7 +4136,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near tax jsr testProcport // main::@27 @@ -4169,7 +4169,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] + // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -4205,7 +4205,7 @@ print_str: { // [72] call print_char // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4280,7 +4280,7 @@ testProcport: { // [86] call print_str // [67] phi from testProcport to print_str [phi:testProcport->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near lda #str @@ -4291,7 +4291,7 @@ testProcport: { // [87] print_uchar::b#0 = testProcport::ddr#23 // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] // testProcport::@2 @@ -4299,7 +4299,7 @@ testProcport: { // [90] call print_str // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near lda #str1 @@ -4311,7 +4311,7 @@ testProcport: { ldx.z port // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] // testProcport::@4 @@ -4319,7 +4319,7 @@ testProcport: { // [94] call print_str // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near lda #str1 @@ -4331,7 +4331,7 @@ testProcport: { ldx.z ddr2 // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] // testProcport::@6 @@ -4339,7 +4339,7 @@ testProcport: { // [98] call print_str // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near lda #str3 @@ -4351,7 +4351,7 @@ testProcport: { ldx.z PROCPORT_DDR // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] // testProcport::@8 @@ -4359,7 +4359,7 @@ testProcport: { // [102] call print_str // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near lda #str3 @@ -4371,7 +4371,7 @@ testProcport: { ldx.z PROCPORT // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] // testProcport::@10 @@ -4379,7 +4379,7 @@ testProcport: { // [106] call print_str // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near lda #str5 @@ -4391,7 +4391,7 @@ testProcport: { ldx BASIC_ROM // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] // testProcport::@12 @@ -4399,7 +4399,7 @@ testProcport: { // [110] call print_str // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near lda #str5 @@ -4411,7 +4411,7 @@ testProcport: { ldx IO_RAM // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] // testProcport::@14 @@ -4419,7 +4419,7 @@ testProcport: { // [114] call print_str // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near lda #str5 @@ -4431,7 +4431,7 @@ testProcport: { ldx KERNAL_ROM // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] // testProcport::@16 @@ -4439,7 +4439,7 @@ testProcport: { // [118] call print_ln // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near jsr print_ln // testProcport::@return // } @@ -4540,7 +4540,7 @@ print_uchar: { // Table of hexadecimal digits // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4553,7 +4553,7 @@ print_uchar: { // [136] call print_char // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/ptrptr-optimize-1.log b/src/test/ref/ptrptr-optimize-1.log index e4fffb39e..467c93875 100644 --- a/src/test/ref/ptrptr-optimize-1.log +++ b/src/test/ref/ptrptr-optimize-1.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub jmp __breturn @@ -271,7 +271,7 @@ main: { // sub('a',pscreen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -279,7 +279,7 @@ main: { // sub('b',pscreen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrptr-optimize-2.log b/src/test/ref/ptrptr-optimize-2.log index f569b5aab..112d4cd77 100644 --- a/src/test/ref/ptrptr-optimize-2.log +++ b/src/test/ref/ptrptr-optimize-2.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub jmp __breturn @@ -270,7 +270,7 @@ main: { // sub('a',&screen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -278,7 +278,7 @@ main: { // sub('b',&screen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 42e5fb047..9a333a160 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -519,14 +519,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call lvalue + // [1] call lvalue -- call_phi_near jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call rvalue + // [3] call rvalue -- call_phi_near jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -534,7 +534,7 @@ main: { // main::@2 __b2: // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near rvaluevar_from___b2: jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -543,7 +543,7 @@ main: { // main::@3 __b3: // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near lvaluevar_from___b3: jsr lvaluevar jmp __breturn @@ -837,24 +837,24 @@ Score: 1318 // main main: { // lvalue() - // [1] call lvalue + // [1] call lvalue -- call_phi_near jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // rvalue() - // [3] call rvalue + // [3] call rvalue -- call_phi_near jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // rvaluevar() // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // lvaluevar() // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near jsr lvaluevar // main::@return // } diff --git a/src/test/ref/register-0.log b/src/test/ref/register-0.log index 7b7e77db1..539c7ec51 100644 --- a/src/test/ref/register-0.log +++ b/src/test/ref/register-0.log @@ -183,7 +183,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -196,7 +196,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b1 // main::@1 @@ -204,7 +204,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -212,7 +212,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -299,7 +299,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -311,21 +311,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/reserve-zp-global-range.log b/src/test/ref/reserve-zp-global-range.log index 48726c166..8ca16bd1a 100644 --- a/src/test/ref/reserve-zp-global-range.log +++ b/src/test/ref/reserve-zp-global-range.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index 1c39d5bee..6750f7002 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index 8d61803a7..a4705e225 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index 869577f5f..6296a0655 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -298,7 +298,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -310,7 +310,7 @@ main: { sta SCREEN,y // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 + // [7] call sub2 -- call_phi_near jsr sub2 // [8] sub2::return#0 = sub2::return#1 jmp __b3 @@ -437,7 +437,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 @@ -449,7 +449,7 @@ main: { // sub2(i) // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 + // [7] call sub2 -- call_phi_near jsr sub2 // [8] sub2::return#0 = sub2::return#1 // main::@3 diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 73b02ba54..25f767086 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-4.log b/src/test/ref/reserve-zp-procedure-4.log index 2f13f19d0..bd9d8b75a 100644 --- a/src/test/ref/reserve-zp-procedure-4.log +++ b/src/test/ref/reserve-zp-procedure-4.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index 74249a35f..d9ac26394 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -509,7 +509,7 @@ main: { // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] mul8u_from___b1: - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near jsr mul8u // [4] mul8u::return#2 = mul8u::res#2 jmp __b2 @@ -528,7 +528,7 @@ main: { // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] mul8u_from___b2: - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near jsr mul8u // [9] mul8u::return#3 = mul8u::res#2 jmp __b3 @@ -751,7 +751,7 @@ main: { ldx.z y // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near jsr mul8u // word z1 = mul8u(y,40) // [4] mul8u::return#2 = mul8u::res#2 @@ -770,7 +770,7 @@ main: { ldx.z y // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near jsr mul8u // word z2 = mul8u(y,40) // [9] mul8u::return#3 = mul8u::res#2 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index 0e330842b..d17638634 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -388,7 +388,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite + // [4] call position_sprite -- call_phi_near jsr position_sprite jmp __b2 // main::@2 @@ -575,7 +575,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite + // [4] call position_sprite -- call_phi_near jsr position_sprite // main::@2 // xpos += 10 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 1e41f8d2a..618158d3f 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1413,7 +1413,7 @@ main: { .label y = $14 .label x = $15 // [1] call init - // [15] phi from main to init [phi:main->init] + // [15] phi from main to init [phi:main->init] -- call_phi_near init_from_main: jsr init // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1469,7 +1469,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block + // [13] call draw_block -- call_phi_near jsr draw_block jmp __b6 // main::@6 @@ -1484,7 +1484,7 @@ main: { // init init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f - // [16] call init_sprites + // [16] call init_sprites -- call_phi_near jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] __b2_from_init: @@ -1496,7 +1496,7 @@ init: { memset_from___b2: // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near lda #screen @@ -1512,7 +1512,7 @@ init: { memset_from___b3: // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near lda #colors @@ -1589,7 +1589,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near mul8u_from_draw_block: jsr mul8u // [35] mul8u::return#2 = mul8u::res#2 @@ -2147,7 +2147,7 @@ main: { .label x = $15 // init() // [1] call init - // [15] phi from main to init [phi:main->init] + // [15] phi from main to init [phi:main->init] -- call_phi_near jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2199,7 +2199,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block + // [13] call draw_block -- call_phi_near jsr draw_block // main::@6 // for (byte y = 0; y < 9; y++) @@ -2213,7 +2213,7 @@ main: { init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f // init_sprites() - // [16] call init_sprites + // [16] call init_sprites -- call_phi_near jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] // init::@2 @@ -2222,7 +2222,7 @@ init: { // [66] phi from init::@2 to memset [phi:init::@2->memset] // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near lda #screen @@ -2235,7 +2235,7 @@ init: { // [66] phi from init::@3 to memset [phi:init::@3->memset] // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near lda #colors @@ -2316,7 +2316,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near jsr mul8u // word z = mul8u(y,40) // [35] mul8u::return#2 = mul8u::res#2 diff --git a/src/test/ref/scrollbig-clobber.log b/src/test/ref/scrollbig-clobber.log index dc0c56401..2b1e27aaa 100644 --- a/src/test/ref/scrollbig-clobber.log +++ b/src/test/ref/scrollbig-clobber.log @@ -325,7 +325,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call next_char + // [2] call next_char -- call_phi_near jsr next_char // [3] next_char::return#0 = next_char::return#1 jmp __b2 @@ -481,7 +481,7 @@ main: { // main::@1 __b1: // next_char() - // [2] call next_char + // [2] call next_char -- call_phi_near jsr next_char // [3] next_char::return#0 = next_char::return#1 // main::@2 diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index 68e2418bd..cb6b90aba 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -1524,7 +1524,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Initialize some points and print them main: { // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] + // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near init_points_from_main: jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1533,7 +1533,7 @@ main: { // main::@1 __b1: // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near print_points_from___b1: jsr print_points jmp __breturn @@ -1624,7 +1624,7 @@ print_points: { .label point = 9 .label i = 8 // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] + // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near print_cls_from_print_points: jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] @@ -1674,7 +1674,7 @@ print_points: { // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] print_uchar_from___b2: // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] __b4_from___b2: @@ -1682,7 +1682,7 @@ print_points: { // print_points::@4 __b4: // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near print_str_from___b4: jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] @@ -1701,7 +1701,7 @@ print_points: { // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] print_uchar_from___b3: // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] __b5_from___b3: @@ -1709,7 +1709,7 @@ print_points: { // print_points::@5 __b5: // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near print_ln_from___b5: jsr print_ln jmp __b6 @@ -1748,7 +1748,7 @@ print_points: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] + // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1775,7 +1775,7 @@ print_uchar: { // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1789,7 +1789,7 @@ print_uchar: { // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1831,7 +1831,7 @@ print_str: { // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2178,13 +2178,13 @@ Score: 10419 main: { // init_points() // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] + // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print_points() // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near jsr print_points // main::@return // } @@ -2264,7 +2264,7 @@ print_points: { .label i = 8 // print_cls() // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] + // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] // [20] phi print_line_cursor#26 = print_screen#0 [phi:print_points->print_points::@1#0] -- pbuz1=pbuc1 @@ -2306,13 +2306,13 @@ print_points: { // [25] call print_uchar // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] // print_points::@4 // print_str(" ") // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] // print_points::pointYpos1 @@ -2325,13 +2325,13 @@ print_points: { // [30] call print_uchar // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] // print_points::@5 // print_ln() // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near jsr print_ln // print_points::@6 // for(byte i: 0..NUM_POINTS-1) @@ -2367,7 +2367,7 @@ print_points: { print_cls: { // memset(print_screen, ' ', 1000) // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] + // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2393,7 +2393,7 @@ print_uchar: { // Table of hexadecimal digits // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2406,7 +2406,7 @@ print_uchar: { // [46] call print_char // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } @@ -2445,7 +2445,7 @@ print_str: { // [53] call print_char // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/sepa-optimize-problem-1.log b/src/test/ref/sepa-optimize-problem-1.log index 9af598909..36fc38e6c 100644 --- a/src/test/ref/sepa-optimize-problem-1.log +++ b/src/test/ref/sepa-optimize-problem-1.log @@ -408,7 +408,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] + // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -440,14 +440,14 @@ xputc: { } // main main: { - // [10] call _updatePotatoSprite + // [10] call _updatePotatoSprite -- call_phi_near jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [12] call _updateLupineSprite + // [12] call _updateLupineSprite -- call_phi_near jsr _updateLupineSprite jmp __breturn // main::@return @@ -474,7 +474,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite jmp __breturn // _updatePotatoSprite::@return @@ -501,7 +501,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite jmp __b1 // _updateLupineSprite::@1 @@ -516,7 +516,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite jmp __breturn // _updateLupineSprite::@return @@ -650,7 +650,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] + // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -681,12 +681,12 @@ xputc: { // main main: { // _updatePotatoSprite() - // [10] call _updatePotatoSprite + // [10] call _updatePotatoSprite -- call_phi_near jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // _updateLupineSprite() - // [12] call _updateLupineSprite + // [12] call _updateLupineSprite -- call_phi_near jsr _updateLupineSprite // main::@return // } @@ -713,7 +713,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite // _updatePotatoSprite::@return // } @@ -740,7 +740,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite // _updateLupineSprite::@1 // _copyDigitToAnySprite(SPR_LUPINE_UI, num2str[1]) @@ -753,7 +753,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite // _updateLupineSprite::@return // } diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 230bd0d2d..7101f227f 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1009,7 +1009,7 @@ main: { .label __16 = 4 // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] + // [25] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1083,7 +1083,7 @@ main: { // main::@10 __b10: // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint + // [10] call print_uint -- call_phi_near jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] __b12_from___b10: @@ -1094,7 +1094,7 @@ main: { // [36] phi from main::@12 to print_char [phi:main::@12->print_char] print_char_from___b12: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1256,7 +1256,7 @@ print_uint: { // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1267,7 +1267,7 @@ print_uint: { // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1311,7 +1311,7 @@ print_uchar: { // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1325,7 +1325,7 @@ print_uchar: { // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1502,7 +1502,7 @@ main: { // memset(sieve, 0, COUNT) // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] + // [25] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::sieve_i#2 = sieve+2 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -1573,7 +1573,7 @@ main: { // main::@10 // print_uint(i) // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint + // [10] call print_uint -- call_phi_near jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] // main::@12 @@ -1581,7 +1581,7 @@ main: { // [12] call print_char // [36] phi from main::@12 to print_char [phi:main::@12->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1741,7 +1741,7 @@ print_uint: { // [32] call print_uchar // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1750,7 +1750,7 @@ print_uint: { // [34] call print_uchar // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -1795,7 +1795,7 @@ print_uchar: { // Table of hexadecimal digits // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -1808,7 +1808,7 @@ print_uchar: { // [46] call print_char // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-char-comparison.log b/src/test/ref/signed-char-comparison.log index ae96661aa..ed3c75220 100644 --- a/src/test/ref/signed-char-comparison.log +++ b/src/test/ref/signed-char-comparison.log @@ -224,7 +224,7 @@ main: { // main::@1 __b1: // [2] debug::dy#0 = main::dy#2 - // [3] call debug + // [3] call debug -- call_phi_near jsr debug jmp __b2 // main::@2 @@ -328,7 +328,7 @@ main: { __b1: // debug(dy) // [2] debug::dy#0 = main::dy#2 - // [3] call debug + // [3] call debug -- call_phi_near jsr debug // main::@2 // for(signed char dy:-128..127) diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index b7ebd34f7..b877c1b21 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -1219,7 +1219,7 @@ main: { sub_from___b1: // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near jsr sub jmp __b4 // main::@4 @@ -1231,7 +1231,7 @@ main: { sub_from___b4: // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near jsr sub jmp __b5 // main::@5 @@ -1243,7 +1243,7 @@ main: { sub_from___b5: // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near jsr sub jmp __b6 // main::@6 @@ -1259,7 +1259,7 @@ main: { // main::@2 __b2: // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near print_cls_from___b2: jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1289,7 +1289,7 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint + // [15] call print_sint -- call_phi_near jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] __b7_from___b3: @@ -1297,7 +1297,7 @@ main: { // main::@7 __b7: // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near print_ln_from___b7: jsr print_ln jmp __b8 @@ -1353,7 +1353,7 @@ sub: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] + // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1379,7 +1379,7 @@ print_sint: { // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1390,7 +1390,7 @@ print_sint: { // print_sint::@2 __b2: // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint + // [34] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -1406,7 +1406,7 @@ print_sint: { // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -1530,7 +1530,7 @@ print_uint: { // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1540,7 +1540,7 @@ print_uint: { // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1566,7 +1566,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1580,7 +1580,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1797,7 +1797,7 @@ main: { // [22] phi from main::@1 to sub [phi:main::@1->sub] // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near jsr sub // main::@4 // sub(i, $40) @@ -1807,7 +1807,7 @@ main: { // [22] phi from main::@4 to sub [phi:main::@4->sub] // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near jsr sub // main::@5 // sub(i, $40) @@ -1817,7 +1817,7 @@ main: { // [22] phi from main::@5 to sub [phi:main::@5->sub] // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near jsr sub // main::@6 // for(byte i: 0..8) @@ -1830,7 +1830,7 @@ main: { // main::@2 // print_cls() // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // [12] phi print_line_cursor#21 = print_screen#0 [phi:main::@2->main::@3#0] -- pbuz1=pbuc1 @@ -1858,13 +1858,13 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint + // [15] call print_sint -- call_phi_near jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] // main::@7 // print_ln() // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near jsr print_ln // main::@8 // for(byte j: 0..8) @@ -1917,7 +1917,7 @@ sub: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] + // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1939,7 +1939,7 @@ print_sint: { // [31] call print_char // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1948,7 +1948,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint + // [34] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -1961,7 +1961,7 @@ print_sint: { // [37] call print_char // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -2082,7 +2082,7 @@ print_uint: { ldx.z w+1 // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2090,7 +2090,7 @@ print_uint: { ldx.z w // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2116,7 +2116,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2129,7 +2129,7 @@ print_uchar: { // [65] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 400f1a240..3657fb28c 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -961,7 +961,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call init + // [1] call init -- call_phi_near jsr init // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1011,7 +1011,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call anim + // [5] call anim -- call_phi_near jsr anim jmp __b1_from___b2 } @@ -1443,7 +1443,7 @@ Score: 6364 // main main: { // init() - // [1] call init + // [1] call init -- call_phi_near jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi yvel_init#15 = $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 @@ -1484,7 +1484,7 @@ main: { // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // anim() - // [5] call anim + // [5] call anim -- call_phi_near jsr anim jmp __b1 } diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index a837a383f..5f8b3b043 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -1301,7 +1301,7 @@ main: { // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] setFAC_from_main: - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -1312,7 +1312,7 @@ main: { jmp __b2 // main::@2 __b2: - // [3] call divFACby10 + // [3] call divFACby10 -- call_phi_near jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1322,7 +1322,7 @@ main: { // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] setMEMtoFAC_from___b3: - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near lda #f_127 @@ -1354,7 +1354,7 @@ main: { // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] setFAC_from___b1: - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] __b4_from___b1: @@ -1364,7 +1364,7 @@ main: { // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] mulFACbyMEM_from___b4: - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near lda #f_2pi @@ -1378,7 +1378,7 @@ main: { // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] setMEMtoFAC_from___b5: - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near lda #f_i @@ -1392,7 +1392,7 @@ main: { // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] setFAC_from___b6: - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -1404,7 +1404,7 @@ main: { // main::@7 __b7: // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near divMEMbyFAC_from___b7: jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1412,7 +1412,7 @@ main: { jmp __b8 // main::@8 __b8: - // [18] call sinFAC + // [18] call sinFAC -- call_phi_near jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1422,7 +1422,7 @@ main: { // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] mulFACbyMEM_from___b9: - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near lda #f_127 @@ -1434,7 +1434,7 @@ main: { // main::@10 __b10: // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near addMEMtoFAC_from___b10: jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1442,14 +1442,14 @@ main: { jmp __b11 // main::@11 __b11: - // [24] call getFAC + // [24] call getFAC -- call_phi_near jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 jmp __b12 // main::@12 __b12: // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint + // [27] call print_uint -- call_phi_near jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1457,7 +1457,7 @@ main: { // main::@13 __b13: // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near print_ln_from___b13: jsr print_ln jmp __b14 @@ -1702,7 +1702,7 @@ print_uint: { // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1713,7 +1713,7 @@ print_uint: { // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2062,7 +2062,7 @@ main: { // setFAC(1275) // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -2071,14 +2071,14 @@ main: { // [2] phi from main to main::@2 [phi:main->main::@2] // main::@2 // divFACby10() - // [3] call divFACby10 + // [3] call divFACby10 -- call_phi_near jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // setMEMtoFAC(f_127) // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near lda #f_127 @@ -2108,14 +2108,14 @@ main: { sta.z setFAC.w+1 // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] // main::@4 // mulFACbyMEM(f_2pi) // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near lda #f_2pi @@ -2126,7 +2126,7 @@ main: { // setMEMtoFAC(f_i) // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near lda #f_i @@ -2137,7 +2137,7 @@ main: { // setFAC(25) // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -2147,19 +2147,19 @@ main: { // main::@7 // divMEMbyFAC(f_i) // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sinFAC() - // [18] call sinFAC + // [18] call sinFAC -- call_phi_near jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // mulFACbyMEM(f_127) // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near lda #f_127 @@ -2169,24 +2169,24 @@ main: { // main::@10 // addMEMtoFAC(f_127) // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // getFAC() - // [24] call getFAC + // [24] call getFAC -- call_phi_near jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 // main::@12 // print_uint(getFAC()) // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint + // [27] call print_uint -- call_phi_near jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_ln() // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near jsr print_ln // main::@14 // for(byte i : 1..25) @@ -2422,7 +2422,7 @@ print_uint: { // [73] call print_uchar // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2431,7 +2431,7 @@ print_uint: { // [75] call print_uchar // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2488,7 +2488,7 @@ print_uchar: { // Table of hexadecimal digits // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2501,7 +2501,7 @@ print_uchar: { // [88] call print_char // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 03d6776c4..3136a40cd 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -2907,7 +2907,7 @@ main: { .label sw = $1a .label st1 = $24 // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near sin16s_gen_from_main: jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2916,7 +2916,7 @@ main: { // main::@5 __b5: // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near print_cls_from___b5: jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2969,7 +2969,7 @@ main: { // [35] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -2983,7 +2983,7 @@ main: { // main::@3 __b3: // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint + // [13] call print_sint -- call_phi_near jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -2994,7 +2994,7 @@ main: { // [35] phi from main::@6 to print_str [phi:main::@6->print_str] print_str_from___b6: // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near lda #str @@ -3039,7 +3039,7 @@ sin16s_gen: { .label i = $12 // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near div32u16u_from_sin16s_gen: jsr div32u16u // [19] div32u16u::return#0 = div32u16u::return#1 @@ -3097,7 +3097,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s + // [25] call sin16s -- call_phi_near jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 jmp __b4 @@ -3149,7 +3149,7 @@ sin16s_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] + // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -3190,7 +3190,7 @@ print_str: { // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3219,7 +3219,7 @@ print_sint: { // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3230,7 +3230,7 @@ print_sint: { // print_sint::@2 __b2: // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint + // [47] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -3246,7 +3246,7 @@ print_sint: { // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -3278,7 +3278,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem lda #>0 @@ -3302,7 +3302,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near jsr divr16u // [58] divr16u::return#3 = divr16u::return#0 jmp __b2 @@ -3475,7 +3475,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [73] mulu16_sel::return#0 = mulu16_sel::return#12 jmp __b7 @@ -3499,7 +3499,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3522,7 +3522,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [82] mulu16_sel::return#2 = mulu16_sel::return#12 jmp __b9 @@ -3551,7 +3551,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3575,7 +3575,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [93] mulu16_sel::return#11 = mulu16_sel::return#12 jmp __b11 @@ -3706,7 +3706,7 @@ print_uint: { // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -3716,7 +3716,7 @@ print_uint: { // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -3851,7 +3851,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u + // [138] call mul16u -- call_phi_near jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 jmp __b1 @@ -3898,7 +3898,7 @@ print_uchar: { // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -3912,7 +3912,7 @@ print_uchar: { // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -4468,13 +4468,13 @@ main: { .label st1 = $24 // sin16s_gen(sintab1, wavelength) // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // print_cls() // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [4] phi print_char_cursor#20 = print_screen#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -4522,7 +4522,7 @@ main: { // [10] call print_str // [35] phi from main::@4 to print_str [phi:main::@4->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -4534,7 +4534,7 @@ main: { __b3: // print_sint(sw) // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint + // [13] call print_sint -- call_phi_near jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 @@ -4542,7 +4542,7 @@ main: { // [15] call print_str // [35] phi from main::@6 to print_str [phi:main::@6->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near lda #str @@ -4586,7 +4586,7 @@ sin16s_gen: { // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near jsr div32u16u // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [19] div32u16u::return#0 = div32u16u::return#1 @@ -4639,7 +4639,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s + // [25] call sin16s -- call_phi_near jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 // sin16s_gen::@4 @@ -4693,7 +4693,7 @@ sin16s_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] + // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -4729,7 +4729,7 @@ print_str: { // [40] call print_char // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4755,7 +4755,7 @@ print_sint: { // [44] call print_char // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4764,7 +4764,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint + // [47] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -4777,7 +4777,7 @@ print_sint: { // [50] call print_char // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -4808,7 +4808,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4830,7 +4830,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near jsr divr16u // unsigned int quotient_lo = divr16u(WORD0(dividend), divisor, rem16u) // [58] divr16u::return#3 = divr16u::return#0 @@ -4999,7 +4999,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x2 = mulu16_sel(x1, x1, 0) // [73] mulu16_sel::return#0 = mulu16_sel::return#12 @@ -5022,7 +5022,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x3 = mulu16_sel(x2, x1, 1) // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5044,7 +5044,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x3_6 = mulu16_sel(x3, $10000/6, 1) // [82] mulu16_sel::return#2 = mulu16_sel::return#12 @@ -5073,7 +5073,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x4 = mulu16_sel(x3, x1, 0) // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5096,7 +5096,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x5 = mulu16_sel(x4, x1, 0) // [93] mulu16_sel::return#11 = mulu16_sel::return#12 @@ -5222,7 +5222,7 @@ print_uint: { ldx.z w+1 // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -5230,7 +5230,7 @@ print_uint: { ldx.z w // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -5359,7 +5359,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u + // [138] call mul16u -- call_phi_near jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 // mulu16_sel::@1 @@ -5406,7 +5406,7 @@ print_uchar: { // Table of hexadecimal digits // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -5419,7 +5419,7 @@ print_uchar: { // [150] call print_char // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sqr-delta.log b/src/test/ref/sqr-delta.log index 8e9d5d606..a1c585f80 100644 --- a/src/test/ref/sqr-delta.log +++ b/src/test/ref/sqr-delta.log @@ -307,7 +307,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = $a // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] + // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near ifunc_from_main: jsr ifunc // [2] ifunc::return#2 = ifunc::return#0 @@ -517,7 +517,7 @@ main: { .label __0 = $a // ifunc(8) // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] + // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near jsr ifunc // ifunc(8) // [2] ifunc::return#2 = ifunc::return#0 diff --git a/src/test/ref/stack-relative-addressing.log b/src/test/ref/stack-relative-addressing.log index 086bef0c7..997b6394f 100644 --- a/src/test/ref/stack-relative-addressing.log +++ b/src/test/ref/stack-relative-addressing.log @@ -123,7 +123,7 @@ main: { pha lda #'3' pha - // [1] call peek_stack + // [1] call peek_stack -- call_phi_near // Then call a function jsr peek_stack jmp __b1 @@ -209,7 +209,7 @@ main: { lda #'3' pha // peek_stack() - // [1] call peek_stack + // [1] call peek_stack -- call_phi_near // Then call a function jsr peek_stack // main::@1 diff --git a/src/test/ref/stars-2.log b/src/test/ref/stars-2.log index ef8de9f69..41f56edd7 100644 --- a/src/test/ref/stars-2.log +++ b/src/test/ref/stars-2.log @@ -3903,7 +3903,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3911,7 +3911,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -3947,7 +3947,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3988,7 +3988,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -4000,7 +4000,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -4008,7 +4008,7 @@ cputc: { main: { .label i = $17 // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] + // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -4036,7 +4036,7 @@ main: { // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] printf_uchar_from___b2: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4051,7 +4051,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -4066,7 +4066,7 @@ main: { // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] printf_uchar_from___b4: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4081,7 +4081,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -4226,7 +4226,7 @@ cputln: { sta.z conio_cursor_x // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [59] call cscroll + // [59] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4349,7 +4349,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near uctoa_from___b1: jsr uctoa jmp __b2 @@ -4359,7 +4359,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4430,7 +4430,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4449,7 +4449,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4465,7 +4465,7 @@ cscroll: { memset_from___b3: // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4481,7 +4481,7 @@ cscroll: { memset_from___b4: // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4606,7 +4606,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -4664,7 +4664,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -5278,12 +5278,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -5312,7 +5312,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -5351,7 +5351,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -5362,7 +5362,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -5371,7 +5371,7 @@ main: { .label i = $17 // clrscr() // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] + // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -5396,7 +5396,7 @@ main: { ldx stars,y // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5408,7 +5408,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -5421,7 +5421,7 @@ main: { ldx stars+5,y // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5433,7 +5433,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -5579,7 +5579,7 @@ cputln: { // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [59] call cscroll + // [59] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5702,7 +5702,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5710,7 +5710,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uchar::@return // } @@ -5775,7 +5775,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5791,7 +5791,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5804,7 +5804,7 @@ cscroll: { // [143] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5817,7 +5817,7 @@ cscroll: { // [143] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5940,7 +5940,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -5992,7 +5992,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/static-init-code-0.log b/src/test/ref/static-init-code-0.log index 30a96a03e..1f7fcb3d1 100644 --- a/src/test/ref/static-init-code-0.log +++ b/src/test/ref/static-init-code-0.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -246,7 +246,7 @@ __start: { sta.z c2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/strcmp-0.log b/src/test/ref/strcmp-0.log index 3f97576c7..9481ebe15 100644 --- a/src/test/ref/strcmp-0.log +++ b/src/test/ref/strcmp-0.log @@ -6231,7 +6231,7 @@ __start: { // [5] conio_textcolor = LIGHT_BLUE -- vbuz1=vbuc1 lda #LIGHT_BLUE sta.z conio_textcolor - // [6] call conio_c64_init + // [6] call conio_c64_init -- call_phi_near jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -6239,7 +6239,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] + // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -6275,7 +6275,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy + // [15] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -6316,7 +6316,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [24] call cputln + // [24] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -6328,7 +6328,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [27] call cputln + // [27] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -6342,7 +6342,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near lda #str1 @@ -6364,7 +6364,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6381,7 +6381,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near lda #str11 @@ -6403,7 +6403,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6420,7 +6420,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near lda #str12 @@ -6442,7 +6442,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6459,7 +6459,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near lda #str13 @@ -6481,7 +6481,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6498,7 +6498,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near lda #str14 @@ -6520,7 +6520,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6537,7 +6537,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near lda #str15 @@ -6559,7 +6559,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6576,7 +6576,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near lda #str16 @@ -6598,7 +6598,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6615,7 +6615,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near lda #str16 @@ -6637,7 +6637,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6659,7 +6659,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near lda #str18 @@ -6681,7 +6681,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6703,7 +6703,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near lda #str19 @@ -6725,7 +6725,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6747,7 +6747,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near lda #str21 @@ -6769,7 +6769,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6791,7 +6791,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near lda #str111 @@ -6813,7 +6813,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6835,7 +6835,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near lda #str12 @@ -6857,7 +6857,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6879,7 +6879,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near lda #str12 @@ -6901,7 +6901,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6923,7 +6923,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near lda #str13 @@ -6945,7 +6945,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6967,7 +6967,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -6989,7 +6989,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -7011,7 +7011,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near lda #str14 @@ -7033,7 +7033,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -7250,7 +7250,7 @@ cputln: { sta.z conio_cursor_x // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [132] call cscroll + // [132] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -7401,7 +7401,7 @@ assert_cmp: { // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] textcolor_from___b8: - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -7417,7 +7417,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near lda #s2 @@ -7431,7 +7431,7 @@ assert_cmp: { // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] printf_schar_from___b13: - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] __b14_from___b13: @@ -7446,7 +7446,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near lda #s3 @@ -7460,7 +7460,7 @@ assert_cmp: { // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] printf_schar_from___b15: - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] __b16_from___b15: @@ -7475,7 +7475,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near lda #s4 @@ -7488,7 +7488,7 @@ assert_cmp: { // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] printf_string_from___b17: - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] __b18_from___b17: @@ -7503,7 +7503,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near lda #s1 @@ -7522,7 +7522,7 @@ assert_cmp: { // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] textcolor_from___b1: - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -7538,7 +7538,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near lda #s @@ -7551,7 +7551,7 @@ assert_cmp: { // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] printf_string_from___b10: - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] __b11_from___b10: @@ -7566,7 +7566,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near lda #s1 @@ -7819,7 +7819,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -7838,7 +7838,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -7854,7 +7854,7 @@ cscroll: { memset_from___b3: // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -7869,7 +7869,7 @@ cscroll: { // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -7988,7 +7988,7 @@ printf_schar: { __b2: // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near uctoa_from___b2: jsr uctoa jmp __b3 @@ -7998,7 +7998,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -8029,7 +8029,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str jmp __breturn // printf_string::@return @@ -8239,7 +8239,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -8297,7 +8297,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -9187,12 +9187,12 @@ __start: { lda #LIGHT_BLUE sta.z conio_textcolor // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [6] call conio_c64_init + // [6] call conio_c64_init -- call_phi_near jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] + // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [9] return @@ -9221,7 +9221,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy + // [15] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -9260,7 +9260,7 @@ cputc: { // [23] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [24] call cputln + // [24] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -9271,7 +9271,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [27] call cputln + // [27] call cputln -- call_phi_near jsr cputln rts } @@ -9285,7 +9285,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near lda #str1 @@ -9306,7 +9306,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9320,7 +9320,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near lda #str11 @@ -9341,7 +9341,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9355,7 +9355,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near lda #str12 @@ -9376,7 +9376,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9390,7 +9390,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near lda #str13 @@ -9411,7 +9411,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9425,7 +9425,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near lda #str14 @@ -9446,7 +9446,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9460,7 +9460,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near lda #str15 @@ -9481,7 +9481,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9495,7 +9495,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near lda #str16 @@ -9516,7 +9516,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9530,7 +9530,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near lda #str16 @@ -9551,7 +9551,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9570,7 +9570,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near lda #str18 @@ -9591,7 +9591,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9610,7 +9610,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near lda #str19 @@ -9631,7 +9631,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9650,7 +9650,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near lda #str21 @@ -9671,7 +9671,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9690,7 +9690,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near lda #str111 @@ -9711,7 +9711,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9730,7 +9730,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near lda #str12 @@ -9751,7 +9751,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9770,7 +9770,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near lda #str12 @@ -9791,7 +9791,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9810,7 +9810,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near lda #str13 @@ -9831,7 +9831,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9850,7 +9850,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -9871,7 +9871,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9890,7 +9890,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near lda #str14 @@ -9911,7 +9911,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -10128,7 +10128,7 @@ cputln: { // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [132] call cscroll + // [132] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -10275,7 +10275,7 @@ assert_cmp: { // textcolor(RED) // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -10288,7 +10288,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near lda #s2 @@ -10300,7 +10300,7 @@ assert_cmp: { ldx.z expect // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] // assert_cmp::@14 @@ -10312,7 +10312,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near lda #s3 @@ -10324,7 +10324,7 @@ assert_cmp: { ldx.z actual // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] // assert_cmp::@16 @@ -10336,7 +10336,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near lda #s4 @@ -10347,7 +10347,7 @@ assert_cmp: { // [164] printf_string::str#1 = assert_cmp::message#17 // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] // assert_cmp::@18 @@ -10359,7 +10359,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near lda #s1 @@ -10375,7 +10375,7 @@ assert_cmp: { // textcolor(GREEN) // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -10388,7 +10388,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near lda #s @@ -10399,7 +10399,7 @@ assert_cmp: { // [173] printf_string::str#0 = assert_cmp::message#17 // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] // assert_cmp::@11 @@ -10411,7 +10411,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near lda #s1 @@ -10650,7 +10650,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -10666,7 +10666,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -10679,7 +10679,7 @@ cscroll: { // [256] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -10692,7 +10692,7 @@ cscroll: { // [214] call memset // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -10812,7 +10812,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near jsr uctoa // printf_schar::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -10820,7 +10820,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_schar::@return // } @@ -10847,7 +10847,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str // printf_string::@return // } @@ -11050,7 +11050,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -11102,7 +11102,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/strcpy-0.log b/src/test/ref/strcpy-0.log index 9303adf6e..aaa3b83f8 100644 --- a/src/test/ref/strcpy-0.log +++ b/src/test/ref/strcpy-0.log @@ -223,7 +223,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near lda #src @@ -242,7 +242,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near lda #src1 @@ -372,7 +372,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near lda #src @@ -388,7 +388,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near lda #src1 diff --git a/src/test/ref/string-const-consolidation-noroot.log b/src/test/ref/string-const-consolidation-noroot.log index 3595bcc09..5c73a3a86 100644 --- a/src/test/ref/string-const-consolidation-noroot.log +++ b/src/test/ref/string-const-consolidation-noroot.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -419,7 +419,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -430,14 +430,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/string-const-consolidation-root.log b/src/test/ref/string-const-consolidation-root.log index 6a83cad43..fde1b3fb2 100644 --- a/src/test/ref/string-const-consolidation-root.log +++ b/src/test/ref/string-const-consolidation-root.log @@ -419,7 +419,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] + // [5] phi from main to print1 [phi:main->print1] -- call_phi_near print1_from_main: jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -428,7 +428,7 @@ main: { // main::@1 __b1: // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] + // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near print2_from___b1: jsr print2 jmp __breturn @@ -447,7 +447,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near lda #string_0 @@ -462,7 +462,7 @@ print1: { // [19] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near lda #string_1 @@ -477,7 +477,7 @@ print1: { // [19] phi from print1::@2 to print [phi:print1::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near lda #s @@ -495,7 +495,7 @@ print2: { // [19] phi from print2 to print [phi:print2->print] print_from_print2: // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near lda #string_0 @@ -510,7 +510,7 @@ print2: { // [19] phi from print2::@1 to print [phi:print2::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near lda #string_1 @@ -525,7 +525,7 @@ print2: { // [19] phi from print2::@2 to print [phi:print2::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near lda #s1 @@ -674,13 +674,13 @@ Score: 677 main: { // print1() // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] + // [5] phi from main to print1 [phi:main->print1] -- call_phi_near jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print2() // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] + // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near jsr print2 // main::@return // } @@ -697,7 +697,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near lda #string_0 @@ -709,7 +709,7 @@ print1: { // [8] call print // [19] phi from print1::@1 to print [phi:print1::@1->print] // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near lda #string_1 @@ -721,7 +721,7 @@ print1: { // [10] call print // [19] phi from print1::@2 to print [phi:print1::@2->print] // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near lda #s @@ -738,7 +738,7 @@ print2: { // [13] call print // [19] phi from print2 to print [phi:print2->print] // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near lda #string_0 @@ -750,7 +750,7 @@ print2: { // [15] call print // [19] phi from print2::@1 to print [phi:print2::@1->print] // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near lda #string_1 @@ -762,7 +762,7 @@ print2: { // [17] call print // [19] phi from print2::@2 to print [phi:print2::@2->print] // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near lda #s1 diff --git a/src/test/ref/string-const-consolidation.log b/src/test/ref/string-const-consolidation.log index 6861b8596..3a4a13034 100644 --- a/src/test/ref/string-const-consolidation.log +++ b/src/test/ref/string-const-consolidation.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -418,7 +418,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -429,14 +429,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 7c799cfa5..084de2ae1 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -206,7 +206,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout jmp __b3 // main::@3 @@ -311,7 +311,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout // main::@3 // chrout(MESSAGE[i++]); diff --git a/src/test/ref/string-escapes-4.log b/src/test/ref/string-escapes-4.log index d3c3418c1..45c3b0f47 100644 --- a/src/test/ref/string-escapes-4.log +++ b/src/test/ref/string-escapes-4.log @@ -244,7 +244,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout + // [6] call chrout -- call_phi_near jsr chrout jmp __b4 // main::@4 @@ -366,7 +366,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout + // [6] call chrout -- call_phi_near jsr chrout // main::@4 // SCREEN1[i] = MSG2[i] diff --git a/src/test/ref/string-pointer-problem.log b/src/test/ref/string-pointer-problem.log index 4d68344cc..a696bea92 100644 --- a/src/test/ref/string-pointer-problem.log +++ b/src/test/ref/string-pointer-problem.log @@ -199,7 +199,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] + // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near set_process_name_from_main: jsr set_process_name jmp __breturn @@ -332,7 +332,7 @@ Score: 948 main: { // set_process_name("keyboard") // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] + // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near jsr set_process_name // main::@return // } diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index 5cea80c20..6e81e0dd7 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -443,7 +443,7 @@ main: { strip_from_main: // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near lda #msg1 @@ -462,7 +462,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -478,7 +478,7 @@ main: { strip_from___b2: // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near lda #msg2 @@ -493,7 +493,7 @@ main: { // [20] phi from main::@3 to print [phi:main::@3->print] print_from___b3: // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near lda #msg2 @@ -722,7 +722,7 @@ main: { // [9] phi from main to strip [phi:main->strip] // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near lda #msg1 @@ -738,7 +738,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -751,7 +751,7 @@ main: { // [9] phi from main::@2 to strip [phi:main::@2->strip] // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near lda #msg2 @@ -763,7 +763,7 @@ main: { // [7] call print // [20] phi from main::@3 to print [phi:main::@3->print] // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near lda #msg2 diff --git a/src/test/ref/strncat-0.log b/src/test/ref/strncat-0.log index 0e88b069b..7b681effa 100644 --- a/src/test/ref/strncat-0.log +++ b/src/test/ref/strncat-0.log @@ -446,7 +446,7 @@ main: { // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] strncat_from_main: - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near lda #hello @@ -460,7 +460,7 @@ main: { // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] strncat_from___b3: - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near lda #space @@ -474,7 +474,7 @@ main: { // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] strncat_from___b4: - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near lda #world @@ -709,7 +709,7 @@ main: { // strncat(build, hello, 5) // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near lda #hello @@ -720,7 +720,7 @@ main: { // strncat(build, space, 5) // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near lda #space @@ -731,7 +731,7 @@ main: { // strncat(build, world, 5) // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near lda #world diff --git a/src/test/ref/struct-11.log b/src/test/ref/struct-11.log index a876813e0..a13b51663 100644 --- a/src/test/ref/struct-11.log +++ b/src/test/ref/struct-11.log @@ -368,7 +368,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near jsr print_person jmp __b1 // main::@1 @@ -384,7 +384,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near jsr print_person jmp __breturn // main::@return @@ -548,7 +548,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near jsr print_person // main::@1 // print_person(henriette) @@ -562,7 +562,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near jsr print_person // main::@return // } diff --git a/src/test/ref/struct-11b.log b/src/test/ref/struct-11b.log index 6f04d1233..4ab349f17 100644 --- a/src/test/ref/struct-11b.log +++ b/src/test/ref/struct-11b.log @@ -306,7 +306,7 @@ main: { print_person_from_main: // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near lda #jesper_initials @@ -321,7 +321,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near lda #henry_initials @@ -452,7 +452,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near lda #jesper_initials @@ -464,7 +464,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near lda #henry_initials diff --git a/src/test/ref/struct-12.log b/src/test/ref/struct-12.log index 7a8731e6a..9f897fa31 100644 --- a/src/test/ref/struct-12.log +++ b/src/test/ref/struct-12.log @@ -378,7 +378,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person jmp __breturn @@ -575,7 +575,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person // main::@1 @@ -596,7 +596,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log index d064fca8f..cd1a81ea7 100644 --- a/src/test/ref/struct-22.log +++ b/src/test/ref/struct-22.log @@ -224,7 +224,7 @@ main: { // [9] phi from main to print [phi:main->print] print_from_main: // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near jsr print jmp __b1 // main::@1 @@ -237,7 +237,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near jsr print jmp __breturn // main::@return @@ -348,7 +348,7 @@ main: { // [4] call print // [9] phi from main to print [phi:main->print] // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near jsr print // main::@1 // print(point2) @@ -359,7 +359,7 @@ main: { // [7] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/struct-23.log b/src/test/ref/struct-23.log index 2dac27139..963dfa9ad 100644 --- a/src/test/ref/struct-23.log +++ b/src/test/ref/struct-23.log @@ -329,7 +329,7 @@ main: { getPoint_from_main: // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near ldx #2 jsr getPoint // [2] getPoint::return_x#0 = getPoint::return_x#2 @@ -352,7 +352,7 @@ main: { getPoint_from___b1: // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near ldx #4 jsr getPoint // [9] getPoint::return_x#1 = getPoint::return_x#2 @@ -461,7 +461,7 @@ main: { // [16] phi from main to getPoint [phi:main->getPoint] // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near ldx #2 jsr getPoint // __ma struct Point point1 = getPoint(2, 3) @@ -485,7 +485,7 @@ main: { // [16] phi from main::@1 to getPoint [phi:main::@1->getPoint] // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near ldx #4 jsr getPoint // __ma struct Point point2 = getPoint(4, 5) diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index c55db1bdc..5918d9eca 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -286,7 +286,7 @@ main: { print_from_main: // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -298,7 +298,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near lda #2 jsr print jmp __breturn @@ -387,7 +387,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -396,7 +396,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near lda #2 jsr print // main::@return diff --git a/src/test/ref/struct-44.log b/src/test/ref/struct-44.log index da5547970..f8aac3cdb 100644 --- a/src/test/ref/struct-44.log +++ b/src/test/ref/struct-44.log @@ -1316,7 +1316,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1330,7 +1330,7 @@ main: { // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near jsr print_ln jmp __b2 // main::@2 @@ -1360,7 +1360,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near jsr print_circle jmp __breturn // main::@return @@ -1381,7 +1381,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near lda #str @@ -1394,7 +1394,7 @@ print_circle: { // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] print_uint_from___b1: - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] __b2_from___b1: @@ -1406,7 +1406,7 @@ print_circle: { print_str_from___b2: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near lda #str1 @@ -1423,7 +1423,7 @@ print_circle: { // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] print_uint_from___b3: - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] __b4_from___b3: @@ -1435,7 +1435,7 @@ print_circle: { print_str_from___b4: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near lda #str2 @@ -1452,7 +1452,7 @@ print_circle: { // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] print_uint_from___b5: - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] __b6_from___b5: @@ -1464,7 +1464,7 @@ print_circle: { print_str_from___b6: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near lda #str3 @@ -1474,7 +1474,7 @@ print_circle: { // print_circle::@7 __b7: // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar + // [28] call print_uchar -- call_phi_near jsr print_uchar jmp __breturn // print_circle::@return @@ -1541,7 +1541,7 @@ print_str: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1572,7 +1572,7 @@ print_uint: { print_char_from_print_uint: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near jsr print_char jmp __b1 // print_uint::@1 @@ -1589,7 +1589,7 @@ print_uint: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near jsr print_char jmp __b2 // print_uint::@2 @@ -1609,7 +1609,7 @@ print_uint: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near jsr print_char jmp __b3 // print_uint::@3 @@ -1626,7 +1626,7 @@ print_uint: { print_char_from___b3: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near jsr print_char jmp __breturn // print_uint::@return @@ -1652,7 +1652,7 @@ print_uchar: { print_char_from_print_uchar: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1668,7 +1668,7 @@ print_uchar: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1696,7 +1696,7 @@ print_char: { // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] __breturn_from___b1: @@ -1957,7 +1957,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1968,7 +1968,7 @@ main: { // print_ln() // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near jsr print_ln // main::@2 // print_circle(c2) @@ -1996,7 +1996,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near jsr print_circle // main::@return // } @@ -2016,7 +2016,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near lda #str @@ -2027,7 +2027,7 @@ print_circle: { // [15] print_uint::i#0 = print_circle::c_radius#2 // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] // print_circle::@2 @@ -2036,7 +2036,7 @@ print_circle: { // [33] phi from print_circle::@2 to print_str [phi:print_circle::@2->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near lda #str1 @@ -2051,7 +2051,7 @@ print_circle: { sta.z print_uint.i+1 // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] // print_circle::@4 @@ -2060,7 +2060,7 @@ print_circle: { // [33] phi from print_circle::@4 to print_str [phi:print_circle::@4->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near lda #str2 @@ -2075,7 +2075,7 @@ print_circle: { sta.z print_uint.i+1 // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] // print_circle::@6 @@ -2084,7 +2084,7 @@ print_circle: { // [33] phi from print_circle::@6 to print_str [phi:print_circle::@6->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near lda #str3 @@ -2093,7 +2093,7 @@ print_circle: { // print_circle::@7 // print_uchar(c.color) // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar + // [28] call print_uchar -- call_phi_near jsr print_uchar // print_circle::@return // } @@ -2156,7 +2156,7 @@ print_str: { // [65] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -2188,7 +2188,7 @@ print_uint: { // [65] phi from print_uint to print_char [phi:print_uint->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near jsr print_char // print_uint::@1 // BYTE1(i) @@ -2205,7 +2205,7 @@ print_uint: { // [65] phi from print_uint::@1 to print_char [phi:print_uint::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near jsr print_char // print_uint::@2 // BYTE0(i) @@ -2225,7 +2225,7 @@ print_uint: { // [65] phi from print_uint::@2 to print_char [phi:print_uint::@2->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near jsr print_char // print_uint::@3 // BYTE0(i) @@ -2242,7 +2242,7 @@ print_uint: { // [65] phi from print_uint::@3 to print_char [phi:print_uint::@3->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near jsr print_char // print_uint::@return // } @@ -2268,7 +2268,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near jsr print_char // print_uchar::@1 // c&0x0f @@ -2283,7 +2283,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near jsr print_char // print_uchar::@return // } @@ -2310,7 +2310,7 @@ print_char: { // print_ln() // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] // [71] phi screen_line#24 = screen_line#25 [phi:print_char::@1->print_char::@return#0] -- register_copy diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 562daa3bc..160d184c7 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -205,7 +205,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call point - // [5] phi from main to point [phi:main->point] + // [5] phi from main to point [phi:main->point] -- call_phi_near point_from_main: jsr point jmp __b1 @@ -281,7 +281,7 @@ main: { .label SCREEN = $400 // point() // [1] call point - // [5] phi from main to point [phi:main->point] + // [5] phi from main to point [phi:main->point] -- call_phi_near jsr point // main::@1 // SCREEN[0] = q.x diff --git a/src/test/ref/struct-pointer-ints.log b/src/test/ref/struct-pointer-ints.log index 439c9747a..929f043f6 100644 --- a/src/test/ref/struct-pointer-ints.log +++ b/src/test/ref/struct-pointer-ints.log @@ -198,7 +198,7 @@ main: { dey sta s,y bne !- - // [1] call update + // [1] call update -- call_phi_near jsr update jmp __breturn // main::@return @@ -279,7 +279,7 @@ main: { sta s,y bne !- // update(&s, 1000) - // [1] call update + // [1] call update -- call_phi_near jsr update // main::@return // } diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index f3667e527..62e3627d2 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -219,7 +219,7 @@ main: { sta p-1,y dey bne !- - // [1] call set + // [1] call set -- call_phi_near jsr set jmp __b1 // main::@1 @@ -311,7 +311,7 @@ main: { dey bne !- // set(q) - // [1] call set + // [1] call set -- call_phi_near jsr set // main::@1 // SCREEN[0] = q->x diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index efca071e2..ae180a3ec 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -510,7 +510,7 @@ main: { // [1] call get // [21] phi from main to get [phi:main->get] get_from_main: - // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // [2] get::return_x#0 = get::return_x#7 @@ -540,7 +540,7 @@ main: { // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // [11] get::return_x#1 = get::return_x#7 // [12] get::return_y#1 = get::return_y#7 @@ -731,7 +731,7 @@ main: { // get(0) // [1] call get // [21] phi from main to get [phi:main->get] - // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // get(0) @@ -757,7 +757,7 @@ main: { tya // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // get(i) // [11] get::return_x#1 = get::return_x#7 diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index 25a9edc1e..21ef57152 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -337,7 +337,7 @@ main: { // [1] call get // [17] phi from main to get [phi:main->get] get_from_main: - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // [2] get::return_x#0 = get::return_x#2 @@ -366,7 +366,7 @@ main: { // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // [9] get::return_x#1 = get::return_x#2 jmp __b3 @@ -483,7 +483,7 @@ main: { // get(0) // [1] call get // [17] phi from main to get [phi:main->get] - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // get(0) @@ -508,7 +508,7 @@ main: { tya // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // get(i) // [9] get::return_x#1 = get::return_x#2 diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index 01cd484ed..aef25a7ae 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -366,7 +366,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -518,7 +518,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@2 // for ( char i: 0..1) diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 7fedae1e8..1ce20220d 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -302,7 +302,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near jsr print jmp __b1 // main::@1 @@ -316,7 +316,7 @@ main: { print_from___b1: // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near jsr print jmp __breturn // main::@return @@ -437,7 +437,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near jsr print // main::@1 // print(*ptr) @@ -449,7 +449,7 @@ main: { // [8] phi from main::@1 to print [phi:main::@1->print] // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index a2ca0c0e0..4c11521d2 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1039,7 +1039,7 @@ main: { sta (__13),y // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] @@ -1055,7 +1055,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near lda #str @@ -1069,7 +1069,7 @@ main: { // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1079,7 +1079,7 @@ main: { // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near lda #print_screen @@ -1097,7 +1097,7 @@ main: { // [21] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -1111,7 +1111,7 @@ main: { // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] print_uchar_from___b5: - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: @@ -1121,7 +1121,7 @@ main: { // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] print_ln_from___b6: - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // main::@return @@ -1139,7 +1139,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] + // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1180,7 +1180,7 @@ print_str: { // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1210,7 +1210,7 @@ print_uchar: { // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1224,7 +1224,7 @@ print_uchar: { // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1516,7 +1516,7 @@ main: { // print_cls() // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1528,7 +1528,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near lda #str @@ -1540,14 +1540,14 @@ main: { ldx.z 0 // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near lda #print_screen @@ -1563,7 +1563,7 @@ main: { // [12] call print_str // [21] phi from main::@4 to print_str [phi:main::@4->print_str] // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -1575,14 +1575,14 @@ main: { ldx $4004 // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // print_ln() // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near jsr print_ln // main::@return // } @@ -1600,7 +1600,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] + // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1636,7 +1636,7 @@ print_str: { // [26] call print_char // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -1666,7 +1666,7 @@ print_uchar: { // Table of hexadecimal digits // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -1679,7 +1679,7 @@ print_uchar: { // [34] call print_char // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index cbf14967f..670db72d5 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -391,7 +391,7 @@ main: { print_person_from_main: // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -406,7 +406,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near lda #person @@ -567,7 +567,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -579,7 +579,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near lda #person diff --git a/src/test/ref/struct-ptr-24.log b/src/test/ref/struct-ptr-24.log index 612b6a134..86e8070b3 100644 --- a/src/test/ref/struct-ptr-24.log +++ b/src/test/ref/struct-ptr-24.log @@ -227,7 +227,7 @@ main: { // main::@2 __b2: // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName + // [5] call PrintName -- call_phi_near jsr PrintName jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { __b2: // PrintName(file) // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName + // [5] call PrintName -- call_phi_near jsr PrintName // main::@3 // ++file; diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index 883b54c3a..00c214918 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -501,7 +501,7 @@ main: { lda ($fe),y sta.z uSize+1 // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint + // [3] call print_uint -- call_phi_near jsr print_uint jmp __breturn // main::@return @@ -524,7 +524,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -535,7 +535,7 @@ print_uint: { // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -561,7 +561,7 @@ print_uchar: { // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -575,7 +575,7 @@ print_uchar: { // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -713,7 +713,7 @@ main: { sta.z uSize+1 // print_uint(uSize) // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint + // [3] call print_uint -- call_phi_near jsr print_uint // main::@return // } @@ -735,7 +735,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -744,7 +744,7 @@ print_uint: { // [8] call print_uchar // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -770,7 +770,7 @@ print_uchar: { // Table of hexadecimal digits // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -783,7 +783,7 @@ print_uchar: { // [16] call print_char // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-28.log b/src/test/ref/struct-ptr-28.log index 16f789147..b55726613 100644 --- a/src/test/ref/struct-ptr-28.log +++ b/src/test/ref/struct-ptr-28.log @@ -406,7 +406,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near lda #jesper @@ -426,7 +426,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near lda #henriette @@ -618,7 +618,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near lda #jesper @@ -637,7 +637,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near lda #henriette diff --git a/src/test/ref/struct-ptr-29.log b/src/test/ref/struct-ptr-29.log index 0851f3245..f5178c5fa 100644 --- a/src/test/ref/struct-ptr-29.log +++ b/src/test/ref/struct-ptr-29.log @@ -372,7 +372,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -387,7 +387,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON @@ -559,7 +559,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -571,7 +571,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index ac2bddd57..f5c1e15fd 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -375,7 +375,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -543,7 +543,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@2 // for ( char i: 0..3) diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index 6a4043e79..40b5b2919 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -378,7 +378,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -393,7 +393,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON @@ -570,7 +570,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -582,7 +582,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-34.log b/src/test/ref/struct-ptr-34.log index 7c8268e35..a40dc698b 100644 --- a/src/test/ref/struct-ptr-34.log +++ b/src/test/ref/struct-ptr-34.log @@ -377,7 +377,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person jmp __b1 @@ -399,7 +399,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person jmp __breturn @@ -573,7 +573,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person // main::@1 @@ -594,7 +594,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-unwinding-2.log b/src/test/ref/struct-unwinding-2.log index 57b719231..bd3ca1afc 100644 --- a/src/test/ref/struct-unwinding-2.log +++ b/src/test/ref/struct-unwinding-2.log @@ -391,7 +391,7 @@ main: { print1_from_main: // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near lda #0 jsr print1 jmp __b1 @@ -407,7 +407,7 @@ main: { print2_from___b1: // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -423,7 +423,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -439,7 +439,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near lda #6 jsr print2 jmp __breturn @@ -607,7 +607,7 @@ main: { // [12] phi from main to print1 [phi:main->print1] // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near lda #0 jsr print1 // main::@1 @@ -621,7 +621,7 @@ main: { // [17] phi from main::@1 to print2 [phi:main::@1->print2] // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -634,7 +634,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -647,7 +647,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near lda #6 jsr print2 // main::@return diff --git a/src/test/ref/summin.log b/src/test/ref/summin.log index 72960af5a..fed3ac18d 100644 --- a/src/test/ref/summin.log +++ b/src/test/ref/summin.log @@ -344,7 +344,7 @@ main: { sum_from_main: // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near ldx #1 jsr sum // [2] sum::return#0 = sum::return#3 @@ -358,7 +358,7 @@ main: { sum_from___b1: // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near ldx #3 jsr sum // [5] sum::return#1 = sum::return#3 @@ -372,7 +372,7 @@ main: { sum_from___b2: // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near ldx #9 jsr sum // [8] sum::return#2 = sum::return#3 @@ -489,7 +489,7 @@ main: { // [14] phi from main to sum [phi:main->sum] // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near ldx #1 jsr sum // byte s1=sum(1,2) @@ -502,7 +502,7 @@ main: { // [14] phi from main::@1 to sum [phi:main::@1->sum] // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near ldx #3 jsr sum // byte s2=sum(3,4) @@ -515,7 +515,7 @@ main: { // [14] phi from main::@2 to sum [phi:main::@2->sum] // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near ldx #9 jsr sum // byte s3=sum(9,13) diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index e59a43842..9d783e981 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -413,7 +413,7 @@ main: { __b1: // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond + // [3] call cond -- call_phi_near jsr cond // [4] cond::return#0 = cond::return#1 jmp __b5 @@ -428,7 +428,7 @@ main: { __b3: // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 + // [8] call m2 -- call_phi_near jsr m2 // [9] m2::return#0 = m2::return#1 jmp __b7 @@ -458,7 +458,7 @@ main: { __b2: // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 + // [17] call m1 -- call_phi_near jsr m1 // [18] m1::return#0 = m1::return#1 jmp __b6 @@ -610,7 +610,7 @@ main: { // cond(i) // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond + // [3] call cond -- call_phi_near jsr cond // [4] cond::return#0 = cond::return#1 // main::@5 @@ -623,7 +623,7 @@ main: { // m2(i) // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 + // [8] call m2 -- call_phi_near jsr m2 // [9] m2::return#0 = m2::return#1 // main::@7 @@ -651,7 +651,7 @@ main: { // m1(i) // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 + // [17] call m1 -- call_phi_near jsr m1 // [18] m1::return#0 = m1::return#1 // main::@6 diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index 39b585c7f..fdd1384b5 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -268,7 +268,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -395,7 +395,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comments-global.log b/src/test/ref/test-comments-global.log index dd2286dbf..593c45e1e 100644 --- a/src/test/ref/test-comments-global.log +++ b/src/test/ref/test-comments-global.log @@ -130,7 +130,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -215,7 +215,7 @@ __start: { sta.z screen+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 991fbf8ef..438b8bb10 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -267,7 +267,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -392,7 +392,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index 8ca79b5a4..c9e36d50b 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -2186,7 +2186,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2279,7 +2279,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare jmp __b9 // main::@9 @@ -2296,7 +2296,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near print_ln_from___b5: jsr print_ln jmp __b10 @@ -2360,7 +2360,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] + // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -2467,14 +2467,14 @@ compare: { // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] print_sint_from___b6: // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near jsr print_sint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near print_str_from___b25: jsr print_str jmp __b26 @@ -2489,7 +2489,7 @@ compare: { // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] print_sint_from___b26: // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near jsr print_sint jmp __b27 // compare::@27 @@ -2500,7 +2500,7 @@ compare: { // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char jmp __breturn // compare::@return @@ -2812,7 +2812,7 @@ print_sint: { // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2823,7 +2823,7 @@ print_sint: { // print_sint::@2 __b2: // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint + // [80] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -2839,7 +2839,7 @@ print_sint: { // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -2886,7 +2886,7 @@ print_str: { // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2926,7 +2926,7 @@ print_uint: { // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2962,7 +2962,7 @@ print_uchar: { // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2976,7 +2976,7 @@ print_uchar: { // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3344,7 +3344,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3427,7 +3427,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare // main::@9 // if(++s==3) @@ -3441,7 +3441,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near jsr print_ln // main::@10 // [17] print_char_cursor#117 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3494,7 +3494,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] + // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -3592,13 +3592,13 @@ compare: { // [40] call print_sint // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near jsr print_sint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near jsr print_str // compare::@26 // print_sint(w2) @@ -3610,7 +3610,7 @@ compare: { // [44] call print_sint // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near jsr print_sint // compare::@27 // print_char(r) @@ -3619,7 +3619,7 @@ compare: { // [46] call print_char // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char // compare::@return // } @@ -3900,7 +3900,7 @@ print_sint: { // [77] call print_char // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3909,7 +3909,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint + // [80] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -3922,7 +3922,7 @@ print_sint: { // [83] call print_char // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -3965,7 +3965,7 @@ print_str: { // [90] call print_char // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4005,7 +4005,7 @@ print_uint: { ldx.z w+1 // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4013,7 +4013,7 @@ print_uint: { ldx.z w // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4039,7 +4039,7 @@ print_uchar: { // Table of hexadecimal digits // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4052,7 +4052,7 @@ print_uchar: { // [107] call print_char // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 993118abf..fc913e3fb 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -2072,7 +2072,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2165,7 +2165,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare jmp __b9 // main::@9 @@ -2182,7 +2182,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near print_ln_from___b5: jsr print_ln jmp __b10 @@ -2246,7 +2246,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] + // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -2353,14 +2353,14 @@ compare: { // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] print_uint_from___b6: // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near jsr print_uint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near print_str_from___b25: jsr print_str jmp __b26 @@ -2375,7 +2375,7 @@ compare: { // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] print_uint_from___b26: // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near jsr print_uint jmp __b27 // compare::@27 @@ -2386,7 +2386,7 @@ compare: { // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] __b28_from___b27: @@ -2397,7 +2397,7 @@ compare: { // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] print_char_from___b28: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __breturn @@ -2704,7 +2704,7 @@ print_uint: { // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2715,7 +2715,7 @@ print_uint: { // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2754,7 +2754,7 @@ print_str: { // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2802,7 +2802,7 @@ print_uchar: { // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2816,7 +2816,7 @@ print_uchar: { // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3161,7 +3161,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3244,7 +3244,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare // main::@9 // if(++s==3) @@ -3258,7 +3258,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near jsr print_ln // main::@10 // [17] print_char_cursor#108 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3311,7 +3311,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] + // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -3409,13 +3409,13 @@ compare: { // [40] call print_uint // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near jsr print_uint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near jsr print_str // compare::@26 // print_uint(w2) @@ -3427,7 +3427,7 @@ compare: { // [44] call print_uint // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near jsr print_uint // compare::@27 // print_char(r) @@ -3436,7 +3436,7 @@ compare: { // [46] call print_char // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] // compare::@28 @@ -3444,7 +3444,7 @@ compare: { // [48] call print_char // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near lda #' ' jsr print_char // compare::@return @@ -3722,7 +3722,7 @@ print_uint: { // [78] call print_uchar // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3731,7 +3731,7 @@ print_uint: { // [80] call print_uchar // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -3766,7 +3766,7 @@ print_str: { // [87] call print_char // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3815,7 +3815,7 @@ print_uchar: { // Table of hexadecimal digits // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3828,7 +3828,7 @@ print_uchar: { // [99] call print_char // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index 630c0dbb0..a984678bb 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -229,7 +229,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -356,7 +356,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index 20611a737..c651e9cbc 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -166,7 +166,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -258,7 +258,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index d07a3e81f..7fee032ec 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -421,7 +421,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call keyboard_init + // [1] call keyboard_init -- call_phi_near jsr keyboard_init jmp __b1 // main::@1 @@ -436,7 +436,7 @@ main: { // main::@2 __b2: // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near keyboard_key_pressed_from___b2: jsr keyboard_key_pressed // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -487,7 +487,7 @@ keyboard_init: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - // [14] call keyboard_matrix_read + // [14] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -641,7 +641,7 @@ Score: 1141 // main main: { // keyboard_init() - // [1] call keyboard_init + // [1] call keyboard_init -- call_phi_near jsr keyboard_init // main::@1 __b1: @@ -654,7 +654,7 @@ main: { // main::@2 // keyboard_key_pressed(KEY_SPACE) // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -706,7 +706,7 @@ keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 // keyboard_matrix_read(rowidx) - // [14] call keyboard_matrix_read + // [14] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index 8ac6f08aa..af2450073 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1139,7 +1139,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call keyboard_init + // [4] call keyboard_init -- call_phi_near // Init keyboard jsr keyboard_init jmp __b4 @@ -1173,7 +1173,7 @@ main: { // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] keyboard_matrix_read_from___b5: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 jmp __b17 @@ -1264,7 +1264,7 @@ main: { __b12: // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode + // [24] call keyboard_get_keycode -- call_phi_near jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 jmp __b18 @@ -1279,7 +1279,7 @@ main: { __b14: // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed + // [29] call keyboard_key_pressed -- call_phi_near jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 jmp __b19 @@ -1426,7 +1426,7 @@ keyboard_key_pressed: { // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] keyboard_matrix_read_from_keyboard_key_pressed: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -1774,7 +1774,7 @@ main: { // [3] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // keyboard_init() - // [4] call keyboard_init + // [4] call keyboard_init -- call_phi_near // Init keyboard jsr keyboard_init // main::@4 @@ -1804,7 +1804,7 @@ main: { ldx.z row // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // byte row_pressed_bits = keyboard_matrix_read(row) // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 @@ -1887,7 +1887,7 @@ main: { // byte key = keyboard_get_keycode(ch) // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode + // [24] call keyboard_get_keycode -- call_phi_near jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 // main::@18 @@ -1900,7 +1900,7 @@ main: { // keyboard_key_pressed(key) // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed + // [29] call keyboard_key_pressed -- call_phi_near jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 // main::@19 @@ -2049,7 +2049,7 @@ keyboard_key_pressed: { tax // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // keyboard_matrix_read(rowidx) // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 3bbd8dc31..a719270ef 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -1373,7 +1373,7 @@ main: { .label dw2 = $a .label dw = $e // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] + // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1461,7 +1461,7 @@ main: { lda.z __29+1 sta.z dw2+1 // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong + // [12] call print_ulong -- call_phi_near // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1473,7 +1473,7 @@ main: { // [50] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b4 @@ -1488,7 +1488,7 @@ main: { // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] print_uint_from___b4: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -1500,7 +1500,7 @@ main: { // [50] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from___b5: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b6 @@ -1515,7 +1515,7 @@ main: { // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] print_uint_from___b6: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -1527,7 +1527,7 @@ main: { // [50] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from___b7: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b8 @@ -1539,7 +1539,7 @@ main: { // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] print_uchar_from___b8: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1551,7 +1551,7 @@ main: { // [50] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from___b9: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b10 @@ -1563,7 +1563,7 @@ main: { // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] print_uchar_from___b10: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -1575,7 +1575,7 @@ main: { // [50] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from___b11: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b12 @@ -1587,7 +1587,7 @@ main: { // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] print_uchar_from___b12: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1599,7 +1599,7 @@ main: { // [50] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from___b13: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b14 @@ -1611,7 +1611,7 @@ main: { // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] print_uchar_from___b14: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -1620,7 +1620,7 @@ main: { __b15: // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near print_ln_from___b15: jsr print_ln jmp __b16 @@ -1651,7 +1651,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1679,7 +1679,7 @@ print_ulong: { // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint jmp __b1 // print_ulong::@1 @@ -1693,7 +1693,7 @@ print_ulong: { // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_ulong::@return @@ -1730,7 +1730,7 @@ print_uint: { // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1741,7 +1741,7 @@ print_uint: { // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1767,7 +1767,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1781,7 +1781,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2096,7 +2096,7 @@ main: { .label dw = $e // print_cls() // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] + // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2186,7 +2186,7 @@ main: { sta.z dw2+1 // print_ulong(dw2) // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong + // [12] call print_ulong -- call_phi_near // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2195,7 +2195,7 @@ main: { // [14] call print_char // [50] phi from main::@3 to print_char [phi:main::@3->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@4 @@ -2208,7 +2208,7 @@ main: { // [16] call print_uint // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -2217,7 +2217,7 @@ main: { // Test get high word of dword // [50] phi from main::@5 to print_char [phi:main::@5->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@6 @@ -2230,7 +2230,7 @@ main: { // [20] call print_uint // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -2239,7 +2239,7 @@ main: { // Test get low word of dword // [50] phi from main::@7 to print_char [phi:main::@7->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@8 @@ -2249,7 +2249,7 @@ main: { // [24] call print_uchar // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -2258,7 +2258,7 @@ main: { // Test get high high byte of dword // [50] phi from main::@9 to print_char [phi:main::@9->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@10 @@ -2268,7 +2268,7 @@ main: { // [28] call print_uchar // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -2277,7 +2277,7 @@ main: { // Test get low high byte of dword // [50] phi from main::@11 to print_char [phi:main::@11->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@12 @@ -2287,7 +2287,7 @@ main: { // [32] call print_uchar // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -2296,7 +2296,7 @@ main: { // Test get high low byte of dword // [50] phi from main::@13 to print_char [phi:main::@13->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@14 @@ -2306,14 +2306,14 @@ main: { // [36] call print_uchar // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) @@ -2342,7 +2342,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2369,7 +2369,7 @@ print_ulong: { // [46] call print_uint // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2381,7 +2381,7 @@ print_ulong: { // [48] call print_uint // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@return // } @@ -2418,7 +2418,7 @@ print_uint: { // [56] call print_uchar // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2427,7 +2427,7 @@ print_uint: { // [58] call print_uchar // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2453,7 +2453,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2466,7 +2466,7 @@ print_uchar: { // [66] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index cbfe562da..59c9e835e 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -650,7 +650,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] + // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near scrollup1_from_main: jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -659,7 +659,7 @@ main: { // main::@1 __b1: // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near scrollup2_from___b1: jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -668,7 +668,7 @@ main: { // main::@2 __b2: // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near scrollup3_from___b2: jsr scrollup3 jmp __breturn @@ -1081,19 +1081,19 @@ Score: 21407 main: { // scrollup1() // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] + // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // scrollup2() // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // scrollup3() // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near jsr scrollup3 // main::@return // } diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index ae2da3cb4..da47eae51 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -1105,7 +1105,7 @@ main: { .label w1 = 8 .label i = $a // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] + // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1156,7 +1156,7 @@ main: { // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] print_sint_from___b1: // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -1167,7 +1167,7 @@ main: { // [31] phi from main::@2 to print_char [phi:main::@2->print_char] print_char_from___b2: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b3 @@ -1182,7 +1182,7 @@ main: { // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] print_sint_from___b3: // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -1190,7 +1190,7 @@ main: { // main::@4 __b4: // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near print_ln_from___b4: jsr print_ln jmp __b5 @@ -1226,7 +1226,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] + // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1252,7 +1252,7 @@ print_sint: { // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1263,7 +1263,7 @@ print_sint: { // print_sint::@2 __b2: // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint + // [26] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -1279,7 +1279,7 @@ print_sint: { // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -1403,7 +1403,7 @@ print_uint: { // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1413,7 +1413,7 @@ print_uint: { // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1439,7 +1439,7 @@ print_uchar: { // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1453,7 +1453,7 @@ print_uchar: { // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1638,7 +1638,7 @@ main: { .label i = $a // print_cls() // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] + // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -1688,7 +1688,7 @@ main: { // [6] call print_sint // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -1696,7 +1696,7 @@ main: { // [8] call print_char // [31] phi from main::@2 to print_char [phi:main::@2->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@3 @@ -1709,13 +1709,13 @@ main: { // [10] call print_sint // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // print_ln() // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near jsr print_ln // main::@5 // for( byte i: 0..10 ) @@ -1748,7 +1748,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] + // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1770,7 +1770,7 @@ print_sint: { // [23] call print_char // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1779,7 +1779,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint + // [26] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -1792,7 +1792,7 @@ print_sint: { // [29] call print_char // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -1913,7 +1913,7 @@ print_uint: { ldx.z w+1 // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1921,7 +1921,7 @@ print_uint: { ldx.z w // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -1947,7 +1947,7 @@ print_uchar: { // Table of hexadecimal digits // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -1960,7 +1960,7 @@ print_uchar: { // [57] call print_char // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index 2a06ad9f5..d41b4ed6f 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -2127,14 +2127,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -2172,7 +2172,7 @@ conio_c64_init: { // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2192,7 +2192,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init + // [20] call tod_init -- call_phi_near jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] __b1_from_main: @@ -2203,7 +2203,7 @@ main: { // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2211,7 +2211,7 @@ main: { jmp __b2 // main::@2 __b2: - // [24] call tod_read + // [24] call tod_read -- call_phi_near jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -2230,7 +2230,7 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str + // [33] call tod_str -- call_phi_near jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -2238,7 +2238,7 @@ main: { // main::@4 __b4: // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near cputs_from___b4: jsr cputs jmp __b1_from___b4 @@ -2519,7 +2519,7 @@ cputs: { // cputs::@2 __b2: // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc + // [95] call cputc -- call_phi_near jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] __b1_from___b2: @@ -2555,7 +2555,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [102] call cputln + // [102] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2567,7 +2567,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [105] call cputln + // [105] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -2595,7 +2595,7 @@ cputln: { sta.z conio_cursor_x // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [110] call cscroll + // [110] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2623,7 +2623,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2642,7 +2642,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2658,7 +2658,7 @@ cscroll: { memset_from___b3: // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2674,7 +2674,7 @@ cscroll: { memset_from___b4: // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -3197,11 +3197,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -3232,7 +3232,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -3252,7 +3252,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init + // [20] call tod_init -- call_phi_near jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] // main::@1 @@ -3260,13 +3260,13 @@ main: { // gotoxy(0,0) // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // tod_read() - // [24] call tod_read + // [24] call tod_read -- call_phi_near jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -3284,13 +3284,13 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str + // [33] call tod_str -- call_phi_near jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputs(tod_str(tod_read())) // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near jsr cputs jmp __b1 } @@ -3598,7 +3598,7 @@ cputs: { __b2: // cputc(c) // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc + // [95] call cputc -- call_phi_near jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] // [89] phi cputs::s#2 = cputs::s#0 [phi:cputs::@2->cputs::@1#0] -- register_copy @@ -3632,7 +3632,7 @@ cputc: { // [101] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [102] call cputln + // [102] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3643,7 +3643,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [105] call cputln + // [105] call cputln -- call_phi_near jsr cputln rts } @@ -3676,7 +3676,7 @@ cputln: { // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [110] call cscroll + // [110] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -3701,7 +3701,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3717,7 +3717,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3730,7 +3730,7 @@ cscroll: { // [135] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3743,7 +3743,7 @@ cscroll: { // [135] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/toupper-1.log b/src/test/ref/toupper-1.log index a3c406731..cb5c3a047 100644 --- a/src/test/ref/toupper-1.log +++ b/src/test/ref/toupper-1.log @@ -1780,14 +1780,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1825,7 +1825,7 @@ conio_c64_init: { // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1843,7 +1843,7 @@ main: { sta $d018 // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] + // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] @@ -1864,7 +1864,7 @@ main: { // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] cputc_from___b1: - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near jsr cputc jmp __b4 // main::@4 @@ -1888,7 +1888,7 @@ main: { // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] gotoxy_from___b3: - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] __b2_from___b3: @@ -1905,7 +1905,7 @@ main: { __b2: // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper + // [28] call toupper -- call_phi_near jsr toupper // [29] toupper::return#3 = toupper::return#2 jmp __b5 @@ -1915,7 +1915,7 @@ main: { // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] cputc_from___b5: - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near jsr cputc jmp __b6 // main::@6 @@ -2159,7 +2159,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [73] call cputln + // [73] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2171,7 +2171,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [76] call cputln + // [76] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -2231,7 +2231,7 @@ cputln: { sta.z conio_cursor_x // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [86] call cscroll + // [86] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2259,7 +2259,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2278,7 +2278,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2294,7 +2294,7 @@ cscroll: { memset_from___b3: // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2310,7 +2310,7 @@ cscroll: { memset_from___b4: // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2766,11 +2766,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -2801,7 +2801,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2820,7 +2820,7 @@ main: { // clrscr() // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] + // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] // [18] phi main::c#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2836,7 +2836,7 @@ main: { lda.z c // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near jsr cputc // main::@4 // for(char c:0..0xff) @@ -2856,7 +2856,7 @@ main: { inx // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] // [26] phi main::c1#2 = 0 [phi:main::@3->main::@2#0] -- vbuz1=vbuc1 @@ -2870,7 +2870,7 @@ main: { // toupper(c) // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper + // [28] call toupper -- call_phi_near jsr toupper // [29] toupper::return#3 = toupper::return#2 // main::@5 @@ -2878,7 +2878,7 @@ main: { // [30] cputc::c#1 = toupper::return#3 // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near jsr cputc // main::@6 // for(char c:0..0xff) @@ -3118,7 +3118,7 @@ cputc: { // [72] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [73] call cputln + // [73] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3129,7 +3129,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [76] call cputln + // [76] call cputln -- call_phi_near jsr cputln rts } @@ -3191,7 +3191,7 @@ cputln: { // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [86] call cscroll + // [86] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -3216,7 +3216,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3232,7 +3232,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3245,7 +3245,7 @@ cscroll: { // [111] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3258,7 +3258,7 @@ cscroll: { // [111] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 3097d73f5..1d1caf5d6 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -866,7 +866,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call game_ready + // [2] call game_ready -- call_phi_near jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 jmp __b4 @@ -889,7 +889,7 @@ main: { print_str_ln_from___b3: // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near lda #str @@ -954,7 +954,7 @@ game_ready: { print_str_ln_from___b1: // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near lda #str @@ -988,7 +988,7 @@ print_str_ln: { .label str = 4 // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near print_str_from_print_str_ln: jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] @@ -997,7 +997,7 @@ print_str_ln: { // print_str_ln::@1 __b1: // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near print_ln_from___b1: jsr print_ln jmp __breturn @@ -1034,7 +1034,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char + // [30] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1253,7 +1253,7 @@ main: { // main::@1 __b1: // game_ready() - // [2] call game_ready + // [2] call game_ready -- call_phi_near jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 // main::@4 @@ -1275,7 +1275,7 @@ main: { // [19] phi from main::@3 to print_str_ln [phi:main::@3->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near lda #str @@ -1332,7 +1332,7 @@ game_ready: { // [19] phi from game_ready::@1 to print_str_ln [phi:game_ready::@1->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near lda #str @@ -1366,13 +1366,13 @@ print_str_ln: { // print_str(str) // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] // print_str_ln::@1 // print_ln() // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near jsr print_ln // print_str_ln::@return // } @@ -1405,7 +1405,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char + // [30] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/typedef-2.log b/src/test/ref/typedef-2.log index b0794ff9f..b687fafe3 100644 --- a/src/test/ref/typedef-2.log +++ b/src/test/ref/typedef-2.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -234,7 +234,7 @@ __start: { sta.z ptr+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/typedef-4.log b/src/test/ref/typedef-4.log index a7149e8a3..6f11f1843 100644 --- a/src/test/ref/typedef-4.log +++ b/src/test/ref/typedef-4.log @@ -143,7 +143,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -219,7 +219,7 @@ __start: { sta.z v // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index 178f9f3fd..e8c0b9553 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -1214,28 +1214,28 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testUnsigned + // [1] call testUnsigned -- call_phi_near jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testUnsignedVals + // [3] call testUnsignedVals -- call_phi_near jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [5] call testSigned + // [5] call testSigned -- call_phi_near jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testSignedVals + // [7] call testSignedVals -- call_phi_near jsr testSignedVals jmp __breturn // main::@return @@ -1547,22 +1547,22 @@ Score: 336 // main main: { // testUnsigned() - // [1] call testUnsigned + // [1] call testUnsigned -- call_phi_near jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testUnsignedVals() - // [3] call testUnsignedVals + // [3] call testUnsignedVals -- call_phi_near jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testSigned() - // [5] call testSigned + // [5] call testSigned -- call_phi_near jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testSignedVals() - // [7] call testSignedVals + // [7] call testSignedVals -- call_phi_near jsr testSignedVals // main::@return // } diff --git a/src/test/ref/union-7.log b/src/test/ref/union-7.log index 03cd69c4e..7c32c5599 100644 --- a/src/test/ref/union-7.log +++ b/src/test/ref/union-7.log @@ -264,7 +264,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print jmp __b1 @@ -280,7 +280,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -387,7 +387,7 @@ main: { bne !- // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print // main::@1 @@ -401,7 +401,7 @@ main: { bne !- // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/union-8.log b/src/test/ref/union-8.log index 2293bd594..719799d32 100644 --- a/src/test/ref/union-8.log +++ b/src/test/ref/union-8.log @@ -262,7 +262,7 @@ main: { // [1] call data // [8] phi from main to data [phi:main->data] data_from_main: - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near lda #<$1234 sta.z data.i lda #>$1234 @@ -284,7 +284,7 @@ main: { // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] data_from___b1: - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near lda #<$5678 sta.z data.i lda #>$5678 @@ -384,7 +384,7 @@ main: { // union Data d1 = data(0x1234) // [1] call data // [8] phi from main to data [phi:main->data] - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near lda #<$1234 sta.z data.i lda #>$1234 @@ -406,7 +406,7 @@ main: { // union Data d2 = data(0x5678) // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near lda #<$5678 sta.z data.i lda #>$5678 diff --git a/src/test/ref/var-register-zp-3.log b/src/test/ref/var-register-zp-3.log index 7515037a5..6d05b64b9 100644 --- a/src/test/ref/var-register-zp-3.log +++ b/src/test/ref/var-register-zp-3.log @@ -351,7 +351,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near lda #msg @@ -370,7 +370,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near lda #msg1 @@ -421,7 +421,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char + // [12] call print_char -- call_phi_near jsr print_char jmp __b3 // print2::@3 @@ -534,7 +534,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near lda #msg @@ -550,7 +550,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near lda #msg1 @@ -599,7 +599,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char + // [12] call print_char -- call_phi_near jsr print_char // print2::@3 // j += 2 diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index 104745bbf..c188609ed 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -340,7 +340,7 @@ main: { adc.z x // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -494,7 +494,7 @@ main: { // print(y, val1) // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( byte a: 0..100 ) diff --git a/src/test/ref/varmodel-ma_mem-3.log b/src/test/ref/varmodel-ma_mem-3.log index d685aab73..1acef1711 100644 --- a/src/test/ref/varmodel-ma_mem-3.log +++ b/src/test/ref/varmodel-ma_mem-3.log @@ -248,7 +248,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call model_ma_mem + // [1] call model_ma_mem -- call_phi_near jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -256,7 +256,7 @@ main: { // main::@1 __b1: // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near model_ssa_zp_from___b1: jsr model_ssa_zp jmp __breturn @@ -413,13 +413,13 @@ Score: 988 // main main: { // model_ma_mem() - // [1] call model_ma_mem + // [1] call model_ma_mem -- call_phi_near jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // model_ssa_zp() // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near jsr model_ssa_zp // main::@return // } diff --git a/src/test/ref/varmodel-mem-1.log b/src/test/ref/varmodel-mem-1.log index b7d15ea15..f7fb80684 100644 --- a/src/test/ref/varmodel-mem-1.log +++ b/src/test/ref/varmodel-mem-1.log @@ -306,7 +306,7 @@ main: { // [17] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near jsr sum // [5] sum::return#0 = sum::return#2 jmp __b2 @@ -321,7 +321,7 @@ main: { // [17] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near jsr sum // [10] sum::return#1 = sum::return#2 jmp __b3 @@ -453,7 +453,7 @@ main: { // [4] call sum // [17] phi from main::@1 to sum [phi:main::@1->sum] // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near jsr sum // sum(i,i) // [5] sum::return#0 = sum::return#2 @@ -466,7 +466,7 @@ main: { // [9] call sum // [17] phi from main::@2 to sum [phi:main::@2->sum] // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near jsr sum // sum(i,i) // [10] sum::return#1 = sum::return#2 diff --git a/src/test/ref/void-parameter.log b/src/test/ref/void-parameter.log index 874323b60..bb2e46799 100644 --- a/src/test/ref/void-parameter.log +++ b/src/test/ref/void-parameter.log @@ -204,7 +204,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -215,7 +215,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -225,7 +225,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -300,7 +300,7 @@ main: { // print() // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -308,14 +308,14 @@ main: { // print() // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print() // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/volatile-0.log b/src/test/ref/volatile-0.log index d95bbac39..94f5e8e54 100644 --- a/src/test/ref/volatile-0.log +++ b/src/test/ref/volatile-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -240,7 +240,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/volatile-2.log b/src/test/ref/volatile-2.log index 49b880883..ededfb26d 100644 --- a/src/test/ref/volatile-2.log +++ b/src/test/ref/volatile-2.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -278,7 +278,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index cac577834..9a71eb20b 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -1349,7 +1349,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] + // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near initscreen_from_main: jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -1359,7 +1359,7 @@ main: { // main::@1 __b1: // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] + // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near render_from___b1: jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1367,7 +1367,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call animate + // [5] call animate -- call_phi_near jsr animate jmp __b1_from___b2 } @@ -1452,7 +1452,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near findcol_from___b2: jsr findcol // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx @@ -1976,19 +1976,19 @@ Score: 1568620 main: { // initscreen() // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] + // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // render() // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] + // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animate() - // [5] call animate + // [5] call animate -- call_phi_near jsr animate jmp __b1 } @@ -2065,7 +2065,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near jsr findcol // byte col = findcol(x, y) // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/weeip-bbslist.log b/src/test/ref/weeip-bbslist.log index b8f240724..943137694 100644 --- a/src/test/ref/weeip-bbslist.log +++ b/src/test/ref/weeip-bbslist.log @@ -4093,14 +4093,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -4135,7 +4135,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4176,7 +4176,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -4188,7 +4188,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -4234,7 +4234,7 @@ main: { // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] printf_string_from___b2: - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4249,7 +4249,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -4268,7 +4268,7 @@ main: { // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] printf_string_from___b4: - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4283,7 +4283,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -4300,7 +4300,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near printf_uint_from___b6: jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -4316,7 +4316,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near lda #s2 @@ -4467,7 +4467,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4493,7 +4493,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str jmp __breturn // printf_string::@return @@ -4559,7 +4559,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near utoa_from___b1: jsr utoa jmp __b2 @@ -4569,7 +4569,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4598,7 +4598,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4617,7 +4617,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4633,7 +4633,7 @@ cscroll: { memset_from___b3: // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4649,7 +4649,7 @@ cscroll: { memset_from___b4: // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4787,7 +4787,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [115] utoa_append::return#0 = utoa_append::value#2 @@ -4843,7 +4843,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -5622,11 +5622,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -5655,7 +5655,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -5694,7 +5694,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -5705,7 +5705,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -5749,7 +5749,7 @@ main: { sta.z printf_string.str+1 // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -5778,7 +5778,7 @@ main: { sta.z printf_string.str+1 // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5790,7 +5790,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -5806,7 +5806,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -5818,7 +5818,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near lda #s2 @@ -5970,7 +5970,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5993,7 +5993,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str // printf_string::@return // } @@ -6056,7 +6056,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6064,7 +6064,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uint::@return // } @@ -6089,7 +6089,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -6105,7 +6105,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -6118,7 +6118,7 @@ cscroll: { // [136] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6131,7 +6131,7 @@ cscroll: { // [136] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -6267,7 +6267,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [115] utoa_append::return#0 = utoa_append::value#2 @@ -6317,7 +6317,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/weeip-checksum.log b/src/test/ref/weeip-checksum.log index 000ab670d..d1766bac7 100644 --- a/src/test/ref/weeip-checksum.log +++ b/src/test/ref/weeip-checksum.log @@ -729,7 +729,7 @@ main: { // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] add_checksum_from_main: - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -746,7 +746,7 @@ main: { // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] add_checksum_from___b1: - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -763,7 +763,7 @@ main: { // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] add_checksum_from___b2: - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near lda #<$3456 sta.z add_checksum.v lda #>$3456 @@ -991,7 +991,7 @@ main: { // add_checksum(0x1234) // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -1007,7 +1007,7 @@ main: { // add_checksum(0x2345) // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -1023,7 +1023,7 @@ main: { // add_checksum(0x3456) // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near lda #<$3456 sta.z add_checksum.v lda #>$3456 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index cb6bee255..7010c4f71 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -238,7 +238,7 @@ main: { __b1: // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy + // [3] call move_enemy -- call_phi_near jsr move_enemy jmp __b2 // main::@2 @@ -344,7 +344,7 @@ main: { // move_enemy(i) // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy + // [3] call move_enemy -- call_phi_near jsr move_enemy // main::@2 // for(byte i:0..5) diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index c0c2ed378..58a5e6075 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -323,28 +323,28 @@ main: { // [4] *(SCREEN+OFFSET_SPRITE_PTRS) = (char)SPRITE/$40 -- _deref_pbuc1=vbuc2 lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS - // [5] call saveZeropage + // [5] call saveZeropage -- call_phi_near jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [7] call sinZeropage + // [7] call sinZeropage -- call_phi_near jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [9] call animSprite + // [9] call animSprite -- call_phi_near jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [11] call restoreZeropage + // [11] call restoreZeropage -- call_phi_near jsr restoreZeropage jmp __breturn // main::@return @@ -541,22 +541,22 @@ main: { lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS // saveZeropage() - // [5] call saveZeropage + // [5] call saveZeropage -- call_phi_near jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // sinZeropage() - // [7] call sinZeropage + // [7] call sinZeropage -- call_phi_near jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animSprite() - // [9] call animSprite + // [9] call animSprite -- call_phi_near jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // restoreZeropage() - // [11] call restoreZeropage + // [11] call restoreZeropage -- call_phi_near jsr restoreZeropage // main::@return // } diff --git a/src/test/ref/zp-reserve-coalesce-problem.log b/src/test/ref/zp-reserve-coalesce-problem.log index 8eb06440f..c32198dec 100644 --- a/src/test/ref/zp-reserve-coalesce-problem.log +++ b/src/test/ref/zp-reserve-coalesce-problem.log @@ -663,7 +663,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call benchmarkCountdownFor + // [1] call benchmarkCountdownFor -- call_phi_near jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -671,7 +671,7 @@ main: { // main::@1 __b1: // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near benchmarkLandscape_from___b1: jsr benchmarkLandscape jmp __breturn @@ -1022,13 +1022,13 @@ Score: 649273 // main main: { // benchmarkCountdownFor() - // [1] call benchmarkCountdownFor + // [1] call benchmarkCountdownFor -- call_phi_near jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // benchmarkLandscape() // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near jsr benchmarkLandscape // main::@return // } diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index 93b37706c..9e7ddaf99 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -440,7 +440,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum + // [5] call sum -- call_phi_near jsr sum // [6] sum::return#0 = sum::return#1 jmp __b2 @@ -460,7 +460,7 @@ main: { inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [12] call sum2 + // [12] call sum2 -- call_phi_near jsr sum2 // [13] sum2::return#0 = sum2::return#1 jmp __b3 @@ -630,7 +630,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum + // [5] call sum -- call_phi_near jsr sum // [6] sum::return#0 = sum::return#1 // main::@2 @@ -649,7 +649,7 @@ main: { inx inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 - // [12] call sum2 + // [12] call sum2 -- call_phi_near jsr sum2 // [13] sum2::return#0 = sum2::return#1 // main::@3 diff --git a/src/test/target/procedure-callingconvention-stack-far-3.asm b/src/test/target/procedure-callingconvention-stack-far-3.asm deleted file mode 100644 index b361ef9a2..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.asm +++ /dev/null @@ -1,145 +0,0 @@ - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.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(__start) - // Global Constants & labels - .label SCREEN = $400 - .label val = 3 -.segment Code - // __start -__start: { - // __start::__init1 - // char val = 0 - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // printother -printother: { - .label i = 2 - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - // printother::@1 - __b1: - // (SCREEN+40)[i]++; - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z i - inc SCREEN+$28,x - // for(char i:0..5) - // [8] printother::i#1 = ++ printother::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1 - // printother::@return - // } - // [10] return - rts -} - // incval -incval: { - // val++; - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - // incval::@return - // } - // [12] return - rts -} - // printval -printval: { - // SCREEN[0] = val - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - // printval::@return - // } - // [14] return - rts -} - // ival -ival: { - // incval() - // [16] callexecute incval -- call_far_cx16_exit - jsr $ff6e - .byte incval - .byte $15 - // ival::@return - // } - // [17] return - rts -} - // pval -pval: { - // printval() - // [19] callexecute printval -- call_far_cx16_exit - jsr $ff6e - .byte printval - .byte $14 - // pval::@return - // } - // [20] return - rts -} - // main -main: { - .label i = 4 - // [22] phi from main to main::@1 [phi:main->main::@1] - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // pval() - // [23] callexecute pval -- call_far_cx16_exit - jsr $ff6e - .byte pval - .byte $14 - // printother() - // [24] callexecute printother -- call_vprc1 - jsr printother - // ival() - // [25] callexecute ival -- call_far_cx16_exit - jsr $ff6e - .byte ival - .byte $15 - // for(char i:0..5) - // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1 - // main::@return - // } - // [28] return - rts -} - // File Data diff --git a/src/test/target/procedure-callingconvention-stack-far-3.dbg b/src/test/target/procedure-callingconvention-stack-far-3.dbg deleted file mode 100644 index 51e9414f5..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.dbg +++ /dev/null @@ -1,153 +0,0 @@ - - - 0,KickAss.jar:/include/autoinclude.asm - 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\procedure-callingconvention-stack-far-3.asm - - - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - $080d,$080e,1,23,5,23,7 - $080f,$0810,1,24,5,24,7 - $0811,$0813,1,28,5,28,7 - $0814,$0814,1,31,5,31,7 - $0815,$0816,1,38,5,38,7 - $0817,$0818,1,39,5,39,7 - $0819,$081a,1,46,5,46,7 - $081b,$081d,1,47,5,47,7 - $081e,$081f,1,50,5,50,7 - $0820,$0821,1,52,5,52,7 - $0822,$0823,1,53,5,53,7 - $0824,$0825,1,54,5,54,7 - $0826,$0826,1,58,5,58,7 - $0827,$0828,1,64,5,64,7 - $0829,$0829,1,68,5,68,7 - $082a,$082b,1,74,5,74,7 - $082c,$082e,1,75,5,75,7 - $082f,$082f,1,79,5,79,7 - $0830,$0832,1,85,5,85,7 - $0833,$0833,1,86,5,86,9 - $0834,$0834,1,87,5,87,9 - $0835,$0835,1,88,5,88,9 - $0836,$0836,1,92,5,92,7 - $0837,$0839,1,98,5,98,7 - $083a,$083a,1,99,5,99,9 - $083b,$083b,1,100,5,100,9 - $083c,$083c,1,101,5,101,9 - $083d,$083d,1,105,5,105,7 - $083e,$083f,1,112,5,112,7 - $0840,$0841,1,113,5,113,7 - $0842,$0844,1,120,5,120,7 - $0845,$0845,1,121,5,121,9 - $0846,$0846,1,122,5,122,9 - $0847,$0847,1,123,5,123,9 - $0848,$084a,1,126,5,126,7 - $084b,$084d,1,129,5,129,7 - $084e,$084e,1,130,5,130,9 - $084f,$084f,1,131,5,131,9 - $0850,$0850,1,132,5,132,9 - $0851,$0852,1,135,5,135,7 - $0853,$0854,1,137,5,137,7 - $0855,$0856,1,138,5,138,7 - $0857,$0858,1,139,5,139,7 - $0859,$0859,1,143,5,143,7 - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - - - - $080d,$080e,1,23,5,23,7 - $080f,$0810,1,24,5,24,7 - $0811,$0813,1,28,5,28,7 - $0814,$0814,1,31,5,31,7 - $0815,$0816,1,38,5,38,7 - $0817,$0818,1,39,5,39,7 - $0819,$081a,1,46,5,46,7 - $081b,$081d,1,47,5,47,7 - $081e,$081f,1,50,5,50,7 - $0820,$0821,1,52,5,52,7 - $0822,$0823,1,53,5,53,7 - $0824,$0825,1,54,5,54,7 - $0826,$0826,1,58,5,58,7 - $0827,$0828,1,64,5,64,7 - $0829,$0829,1,68,5,68,7 - $082a,$082b,1,74,5,74,7 - $082c,$082e,1,75,5,75,7 - $082f,$082f,1,79,5,79,7 - $0830,$0832,1,85,5,85,7 - $0833,$0833,1,86,5,86,9 - $0834,$0834,1,87,5,87,9 - $0835,$0835,1,88,5,88,9 - $0836,$0836,1,92,5,92,7 - $0837,$0839,1,98,5,98,7 - $083a,$083a,1,99,5,99,9 - $083b,$083b,1,100,5,100,9 - $083c,$083c,1,101,5,101,9 - $083d,$083d,1,105,5,105,7 - $083e,$083f,1,112,5,112,7 - $0840,$0841,1,113,5,113,7 - $0842,$0844,1,120,5,120,7 - $0845,$0845,1,121,5,121,9 - $0846,$0846,1,122,5,122,9 - $0847,$0847,1,123,5,123,9 - $0848,$084a,1,126,5,126,7 - $084b,$084d,1,129,5,129,7 - $084e,$084e,1,130,5,130,9 - $084f,$084f,1,131,5,131,9 - $0850,$0850,1,132,5,132,9 - $0851,$0852,1,135,5,135,7 - $0853,$0854,1,137,5,137,7 - $0855,$0856,1,138,5,138,7 - $0857,$0858,1,139,5,139,7 - $0859,$0859,1,143,5,143,7 - - - - - - - - Basic,$0400,SCREEN,1,15,10,15,15 - Basic,$0003,val,1,16,10,16,12 - Code,$080d,__start,1,19,1,19,8 - Code,$0815,printother,1,34,1,34,11 - Code,$0002,i,1,35,12,35,12 - Code,$0819,__b1,1,43,3,43,7 - Code,$0827,incval,1,61,1,61,7 - Code,$082a,printval,1,71,1,71,9 - Code,$0830,ival,1,82,1,82,5 - Code,$0837,pval,1,95,1,95,5 - Code,$083e,main,1,108,1,108,5 - Code,$0004,i,1,109,12,109,12 - Code,$0842,__b1,1,117,3,117,7 - Basic,$080b,upstartEnd,0,43,1,43,11 - - - - - - - - - diff --git a/src/test/target/procedure-callingconvention-stack-far-3.klog b/src/test/target/procedure-callingconvention-stack-far-3.klog deleted file mode 100644 index 351cd59e1..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.klog +++ /dev/null @@ -1,22 +0,0 @@ -Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass -Writing prg file: procedure-callingconvention-stack-far-3.prg - -Memory Map ----------- -Program-segment: - -Basic-segment: - $0801-$080c Basic - -Code-segment: - $080d-$0859 Code - -Data-segment: - -Writing Vice symbol file: procedure-callingconvention-stack-far-3.vs -Writing Symbol file: procedure-callingconvention-stack-far-3.sym diff --git a/src/test/target/procedure-callingconvention-stack-far-3.prg b/src/test/target/procedure-callingconvention-stack-far-3.prg deleted file mode 100644 index fe3b357eefd982f66c8bec64d2852942552d46a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZSN;O5|Bm}g{QX2`(6u#%ybS;3AY0Z20~WBRAT@{DOE+fk+qpA()jCoE;|Wnf8A m$osF(Aqt|jI7C1SS%6G)4iN=W4j{vTL-ZL7Pz%e2mk9uPR2%XD diff --git a/src/test/target/procedure-callingconvention-stack-far-3.sym b/src/test/target/procedure-callingconvention-stack-far-3.sym deleted file mode 100644 index f1267c367..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.sym +++ /dev/null @@ -1,20 +0,0 @@ -.label val=$3 -.label SCREEN=$400 -.label __start=$80d { -} -.label pval=$837 { -} -.label ival=$830 { -} -.label incval=$827 { -} -.label main=$83e { - .label __b1=$842 - .label i=$4 -} -.label printother=$815 { - .label __b1=$819 - .label i=$2 -} -.label printval=$82a { -} diff --git a/src/test/target/procedure-callingconvention-stack-far-3.vs b/src/test/target/procedure-callingconvention-stack-far-3.vs deleted file mode 100644 index 2787fc577..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.vs +++ /dev/null @@ -1,14 +0,0 @@ -al C:3 .val -al C:819 .__b1__0 -al C:842 .__b1__1 -al C:400 .SCREEN -al C:80d .__start -al C:837 .pval -al C:2 .i__0 -al C:4 .i__1 -al C:830 .ival -al C:80b .upstartEnd -al C:827 .incval -al C:83e .main -al C:815 .printother -al C:82a .printval From 9cf5f4cd056a7c4c06e502b8cc3e3d2cf5884733 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 09:00:46 +0200 Subject: [PATCH 25/50] Merge commit 'f2bf3484ad84a75f644a47560f1d2a0dd42c1acd' into jesper_baseline_all_changes (cherry picked from commit 74512e132625e2e4f8f0ae3a80beae043dcc642d) --- .../kc/examples/cx16/banking/cx16-banking.c | 73 ++++++------------- 1 file changed, 23 insertions(+), 50 deletions(-) diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.c b/src/test/kc/examples/cx16/banking/cx16-banking.c index 87d4b224e..113f11c40 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -13,7 +13,7 @@ #pragma link("cx16-banking.ld") #pragma var_model(mem) -// #include +#include #include #include @@ -24,33 +24,31 @@ // Functional code -__address(0x00) char RAM_Bank; - #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. #pragma bank(cx16_ram, 1) // The sequent functions will be banked using call method ram in bank number 1. char add_a(char a) { - printf("add_a(%02x), ", RAM_Bank); + printf("add_a(%02x), ", bank_get_bram()); return a+1; } char add_c(char a) { - printf("add_c(%02x), ", RAM_Bank); + printf("add_c(%02x), ", bank_get_bram()); return add_a(a)+1; // Non banked call in ram bank 1. } char add_d(char a) { - printf("add_d(%02x), ",RAM_Bank); + printf("add_d(%02x), ",bank_get_bram()); return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_e(char a) { - printf("add_e(%02x), ",RAM_Bank); + printf("add_e(%02x), ",bank_get_bram()); return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_f(char a) { - printf("add_f(%02x), ",RAM_Bank); + printf("add_f(%02x), ",bank_get_bram()); return add_m(a)+1; // Non banked call fram ram bank 1 to main memory. } @@ -59,27 +57,27 @@ char add_f(char a) { #pragma bank(cx16_ram, 2) // The sequent functions will be banked using call method ram in bank number 2. char mul_a(char m) { - printf("mul_a(%02x), ",RAM_Bank); + printf("mul_a(%02x), ",bank_get_bram()); return m * 2; } char mul_c(char m) { - printf("mul_c(%02x), ",RAM_Bank); + printf("mul_c(%02x), ",bank_get_bram()); return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1. } char mul_d(char m) { - printf("mul_d(%02x), ",RAM_Bank); + printf("mul_d(%02x), ",bank_get_bram()); return mul_a(m)*2; // Non banked call in ram bank 2. } char mul_e(char a) { - printf("mul_e(%02x), ",RAM_Bank); + printf("mul_e(%02x), ",bank_get_bram()); return mul_b(a)*2; // Non Banked call in ram bank 2. } char mul_f(char m) { - printf("mul_f(%02x), ",RAM_Bank); + printf("mul_f(%02x), ",bank_get_bram()); return add_m(m)*2; // Non banked call fram ram bank 2 to main memory. } @@ -89,14 +87,14 @@ char mul_f(char m) { #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. char __bank(cx16_ram, 1) add_b(char a) { - printf("add_b(%02x), ",RAM_Bank); + printf("add_b(%02x), ",bank_get_bram()); return a+1; } #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram. char __bank(cx16_ram, 2) mul_b(char m) { - printf("mul_b(%02x), ",RAM_Bank); + printf("mul_b(%02x), ",bank_get_bram()); return m*2; } @@ -104,13 +102,13 @@ char __bank(cx16_ram, 2) mul_b(char m) { // Allocated in main memory. char add_m(char a) { - printf("add_m(%02x), ",RAM_Bank); + printf("add_m(%02x), ",bank_get_bram()); return add_e(a)+1; // Banked call to ram in bank 1 fram main memory. } // Allocated in main memory. char mul_m(char m) { - printf("mul_m(%02x), ",RAM_Bank); + printf("mul_m(%02x), ",bank_get_bram()); return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory. } @@ -118,46 +116,21 @@ char mul_m(char m) { // Practically this means that the main() function is placed in main memory ... void load_bank(char bank, char *file) { - RAM_Bank = bank; - - //cbm_k_setnam(file); - char file_len = strlen(file); - asm { - lda file_len - ldx file - jsr $FFBD - } - - //cbm_k_setlfs(1,8,2); - asm { - lda #1 - ldx #8 - ldy #2 - jsr $FFBA - } - - //cbm_k_load((char*)0xA000, 0); - asm { - lda #0 - ldx #<$A000 - ldy #>$A000 - jsr $FFD5 - } - - //cbm_k_close(1); - asm { - lda #1 - jsr $FFC3 - } + bank_set_bram(bank); + cbm_k_setnam(file); + cbm_k_setlfs(1,8,2); + cbm_k_load((char*)0xA000, 0); + cbm_k_close(1); } void main(void) { + clrscr(); + load_bank(1, "BANK1.BIN"); load_bank(2, "BANK2.BIN"); - RAM_Bank = 0; + bank_set_bram(0); asm{.byte $db} printf("result = %u\n", add_a(1)); // Banked call to ram in bank 1 fram main memory. From 8b7beac0c135def7f8c8c68975b98fe2924c8b09 Mon Sep 17 00:00:00 2001 From: Jesper Balman Gravgaard Date: Tue, 11 Apr 2023 07:42:41 +0000 Subject: [PATCH 26/50] ok --- src/main/java/dk/camelot64/kickc/parser/CParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 029c6d5f6..5e3ef8ad1 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -111,7 +111,7 @@ public class CParser { */ public static final String PRAGMA_BANK = "bank"; /** - * #pragma nobank specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + * #pragma nobank Changes the current bank to the default bank. */ public static final String PRAGMA_NOBANK = "nobank"; From e7d717e9158a86bd33bd8c99907190c4a8d51ccc Mon Sep 17 00:00:00 2001 From: Jesper Balman Gravgaard Date: Tue, 11 Apr 2023 08:02:06 +0000 Subject: [PATCH 27/50] Apply 2 suggestion(s) to 2 file(s) --- src/main/java/dk/camelot64/kickc/parser/CParser.java | 2 +- .../camelot64/kickc/passes/Pass0GenerateStatementSequence.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 5e3ef8ad1..84832cf36 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,7 +107,7 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma bank(...) specifies the scope of the sequent functions to be located in a bank using a specific banking area. + * #pragma bank(...) changes the current bank. Functionsand variables will be placed in the specified bank. */ public static final String PRAGMA_BANK = "bank"; /** diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 5d4965219..5db81d773 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -299,7 +299,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Tue, 11 Apr 2023 10:13:41 +0200 Subject: [PATCH 28/50] - processed some of the comments. - documentation fixes. --- .../java/dk/camelot64/kickc/model/Bank.java | 8 +++++ .../dk/camelot64/kickc/model/Directive.java | 11 +++++-- .../dk/camelot64/kickc/model/Program.java | 7 ---- .../kickc/model/symbols/Procedure.java | 13 +++----- .../camelot64/kickc/model/symbols/Scope.java | 2 +- .../Pass0GenerateStatementSequence.java | 33 +++++++++---------- .../kickc/passes/Pass4CodeGeneration.java | 4 +-- 7 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index c51312740..ec111abb3 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -108,6 +108,14 @@ public class Bank { private final String bankArea; // The bank method to apply. private Long bank; // The bank number. + /** + * Creates a new Bank which collects the necessary data to handle banking. + * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. + * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. + * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + * @param bankArea A bank area is a memory range that is banked on a target platform. + * @param bank A bank is a number that defines a bank configuration in a bank area. + */ public Bank(String bankArea, Long bank) { this.bankArea = bankArea; this.bank = bank; diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index fe4728cb7..4b43f7d4b 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -43,11 +43,16 @@ public class Directive { public Inline() { super("inline"); } } - /** Function declared banked. */ + /** + * Creates a new Bank which collects the necessary data to handle banking. + * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. + * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. + * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + */ static public class Bank extends Directive { - private String bankArea; - private Long bank; + private String bankArea; // A bank area is a memory range that is banked on a target platform. + private Long bank; // A bank is a number that defines a bank configuration in a bank area. public Bank(String bankArea, Long bank) { super("bank" ); diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index 000cad6bd..c42debf3d 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -106,7 +106,6 @@ public class Program { /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; /** All #pragma code segments. Collected during parsing. These are used by the bank() pragmas to validate if the code segment exists during compilation.*/ - private final Map pragmaCodeSegs; public Program() { this.outputFileManager = new OutputFileManager(); @@ -119,8 +118,6 @@ public class Program { this.asmResourceFiles = new ArrayList<>(); this.reservedZps = new ArrayList<>(); this.procedureCompilations = new LinkedHashMap<>(); - this.pragmaCodeSegs = new HashMap<>(); // Used to collect all pragma code segments. - } /** @@ -540,8 +537,4 @@ public class Program { sizeInfo.append(getAsm().getSizeInfo()); return sizeInfo.toString(); } - - public Map getPragmaCodeSegs() { - return pragmaCodeSegs; - } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index e3eac7744..a154a2ca0 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -34,7 +34,7 @@ public class Procedure extends Scope { private List comments; /** Reserved zeropage addresses. */ private List reservedZps; - /** The data and code segment to put the procedure into. */ + /** The data and code segment to put the procedure into. When null the procedure is not assigned to the code segment. */ private String segmentCode; /** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */ private final List constructorRefs; @@ -42,7 +42,9 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; - /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines.*/ + /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines. + * When this value is null, the procedure is not allocated to a bank. + */ private Bank bankLocation; @@ -106,7 +108,6 @@ public class Procedure extends Scope { this.interruptType = null; this.comments = new ArrayList<>(); this.segmentCode = segmentCode; - this.segmentData = segmentData; // The parameter dataSegment was foreseen, but never implemented. this.callingConvention = callingConvention; this.constructorRefs = new ArrayList<>(); this.isConstructor = false; @@ -136,10 +137,6 @@ public class Procedure extends Scope { this.segmentCode = segmentCode; } - public void setCodeSegment(String codeSegment) { - this.segmentCode = segmentCode; - } - public List getParameterNames() { return parameterNames; } @@ -300,7 +297,7 @@ public class Procedure extends Scope { res.append("__intrinsic "); } if(isDeclaredBanked()) { - res.append("__bank(").append("bank").append(") "); + res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBank()).append(") "); } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index b950128f7..0ef0c0345 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -26,7 +26,7 @@ public abstract class Scope implements Symbol { private int blockCount = 1; private Scope parentScope; private String fullName; - protected String segmentData; + private String segmentData; public Scope(String name, Scope parentScope, String segmentData) { this.name = name; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 5d4965219..e9d6cadec 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -289,11 +289,10 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor effectiveDirectives = varDecl.getDeclDirectives(); final List declComments = varDecl.getDeclComments(); varDecl.exitVar(); - VariableBuilder varBuilder = new VariableBuilder(varName, getCurrentScope(), false, false, effectiveType, effectiveDirectives, currentDataSegment, program.getTargetPlatform().getVariableBuilderConfig()); + VariableBuilder varBuilder = new VariableBuilder(varName, getCurrentScope(), false, false, effectiveType, effectiveDirectives, currentSegmentData, program.getTargetPlatform().getVariableBuilderConfig()); Variable variable = varBuilder.build(); if(isStructMember && (initializer != null)) throw new CompileError("Initializer not supported inside structs " + effectiveType.toCDecl(), declSource); @@ -1180,7 +1179,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parameters = procedure.getParameters(); @@ -590,7 +590,7 @@ public class Pass4CodeGeneration { Variable master = variable.getPhiMaster(); if (master != null) { if (parameters.contains(master) || master.getLocalName().equals("return")) { - variable.setDataSegment("Data"); + variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); } } } From acbf8f073fdbd292a91e81100c5c0e3cac2983d2 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 10:41:10 +0200 Subject: [PATCH 29/50] - Updated test case references. --- .../ref/call-banked-phi-case-2-close-0.cfg | 2 +- .../ref/call-banked-phi-case-2-close-0.log | 10 +++++----- .../ref/call-banked-phi-case-2-close-0.sym | 2 +- .../ref/call-banked-phi-case-2-close-1.cfg | 2 +- .../ref/call-banked-phi-case-2-close-1.log | 10 +++++----- .../ref/call-banked-phi-case-2-close-1.sym | 2 +- .../ref/call-banked-phi-case-3-near-0.cfg | 2 +- .../ref/call-banked-phi-case-3-near-0.log | 10 +++++----- .../ref/call-banked-phi-case-3-near-0.sym | 2 +- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 10 +++++----- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- .../ref/call-banked-phi-case-4-near-0.cfg | 4 ++-- .../ref/call-banked-phi-case-4-near-0.log | 20 +++++++++---------- .../ref/call-banked-phi-case-4-near-0.sym | 4 ++-- .../ref/call-banked-phi-case-4-near-1.cfg | 4 ++-- .../ref/call-banked-phi-case-4-near-1.log | 20 +++++++++---------- .../ref/call-banked-phi-case-4-near-1.sym | 4 ++-- src/test/ref/call-banked-phi-case-5-far-0.cfg | 4 ++-- src/test/ref/call-banked-phi-case-5-far-0.log | 20 +++++++++---------- src/test/ref/call-banked-phi-case-5-far-0.sym | 4 ++-- src/test/ref/call-banked-phi-case-5-far-1.cfg | 4 ++-- src/test/ref/call-banked-phi-case-5-far-1.log | 20 +++++++++---------- src/test/ref/call-banked-phi-case-5-far-1.sym | 4 ++-- .../ref/call-banked-phi-case-6-close-0.cfg | 4 ++-- .../ref/call-banked-phi-case-6-close-0.log | 20 +++++++++---------- .../ref/call-banked-phi-case-6-close-0.sym | 4 ++-- .../ref/call-banked-phi-case-6-close-1.cfg | 4 ++-- .../ref/call-banked-phi-case-6-close-1.log | 20 +++++++++---------- .../ref/call-banked-phi-case-6-close-1.sym | 4 ++-- 30 files changed, 112 insertions(+), 112 deletions(-) diff --git a/src/test/ref/call-banked-phi-case-2-close-0.cfg b/src/test/ref/call-banked-phi-case-2-close-0.cfg index 1701ea88d..47114a8a3 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 3f5fa068e..578d2ed25 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -46,7 +46,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -125,7 +125,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return @@ -136,7 +136,7 @@ plus::@return: scope:[plus] from plus VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -229,7 +229,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-2-close-0.sym b/src/test/ref/call-banked-phi-case-2-close-0.sym index c79872a57..45d8d7108 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.sym +++ b/src/test/ref/call-banked-phi-case-2-close-0.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-2-close-1.cfg b/src/test/ref/call-banked-phi-case-2-close-1.cfg index 1701ea88d..47114a8a3 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 60a66095a..2fa89f425 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -46,7 +46,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -125,7 +125,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return @@ -136,7 +136,7 @@ plus::@return: scope:[plus] from plus VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -229,7 +229,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-2-close-1.sym b/src/test/ref/call-banked-phi-case-2-close-1.sym index c79872a57..45d8d7108 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.sym +++ b/src/test/ref/call-banked-phi-case-2-close-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-0.cfg b/src/test/ref/call-banked-phi-case-3-near-0.cfg index abba7b99a..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 5b3a50214..c0e438f84 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -203,7 +203,7 @@ char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -320,7 +320,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-0.sym b/src/test/ref/call-banked-phi-case-3-near-0.sym index f7f6861a8..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.sym +++ b/src/test/ref/call-banked-phi-case-3-near-0.sym @@ -5,7 +5,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index abba7b99a..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 990511052..e7e2f38ca 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -203,7 +203,7 @@ char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -320,7 +320,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index f7f6861a8..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -5,7 +5,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-0.cfg b/src/test/ref/call-banked-phi-case-4-near-0.cfg index cfd75e701..3a2aea220 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 25e2d2255..5c2bba535 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -314,12 +314,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-0.sym b/src/test/ref/call-banked-phi-case-4-near-0.sym index aaff351f9..09b563343 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.sym +++ b/src/test/ref/call-banked-phi-case-4-near-0.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-1.cfg b/src/test/ref/call-banked-phi-case-4-near-1.cfg index cfd75e701..3a2aea220 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 54b44c7af..36912a129 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -314,12 +314,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-1.sym b/src/test/ref/call-banked-phi-case-4-near-1.sym index aaff351f9..09b563343 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.sym +++ b/src/test/ref/call-banked-phi-case-4-near-1.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-0.cfg b/src/test/ref/call-banked-phi-case-5-far-0.cfg index cfd75e701..1bdaac9fb 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index a98cea7ee..e0d2540ab 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -318,12 +318,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-0.sym b/src/test/ref/call-banked-phi-case-5-far-0.sym index aaff351f9..7c061e559 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.sym +++ b/src/test/ref/call-banked-phi-case-5-far-0.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-1.cfg b/src/test/ref/call-banked-phi-case-5-far-1.cfg index cfd75e701..1bdaac9fb 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 360fff834..af55b2c68 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -318,12 +318,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-1.sym b/src/test/ref/call-banked-phi-case-5-far-1.sym index aaff351f9..7c061e559 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.sym +++ b/src/test/ref/call-banked-phi-case-5-far-1.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-0.cfg b/src/test/ref/call-banked-phi-case-6-close-0.cfg index cfd75e701..62e999ce1 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index fce99e78f..989ffb846 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -321,12 +321,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-0.sym b/src/test/ref/call-banked-phi-case-6-close-0.sym index aaff351f9..ada067df8 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.sym +++ b/src/test/ref/call-banked-phi-case-6-close-0.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-1.cfg b/src/test/ref/call-banked-phi-case-6-close-1.cfg index cfd75e701..62e999ce1 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 37e02e3ea..e84a846b0 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -321,12 +321,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-1.sym b/src/test/ref/call-banked-phi-case-6-close-1.sym index aaff351f9..ada067df8 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.sym +++ b/src/test/ref/call-banked-phi-case-6-close-1.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b From 477499b97b251d37eabb61ba9e4c9c80b1360d44 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 13:41:14 +0200 Subject: [PATCH 30/50] - Fixed #pragma nobank parameter issue. - Optimized logic for #pragma bank. - Updated test cases and references. - Made #pragma NAME parameters optional. - Retested all test cases. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 4 +- .../Pass0GenerateStatementSequence.java | 13 ++-- src/test/kc/call-banked-phi-case-1-near-0.c | 27 +++++++- src/test/kc/call-banked-phi-case-1-near-1.c | 27 +++++++- src/test/kc/call-banked-phi-case-2-close-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-2-close-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-3-near-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-3-near-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-4-near-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-4-near-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-5-far-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-5-far-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-6-close-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-6-close-1.c | 30 ++++++++- .../kc/call-banked-stack-case-2-close-0.c | 29 +++++++- src/test/kc/call-banked-stack-case-5-far-0.c | 29 +++++++- .../kc/examples/cx16/banking/cx16-banking.c | 2 +- .../ref/call-banked-phi-case-1-near-0.asm | 27 +++++++- .../ref/call-banked-phi-case-1-near-0.log | 54 ++++++++++++++- .../ref/call-banked-phi-case-1-near-1.asm | 27 +++++++- .../ref/call-banked-phi-case-1-near-1.log | 54 ++++++++++++++- .../ref/call-banked-phi-case-2-close-0.asm | 28 +++++++- .../ref/call-banked-phi-case-2-close-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-2-close-1.asm | 28 +++++++- .../ref/call-banked-phi-case-2-close-1.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-3-near-0.asm | 28 +++++++- .../ref/call-banked-phi-case-3-near-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-3-near-1.asm | 28 +++++++- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 66 +++++++++++++++++-- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- .../ref/call-banked-phi-case-4-near-0.asm | 28 +++++++- .../ref/call-banked-phi-case-4-near-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-4-near-1.asm | 28 +++++++- .../ref/call-banked-phi-case-4-near-1.log | 56 +++++++++++++++- src/test/ref/call-banked-phi-case-5-far-0.asm | 28 +++++++- src/test/ref/call-banked-phi-case-5-far-0.log | 56 +++++++++++++++- src/test/ref/call-banked-phi-case-5-far-1.asm | 28 +++++++- src/test/ref/call-banked-phi-case-5-far-1.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-6-close-0.asm | 28 +++++++- .../ref/call-banked-phi-case-6-close-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-6-close-1.asm | 28 +++++++- .../ref/call-banked-phi-case-6-close-1.log | 56 +++++++++++++++- 43 files changed, 1363 insertions(+), 74 deletions(-) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 50b509cdf..0bfba0d7d 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -137,7 +137,7 @@ parameterDecl pragma : PRAGMA NAME - | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END + | PRAGMA NAME (PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END)? ; pragmaParam @@ -162,7 +162,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline - | BANK PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveBank + | BANK PAR_BEGIN NAME COMMA NUMBER PAR_END #directiveBank | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index d0d81fcd1..d9c69061c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -296,20 +296,15 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Tue, 11 Apr 2023 14:44:35 +0200 Subject: [PATCH 31/50] - Removed unnecessary tests and logic for bank directive parsing. - Retested all test cases. --- .../kickc/passes/Pass0GenerateStatementSequence.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index d9c69061c..4a3dcaf4b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1257,17 +1257,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor= 5) { - bankArea = ctx.getChild(2).getText(); - bank = Long.valueOf(ctx.getChild(4).getText()); - } + String bankArea = ctx.getChild(2).getText(); + Long bank = Long.valueOf(ctx.getChild(4).getText()); return new Directive.Bank(bankArea, bank); } From 82a6c56e0a6ab9eaa09b4ff3ae9b0b186434d86f Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 21:48:26 +0200 Subject: [PATCH 32/50] - Resolved issue of nobank without parameters. Now it works ... The CPreprocessor adds () and the KickCParser.g4 demands brackets as part of the syntax. But you can write without in the code. - Retested all test cases. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 4 +- .../Pass0GenerateStatementSequence.java | 29 ++++++-- .../kickc/preprocessor/CPreprocessor.java | 8 +++ src/test/kc/call-banked-phi-case-3-near-1.c | 8 +-- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 68 +++++++++---------- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- 7 files changed, 75 insertions(+), 46 deletions(-) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 0bfba0d7d..178005132 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,8 +136,8 @@ parameterDecl ; pragma - : PRAGMA NAME - | PRAGMA NAME (PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END)? + : PRAGMA NAME PAR_BEGIN PAR_END #pragmaNoParameters + | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END #pragmaParameters ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 4a3dcaf4b..504dc117c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -42,7 +42,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ - private final List pragmaConstructorFors; + private final List pragmaConstructorFors; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -148,7 +148,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor constructorProcs = new ArrayList<>(); - for(KickCParser.PragmaContext pragmaConstructorFor : pragmaConstructorFors) { + for(KickCParser.PragmaParametersContext pragmaConstructorFor : pragmaConstructorFors) { final List names = pragmaConstructorFor.pragmaParam(); if(names.size() < 2) throw new CompileError("#pragma constructor_for requires at least 2 parameters.", new StatementSource(pragmaConstructorFor)); @@ -237,8 +237,29 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parenthesizedBody = new ArrayList<>(); + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); + pragmaBody = parenthesizedBody; + pragmaTokens.addAll(pragmaBody); + // Pass on the #pragma to the parser - and mark it as already handled + cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); } parserPragmas.add(inputToken); return true; diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c index 2743d4b5c..feb43dbda 100644 --- a/src/test/kc/call-banked-phi-case-3-near-1.c +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -30,10 +30,6 @@ char* const SCREEN = (char*)0x0400; -#pragma code_seg(Code) -void main(void) { - SCREEN[0] = plus('0', 7); // close call -} #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) @@ -47,4 +43,8 @@ char min(char a, char b) { return a+b; } +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 3a2aea220..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index fde569cc1..3ed463fde 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -2,22 +2,6 @@ Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#0 = plus::return#2 - to:main::@1 -main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - __bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) @@ -30,15 +14,15 @@ plus: scope:[plus] from main plus::@1: scope:[plus] from plus min::return#3 = phi( plus/min::return#0 ) plus::$0 = min::return#3 - plus::return#1 = plus::$0 + plus::return#0 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#3 = phi( plus::@1/plus::return#0 ) + plus::return#1 = plus::return#3 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -51,6 +35,22 @@ min::@return: scope:[min] from min return to:@return +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#2 = plus::return#1 + to:main::@1 +main::@1: scope:[main] from main + plus::return#4 = phi( main/plus::return#2 ) + main::$0 = plus::return#4 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + void __start() __start: scope:[__start] from call main @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -107,10 +107,10 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#2 = plus::return#4 Successful SSA optimization Pass2AliasElimination Identical Phi Values plus::a#1 plus::a#0 Identical Phi Values plus::b#1 plus::b#0 @@ -123,31 +123,31 @@ Successful SSA optimization Pass2ConstantIdentification Constant min::a#0 = plus::a#0 Constant min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [15] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused procedure __start Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Constant right-side identified [4] min::return#1 = min::a#0 + min::b#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant min::return#1 = min::a#0+min::b#0 Successful SSA optimization Pass2ConstantIdentification Constant min::return#0 = min::return#1 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 +Constant plus::return#0 = min::return#0 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 +Constant plus::return#2 = plus::return#0 Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 +Constant main::$0 = plus::return#2 Successful SSA optimization Pass2ConstantIdentification Inlining constant with different constant siblings min::return#0 Constant inlined plus::return#0 = min::return#1 Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 Constant inlined min::a#0 = plus::a#0 Constant inlined min::return#0 = min::return#1 +Constant inlined plus::return#2 = min::return#1 Constant inlined min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,7 +199,7 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return @@ -215,14 +215,14 @@ Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES -Uplift Scope [main] Uplift Scope [plus] Uplift Scope [min] +Uplift Scope [main] Uplift Scope [] -Uplifting [main] best 90 combination Uplifting [plus] best 90 combination Uplifting [min] best 90 combination +Uplifting [main] best 90 combination Uplifting [] best 90 combination ASSEMBLER BEFORE OPTIMIZATION @@ -341,7 +341,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 09b563343..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return From 02d9eaf0817ee6286dca94128742cfe969eac90c Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 12 Apr 2023 06:57:25 +0200 Subject: [PATCH 33/50] - Added banking signature to procedures in the comments of the assembler output file. - Update test cases and reference data. - Cleaned old test cases for stack calls. --- .../java/dk/camelot64/kickc/model/Bank.java | 9 ++- .../kickc/passes/Pass4CodeGeneration.java | 10 +++- ...procedure-callingconvention-stack-bank-0.c | 16 ----- ...procedure-callingconvention-stack-bank-1.c | 18 ------ ...procedure-callingconvention-stack-bank-2.c | 24 -------- ...procedure-callingconvention-stack-bank-3.c | 59 ------------------- ...procedure-callingconvention-stack-bank-4.c | 39 ------------ ...procedure-callingconvention-stack-bank-5.c | 22 ------- .../procedure-callingconvention-stack-bank.ld | 6 -- .../ref/call-banked-phi-case-2-close-0.asm | 1 + .../ref/call-banked-phi-case-2-close-0.log | 2 + .../ref/call-banked-phi-case-2-close-1.asm | 1 + .../ref/call-banked-phi-case-2-close-1.log | 2 + .../ref/call-banked-phi-case-3-near-0.asm | 1 + .../ref/call-banked-phi-case-3-near-0.log | 2 + .../ref/call-banked-phi-case-3-near-1.asm | 1 + .../ref/call-banked-phi-case-3-near-1.log | 2 + .../ref/call-banked-phi-case-4-near-0.asm | 2 + .../ref/call-banked-phi-case-4-near-0.log | 4 ++ .../ref/call-banked-phi-case-4-near-1.asm | 2 + .../ref/call-banked-phi-case-4-near-1.log | 4 ++ src/test/ref/call-banked-phi-case-5-far-0.asm | 2 + src/test/ref/call-banked-phi-case-5-far-0.log | 4 ++ src/test/ref/call-banked-phi-case-5-far-1.asm | 2 + src/test/ref/call-banked-phi-case-5-far-1.log | 4 ++ .../ref/call-banked-phi-case-6-close-0.asm | 2 + .../ref/call-banked-phi-case-6-close-0.log | 4 ++ .../ref/call-banked-phi-case-6-close-1.asm | 2 + .../ref/call-banked-phi-case-6-close-1.log | 4 ++ 29 files changed, 65 insertions(+), 186 deletions(-) delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-0.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-1.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-2.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-3.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-4.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-5.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank.ld diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index ec111abb3..b080bc0e4 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -103,7 +103,7 @@ package dk.camelot64.kickc.model; * The KickC compiler contains several test cases and examples which demonstrate the usage of the banking system. * */ -public class Bank { +public class Bank extends Object { private final String bankArea; // The bank method to apply. private Long bank; // The bank number. @@ -132,4 +132,11 @@ public class Bank { public void setBank(Long bank) { this.bank = bank; } + + @Override + public String toString() { + return "banked : " + + "bank area='" + bankArea + '\'' + + ", bank=" + bank; + } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index b3877765d..177d137b9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -219,7 +219,8 @@ public class Pass4CodeGeneration { } /** - * Generate a comment that describes the procedure signature and parameter transfer + * Generate a comment that describes the procedure signature and parameter transfer. + * We have added here also the banking information. * * @param asm The assembler program being generated * @param procedure The procedure @@ -240,6 +241,13 @@ public class Pass4CodeGeneration { if (i > 0) { asm.addComment(signature.toString(), false); } + // Banking information of the procedure. + Bank bank = procedure.getBankLocation(); + if(bank != null) { + StringBuilder signatureBank = new StringBuilder(); + signatureBank.append(" " + bank.toString()); // This procedure is in a bank and in a banking area. + asm.addComment(signatureBank.toString(), false); + } } /** diff --git a/src/test/kc/procedure-callingconvention-stack-bank-0.c b/src/test/kc/procedure-callingconvention-stack-bank-0.c deleted file mode 100644 index d0394b9d1..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-0.c +++ /dev/null @@ -1,16 +0,0 @@ -// Test a procedure with calling convention stack - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -char __bank(ram, 2) __stackcall plus(char a, char b) { - return a+b; -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-1.c b/src/test/kc/procedure-callingconvention-stack-bank-1.c deleted file mode 100644 index c1ac83207..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-1.c +++ /dev/null @@ -1,18 +0,0 @@ -// Test a procedure with calling convention stack - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma calling(__stackcall) -#pragma code_seg(stage) - -char __bank(ram,20) plus(char a, char b) { - return a+b; -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-2.c b/src/test/kc/procedure-callingconvention-stack-bank-2.c deleted file mode 100644 index cba3de4b9..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-2.c +++ /dev/null @@ -1,24 +0,0 @@ -// Test a procedure with calling convention stack -// A slightly more complex call - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -char i = 0; - -void main(void) { - for(char a:0..1) { - char v = a+1; - char w = plus('0', v); - SCREEN[i] = w+a; - } -} - -// this should give a pragma error during compile, as test is not declared yet. -char __bank(ram, 20) __stackcall plus(char a, char b) { - i++; - return a+b; -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c deleted file mode 100644 index 97313f42e..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-3.c +++ /dev/null @@ -1,59 +0,0 @@ -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - -#pragma calling(__stackcall) - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -char val = 0; - -void main(void) { - for(char i:0..5) { - pval(); - printother(); - ival(); - } -} - -#pragma code_seg(stage) - -void __bank(ram, 20) pval() { - printval(); -} - -#pragma code_seg(platform) - -void __bank(ram, 21) ival() { - incval(); -} - -#pragma code_seg(stage) - -void __bank(ram, 20) printval() { - SCREEN[0] = val; -} - - -#pragma code_seg(platform) - -void __bank(ram, 21) incval() { - val++; -} - -#pragma nobank -#pragma code_seg(Code) - -void printother() { - for(char i:0..5) { - (SCREEN+40)[i]++; - } -} - - - - - diff --git a/src/test/kc/procedure-callingconvention-stack-bank-4.c b/src/test/kc/procedure-callingconvention-stack-bank-4.c deleted file mode 100644 index bb3ebc6e8..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-4.c +++ /dev/null @@ -1,39 +0,0 @@ -// Test a procedure with calling convention stack -// Returning and passing struct values - -#pragma calling(__stackcall) -#pragma struct_model(classic) - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; -char idx = 0; - -struct Point { - char x; - char y; -}; - -void main(void) { - for(char i=0;i<5;i++) { - struct Point p = get(i); - print(p); - } -} - -struct Point __bank(ram,1) get(char i) { - struct Point p = { i, i/2 }; - return p; -} - -void __bank(ram,2) print(struct Point p) { - SCREEN[idx++] = p.x; - SCREEN[idx++] = p.y; -} - - - - - diff --git a/src/test/kc/procedure-callingconvention-stack-bank-5.c b/src/test/kc/procedure-callingconvention-stack-bank-5.c deleted file mode 100644 index ce0701c6f..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-5.c +++ /dev/null @@ -1,22 +0,0 @@ -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma platform(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - *SCREEN = pow2(6); -} - -char __stackcall __bank(ram,1) pow2(char n) { - if (n == 0) - return 1; - else { - char c = pow2(n-1); - return c+c; - } - -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank.ld b/src/test/kc/procedure-callingconvention-stack-bank.ld deleted file mode 100644 index 3e9cecaee..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank.ld +++ /dev/null @@ -1,6 +0,0 @@ -.segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=%P] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index 345d208bb..349ff29d6 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index e58f419ff..3ea76d170 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -229,6 +229,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 @@ -338,6 +339,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index e59df026e..be3c04747 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 0e29a8ff2..0413d3865 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -229,6 +229,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 @@ -338,6 +339,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index e7e644763..599c148cd 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 7720bf87c..cdc88a695 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -428,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index f4440cd98..7f5a14078 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 3ed463fde..834f647f1 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -428,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index 3972e6016..e43e78962 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -66,6 +67,7 @@ plus: { rts } // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 62c366a98..204e49501 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -313,6 +314,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -427,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -441,6 +444,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index 2f6e45907..e51f01278 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -66,6 +67,7 @@ plus: { rts } // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 38ccd800f..98d448864 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -313,6 +314,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -427,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -441,6 +444,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index a1d1eaba5..df153f403 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -70,6 +71,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index 5e7710384..01cc81e12 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -317,6 +318,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b jmp __breturn @@ -431,6 +433,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -449,6 +452,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index 8b9f8b367..a45533f07 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -70,6 +71,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 63e6a0ff3..843a67794 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -317,6 +318,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b jmp __breturn @@ -431,6 +433,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -449,6 +452,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index 503c5ad0f..006ba06a2 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -72,6 +73,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index e6a9fd619..50c042ba4 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -299,6 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -320,6 +321,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -434,6 +436,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -454,6 +457,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index 99c634672..b893a61f0 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -72,6 +73,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 4de0578ce..38195d985 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -299,6 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -320,6 +321,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -434,6 +436,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -454,6 +457,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b // min::@return From 3916ee341328711461d65af2d0feef808a5fb7fa Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 12 Apr 2023 07:35:45 +0200 Subject: [PATCH 34/50] - Fixed a silly mistake where the banked close call fragment sequence was wrong. I first need to read the current bank, store it in the stack, then change the current bank. After jsr return, pop the old bank from the stack and store it. --- .../call_phi_close_cx16_ram.asm | 3 ++- .../call_phi_close_cx16_rom.asm | 3 ++- .../ref/call-banked-phi-case-2-close-0.asm | 3 ++- .../ref/call-banked-phi-case-2-close-0.log | 14 +++++++----- .../ref/call-banked-phi-case-2-close-1.asm | 3 ++- .../ref/call-banked-phi-case-2-close-1.log | 14 +++++++----- .../ref/call-banked-phi-case-3-near-0.asm | 3 ++- .../ref/call-banked-phi-case-3-near-0.log | 16 ++++++++------ .../ref/call-banked-phi-case-3-near-1.asm | 3 ++- .../ref/call-banked-phi-case-3-near-1.log | 16 ++++++++------ .../ref/call-banked-phi-case-4-near-0.asm | 3 ++- .../ref/call-banked-phi-case-4-near-0.log | 16 ++++++++------ .../ref/call-banked-phi-case-4-near-1.asm | 3 ++- .../ref/call-banked-phi-case-4-near-1.log | 16 ++++++++------ src/test/ref/call-banked-phi-case-5-far-0.asm | 3 ++- src/test/ref/call-banked-phi-case-5-far-0.log | 16 ++++++++------ src/test/ref/call-banked-phi-case-5-far-1.asm | 3 ++- src/test/ref/call-banked-phi-case-5-far-1.log | 16 ++++++++------ .../ref/call-banked-phi-case-6-close-0.asm | 6 +++-- .../ref/call-banked-phi-case-6-close-0.log | 22 +++++++++++-------- .../ref/call-banked-phi-case-6-close-1.asm | 6 +++-- .../ref/call-banked-phi-case-6-close-1.log | 22 +++++++++++-------- 22 files changed, 124 insertions(+), 86 deletions(-) diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm index 38d40a072..40053e0b4 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -1,6 +1,7 @@ +lda $0 +pha lda #{c1} sta $0 -pha jsr {la1} pla sta $0 diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm index e19cf8ab7..29641e03d 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -1,6 +1,7 @@ +lda $1 +pha lda #{c1} sta $1 -pha jsr {la1} pla sta $1 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index 349ff29d6..f867223cc 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 3ea76d170..8d78e1673 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -152,9 +152,9 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 75 combination -Uplifting [plus] best 75 combination -Uplifting [] best 75 combination +Uplifting [main] best 78 combination +Uplifting [plus] best 78 combination +Uplifting [] best 78 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -208,9 +208,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -267,7 +268,7 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 39 +Score: 42 // File Comments /** @@ -320,9 +321,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index be3c04747..3074c08e3 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 0413d3865..3ac501458 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -152,9 +152,9 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 75 combination -Uplifting [plus] best 75 combination -Uplifting [] best 75 combination +Uplifting [main] best 78 combination +Uplifting [plus] best 78 combination +Uplifting [] best 78 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -208,9 +208,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -267,7 +268,7 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 39 +Score: 42 // File Comments /** @@ -320,9 +321,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index 599c148cd..135a22afc 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index cdc88a695..e5e80a97d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index 7f5a14078..f3e8aa08d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 834f647f1..60b08c7d8 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -220,10 +220,10 @@ Uplift Scope [min] Uplift Scope [main] Uplift Scope [] -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [main] best 90 combination -Uplifting [] best 90 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [main] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index e43e78962..9eda4af17 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 204e49501..8fff4dd12 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index e51f01278..7a009fb12 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 98d448864..355d2d82c 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index df153f403..f492f49fe 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index 01cc81e12..c7fde5e3d 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -361,7 +362,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -414,9 +415,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index a45533f07..002273c5d 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 843a67794..d8beab3fb 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -361,7 +362,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -414,9 +415,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index 006ba06a2..bed31d08c 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -62,9 +63,10 @@ plus: { .label a = '0' .label b = 7 // min(a, b) + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index 50c042ba4..8dd9b182a 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -221,10 +221,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 105 combination -Uplifting [plus] best 105 combination -Uplifting [min] best 105 combination -Uplifting [] best 105 combination +Uplifting [main] best 111 combination +Uplifting [plus] best 111 combination +Uplifting [min] best 111 combination +Uplifting [] best 111 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -278,9 +278,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -306,9 +307,10 @@ plus: { // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 @@ -364,7 +366,7 @@ char plus::return FINAL ASSEMBLER -Score: 66 +Score: 72 // File Comments /** @@ -417,9 +419,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -443,9 +446,10 @@ plus: { // min(a, b) // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index b893a61f0..b924a7a81 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -62,9 +63,10 @@ plus: { .label a = '0' .label b = 7 // min(a, b) + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 38195d985..4228f15f1 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -221,10 +221,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 105 combination -Uplifting [plus] best 105 combination -Uplifting [min] best 105 combination -Uplifting [] best 105 combination +Uplifting [main] best 111 combination +Uplifting [plus] best 111 combination +Uplifting [min] best 111 combination +Uplifting [] best 111 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -278,9 +278,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -306,9 +307,10 @@ plus: { // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 @@ -364,7 +366,7 @@ char plus::return FINAL ASSEMBLER -Score: 66 +Score: 72 // File Comments /** @@ -417,9 +419,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -443,9 +446,10 @@ plus: { // min(a, b) // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 From 70012690ddbf1842a4a4241565025db2cdee602c Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Thu, 13 Apr 2023 13:07:30 +0200 Subject: [PATCH 35/50] Revert "- Resolved issue of nobank without parameters. Now it works ... The CPreprocessor adds () and the KickCParser.g4 demands brackets as part of the syntax. But you can write without in the code. - Retested all test cases." This reverts commit 82a6c56e --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 4 +- .../Pass0GenerateStatementSequence.java | 29 +------ .../kickc/preprocessor/CPreprocessor.java | 8 -- src/test/kc/call-banked-phi-case-3-near-1.c | 8 +- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 84 +++++++++---------- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- 7 files changed, 52 insertions(+), 85 deletions(-) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 178005132..0bfba0d7d 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,8 +136,8 @@ parameterDecl ; pragma - : PRAGMA NAME PAR_BEGIN PAR_END #pragmaNoParameters - | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END #pragmaParameters + : PRAGMA NAME + | PRAGMA NAME (PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END)? ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 504dc117c..4a3dcaf4b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -42,7 +42,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ - private final List pragmaConstructorFors; + private final List pragmaConstructorFors; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -148,7 +148,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor constructorProcs = new ArrayList<>(); - for(KickCParser.PragmaParametersContext pragmaConstructorFor : pragmaConstructorFors) { + for(KickCParser.PragmaContext pragmaConstructorFor : pragmaConstructorFors) { final List names = pragmaConstructorFor.pragmaParam(); if(names.size() < 2) throw new CompileError("#pragma constructor_for requires at least 2 parameters.", new StatementSource(pragmaConstructorFor)); @@ -237,29 +237,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parenthesizedBody = new ArrayList<>(); - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); - pragmaBody = parenthesizedBody; - pragmaTokens.addAll(pragmaBody); - // Pass on the #pragma to the parser - and mark it as already handled - cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); } parserPragmas.add(inputToken); return true; diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c index feb43dbda..2743d4b5c 100644 --- a/src/test/kc/call-banked-phi-case-3-near-1.c +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -30,6 +30,10 @@ char* const SCREEN = (char*)0x0400; +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) @@ -43,8 +47,4 @@ char min(char a, char b) { return a+b; } -#pragma code_seg(Code) -void main(void) { - SCREEN[0] = plus('0', 7); // close call -} diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 4a0b60f9d..3a2aea220 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 60b08c7d8..fde569cc1 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -2,6 +2,22 @@ Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + __bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) @@ -14,15 +30,15 @@ plus: scope:[plus] from main plus::@1: scope:[plus] from plus min::return#3 = phi( plus/min::return#0 ) plus::$0 = min::return#3 - plus::return#0 = plus::$0 + plus::return#1 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#3 = phi( plus::@1/plus::return#0 ) - plus::return#1 = plus::return#3 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 return to:@return -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -35,22 +51,6 @@ min::@return: scope:[min] from min return to:@return -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#2 = plus::return#1 - to:main::@1 -main::@1: scope:[main] from main - plus::return#4 = phi( main/plus::return#2 ) - main::$0 = plus::return#4 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - void __start() __start: scope:[__start] from call main @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -107,10 +107,10 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 Alias min::return#0 = min::return#3 -Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 Alias min::return#1 = min::$0 min::return#4 min::return#2 -Alias plus::return#2 = plus::return#4 Successful SSA optimization Pass2AliasElimination Identical Phi Values plus::a#1 plus::a#0 Identical Phi Values plus::b#1 plus::b#0 @@ -123,31 +123,31 @@ Successful SSA optimization Pass2ConstantIdentification Constant min::a#0 = plus::a#0 Constant min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [15] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused procedure __start Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [4] min::return#1 = min::a#0 + min::b#0 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant min::return#1 = min::a#0+min::b#0 Successful SSA optimization Pass2ConstantIdentification Constant min::return#0 = min::return#1 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = min::return#0 +Constant plus::return#1 = min::return#0 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#2 = plus::return#0 +Constant plus::return#0 = plus::return#1 Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#2 +Constant main::$0 = plus::return#0 Successful SSA optimization Pass2ConstantIdentification Inlining constant with different constant siblings min::return#0 Constant inlined plus::return#0 = min::return#1 Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 Constant inlined min::a#0 = plus::a#0 Constant inlined min::return#0 = min::return#1 -Constant inlined plus::return#2 = min::return#1 Constant inlined min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,7 +199,7 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return @@ -215,15 +215,15 @@ Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [main] Uplift Scope [plus] Uplift Scope [min] -Uplift Scope [main] Uplift Scope [] -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [main] best 93 combination -Uplifting [] best 93 combination +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,10 +277,9 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: - lda.z 0 - pha lda #1 sta.z 0 + pha jsr plus pla sta.z 0 @@ -299,7 +298,6 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -343,7 +341,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return @@ -358,7 +356,7 @@ char plus::return FINAL ASSEMBLER -Score: 54 +Score: 51 // File Comments /** @@ -411,10 +409,9 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram - lda.z 0 - pha lda #1 sta.z 0 + pha jsr plus pla sta.z 0 @@ -431,7 +428,6 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 9e4219f22..09b563343 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return From 663a439c34f8fe5c31a2f5f38abffa7de41d5190 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Fri, 14 Apr 2023 08:00:31 +0200 Subject: [PATCH 36/50] - Updated test cases --- .../ref/call-banked-phi-case-3-near-1.asm | 1 + .../ref/call-banked-phi-case-3-near-1.log | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index f3e8aa08d..39b32a2d9 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -69,6 +69,7 @@ plus: { } .segment Code // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index fde569cc1..ee40560bd 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -298,6 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -314,6 +316,7 @@ plus: { .segment Code // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -356,7 +359,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -409,9 +412,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -428,6 +432,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -443,6 +448,7 @@ plus: { .segment Code // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return From 23903b34c64f951bb4af84570b3d0bac831fd37b Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 18 Apr 2023 08:02:39 +0200 Subject: [PATCH 37/50] - Removed TODO --- .../dk/camelot64/kickc/passes/Pass4CodeGeneration.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 177d137b9..ccea75395 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -961,14 +961,6 @@ public class Pass4CodeGeneration { } } } else if (statement instanceof StatementCallExecute) { - // TODO: This part seems never to be executed! Old code? -// StatementCallExecute call = (StatementCallExecute) statement; -// RValue procedureRVal = call.getProcedureRVal(); -// // Generate ASM for a call -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); -// if (!(procedureRVal instanceof ProcedureRef)) { -// asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); -// } StatementCallExecute call = (StatementCallExecute) statement; ProcedureRef procedureRef = call.getProcedure(); if(procedureRef != null) { From 3735b248c3b97f6cfd8f17bc98721bc686d50825 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 18 Apr 2023 08:36:22 +0200 Subject: [PATCH 38/50] - Objects.equals(bankLocation, procedure.bankLocation) --- src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index a154a2ca0..40512af6b 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -337,7 +337,7 @@ public class Procedure extends Scope { Procedure procedure = (Procedure) o; return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && - isDeclaredBanked() == procedure.isDeclaredBanked() && + Objects.equals(bankLocation, procedure.bankLocation) && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && From 4aeed59d0e3ce6ed3c5f654e27a7f875e5b1fce3 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 18 Apr 2023 10:14:47 +0200 Subject: [PATCH 39/50] - Code improvements for CallingDistance and CallingProximity --- .../AsmFragmentInstanceSpecBuilder.java | 11 ++- .../signature/AsmFragmentSignature.java | 13 ++- .../kickc/model/symbols/Procedure.java | 83 +++++++++++++++++++ .../kickc/passes/Pass4CodeGeneration.java | 53 +----------- 4 files changed, 94 insertions(+), 66 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 8c493b3d6..91669533e 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -14,6 +14,7 @@ import dk.camelot64.kickc.model.operators.OperatorUnary; import dk.camelot64.kickc.model.operators.Operators; import dk.camelot64.kickc.model.statements.*; import dk.camelot64.kickc.model.symbols.Label; +import dk.camelot64.kickc.model.symbols.Procedure; import dk.camelot64.kickc.model.symbols.Symbol; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; @@ -44,19 +45,17 @@ final public class AsmFragmentInstanceSpecBuilder { /** * Create a fragment instance spec factory for a subroutine call * - * @param distance The string expressing the distance of the call: "near", "close", "far". + * @param callingDistance The class expressing the distance of the call: "near", "close", "far" plus bankArea and bank information calculated from the from and to procedure. * @param callingConvention The string expressing the calling convention supported by the fragment. - * @param bankArea The bank area where the procedure is to be called. - * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(String distance, String callingConvention, String bankArea, Long bank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure.CallingDistance callingDistance, String callingConvention, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(distance, callingConvention, bankArea, bank); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingDistance, callingConvention); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bank)); + bindings.bind("c1", new ConstantInteger(callingDistance.getBank())); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index d13f75cb9..509680120 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -2,6 +2,7 @@ package dk.camelot64.kickc.fragment.signature; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureLexer; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureParser; +import dk.camelot64.kickc.model.symbols.Procedure; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -75,21 +76,17 @@ public interface AsmFragmentSignature { */ class CallBanked implements AsmFragmentSignature { - final private String distance; + final private Procedure.CallingDistance callingDistance; final private String callingConvention; - final private String bankArea; - final private Long bank; - public CallBanked(String distance, String callingConvention, String bankArea, Long bank) { - this.distance = distance; + public CallBanked(Procedure.CallingDistance callingDistance, String callingConvention) { + this.callingDistance = callingDistance; this.callingConvention = callingConvention; - this.bankArea = bankArea; - this.bank = bank; } @Override public String getName() { - return "call_" + callingConvention.toLowerCase() + "_" + distance.toLowerCase() + ((bankArea.isEmpty()) ? "" : ("_" + bankArea.toLowerCase())); + return "call_" + callingConvention.toLowerCase() + "_" + callingDistance.getFragmentName().toLowerCase(); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 40512af6b..d59dd6419 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -64,6 +64,89 @@ public class Procedure extends Scope { this.bankLocation = bankLocation; } + public enum CallingProximity { + NEAR("near"), + CLOSE("close"), + FAR("far"); + + public String getProximity() { + return proximity; + } + + private final String proximity; + + CallingProximity(String proximity) { + this.proximity = proximity; + } + } + + /** The method for expressing the call distance to implement banking + * + * The following variations exist related to banked calls: + * - #1 - unbanked to unbanked and no banking areas + * - #2 - unbanked to banked to any bank area + * - #3 - banked to unbanked from any bank area + * - #4 - banked to same bank in same bank area + * - #5 - banked to different bank in same bank area + * - #6 - banked to any bank between different bank areas + * + * This brings us to the call types: + * - CallingDistance.NEAR - case #1, #3, #4 + * - CallingDistance.CLOSE - case #2, #6 + * - CallingDistance.FAR - case #5 + */ + public static class CallingDistance { + + private CallingProximity proximity; + private String bankArea; + private Long bank; + + public CallingProximity getProximity() { + return proximity; + } + + public String getBankArea() { + return bankArea; + } + + public Long getBank() { + return bank; + } + + + public CallingDistance(Procedure from, Procedure to) { + if (((!from.isDeclaredBanked() && !to.isDeclaredBanked())) || + ((from.isDeclaredBanked() && !to.isDeclaredBanked())) || + ((from.isDeclaredBanked() && to.isDeclaredBanked()) && + (from.getBank() == to.getBank()) && + (from.getBankArea().contentEquals(to.getBankArea())) + ) + ) { + // near call - case #1, #3, #4 + this.proximity = CallingProximity.NEAR; + this.bankArea = ""; + this.bank = 0L; + } else { + if ((!from.isDeclaredBanked() && to.isDeclaredBanked()) || + ((from.isDeclaredBanked() && to.isDeclaredBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) + ) { + // close call - case #2, #6 + this.proximity = CallingProximity.CLOSE; + this.bankArea = to.getBankArea(); + this.bank = to.getBank(); + } else { + // far call - case #5 + this.proximity = CallingProximity.FAR; + this.bankArea = to.getBankArea(); + this.bank = to.getBank(); + } + } + } + + public String getFragmentName() { + return this.proximity.getProximity() + (this.bankArea.isEmpty() ? "" : "_" + this.bankArea); + } + } /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index ccea75395..dfcba31e5 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -906,56 +906,13 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - /* - The following variations exist related to banked calls: - #1 - unbanked to unbanked and no banking areas - #2 - unbanked to banked to any bank area - #3 - banked to unbanked from any bank area - #4 - banked to same bank in same bank area - #5 - banked to different bank in same bank area - #6 - banked to any bank between different bank areas - - This brings us to the call types: - near - case #1, #3, #4 - close - case #2, #6 - far - case #5 - */ - String fromBankArea = fromProcedure.getBankArea(); - String toBankArea = toProcedure.getBankArea(); - Boolean fromIsBanked = fromProcedure.isDeclaredBanked(); - Boolean toIsBanked = toProcedure.isDeclaredBanked(); - Long fromBank = fromProcedure.getBank(); - Long toBank = toProcedure.getBank(); - if( ((!fromIsBanked && !toIsBanked)) || - ((fromIsBanked && !toIsBanked)) || - ((fromIsBanked && toIsBanked) && (fromBank == toBank) && (fromBankArea.contentEquals(toBankArea))) - ) { - // near call - case #1, #3, #4 - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "near","phi", "", 0L, call.getProcedure().getFullName(), program), program); -// // Otherwise, Generate AM for a normal near call. -// asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); - } else { - if( (!fromIsBanked && toIsBanked) || - ((fromIsBanked && toIsBanked) && (!fromBankArea.contentEquals(toBankArea))) - ) { - // close call - case #2, #6 - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "close","phi", toBankArea, toBank, call.getProcedure().getFullName(), program), program); - } else { - // far call - case #5 - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "far","phi", toBankArea, toBank, call.getProcedure().getFullName(), program), program); - } - } + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(new Procedure.CallingDistance(fromProcedure, toProcedure),"phi", call.getProcedure().getFullName(), program), program); } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - // Same as PHI - String fromBankArea = fromProcedure.getBankArea(); - String toBankArea = toProcedure.getBankArea(); - Boolean fromIsBanked = fromProcedure.isDeclaredBanked(); Boolean toIsBanked = toProcedure.isDeclaredBanked(); Long fromBank = fromProcedure.getBank(); Long toBank = toProcedure.getBank(); if(toIsBanked && fromBank != toBank) { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked("far", "stack", toProcedure.getBankArea(), toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } @@ -967,20 +924,12 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. - String fromBankArea = fromProcedure.getBankArea(); - String toBankArea = toProcedure.getBankArea(); - Boolean fromIsBanked = fromProcedure.isDeclaredBanked(); - Boolean toIsBanked = toProcedure.isDeclaredBanked(); - Long fromBank = fromProcedure.getBank(); - Long toBank = toProcedure.getBank(); RValue procedureRVal = call.getProcedureRVal(); // Same as PHI if (toProcedure.isDeclaredBanked() && fromProcedure.getBank() != toProcedure.getBank()) { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "far", "stack", toProcedure.getBankArea(), toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } else { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "near", "stack", toProcedure.getBankArea(), toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); From 9f75ffdb2a72976b45e0e3c6b9d44364586a0192 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 09:55:20 +0200 Subject: [PATCH 40/50] Merging far-call-isolated. --- .../java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index d61e82d9a..ef9ec9e00 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -12,7 +12,6 @@ import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.parser.KickCParserBaseVisitor; -import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import java.util.ArrayList; From 291ce871c45d9f7c892e293c6622e8e49fc446ac Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 11:54:47 +0200 Subject: [PATCH 41/50] Working on far call merge. --- .../call_phi_close_cx16_ram.asm | 2 +- .../call_phi_close_cx16_rom.asm | 3 +- .../mos6502-common/call_phi_far_cx16_ram.asm | 2 +- .../mos6502-common/call_phi_far_cx16_rom.asm | 2 +- .../fragment/mos6502-common/call_phi_near.asm | 2 +- .../AsmFragmentInstanceSpecBuilder.java | 2 +- .../dk/camelot64/kickc/model/Directive.java | 10 +- .../dk/camelot64/kickc/model/Program.java | 8 +- .../kickc/model/{ => symbols}/Bank.java | 39 +- .../kickc/model/symbols/Procedure.java | 73 ++-- .../camelot64/kickc/model/symbols/Scope.java | 2 - .../dk/camelot64/kickc/parser/CParser.java | 4 +- .../Pass0GenerateStatementSequence.java | 42 +-- .../kickc/passes/Pass4CodeGeneration.java | 42 +-- src/test/ref/address-0.log | 4 +- src/test/ref/address-2.log | 4 +- src/test/ref/address-5.log | 16 +- src/test/ref/address-6.log | 16 +- src/test/ref/address-of-1.log | 12 +- src/test/ref/address-of-2.log | 12 +- src/test/ref/address-of-3.log | 12 +- src/test/ref/array-16bit-lookup.log | 4 +- src/test/ref/asm-mnemonic-names.log | 4 +- src/test/ref/assignment-compound.log | 44 +-- src/test/ref/atarixl-md5b.log | 16 +- src/test/ref/bitmap-circle-2.log | 44 +-- src/test/ref/bitmap-circle.log | 44 +-- src/test/ref/bitmap-line-anim-1.log | 56 +-- src/test/ref/bitmap-line-anim-2.log | 52 +-- src/test/ref/bitmap-plot-0.log | 28 +- src/test/ref/bitmap-plot-3.log | 52 +-- src/test/ref/bitmap-plotter.log | 16 +- src/test/ref/bool-const.log | 12 +- src/test/ref/bool-function.log | 4 +- src/test/ref/bool-ifs.log | 16 +- src/test/ref/bool-vars.log | 16 +- src/test/ref/c-types.log | 196 +++++------ src/test/ref/c64dtv-8bppcharstretch.log | 20 +- src/test/ref/c64dtv-8bppchunkystretch.log | 16 +- .../ref/call-banked-phi-case-1-near-0.log | 4 +- .../ref/call-banked-phi-case-1-near-1.log | 8 +- .../ref/call-banked-phi-case-2-close-0.asm | 2 +- .../ref/call-banked-phi-case-2-close-0.log | 4 +- .../ref/call-banked-phi-case-2-close-1.asm | 2 +- .../ref/call-banked-phi-case-2-close-1.log | 4 +- .../ref/call-banked-phi-case-3-near-0.asm | 2 +- .../ref/call-banked-phi-case-3-near-0.log | 8 +- .../ref/call-banked-phi-case-3-near-1.asm | 3 +- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 20 +- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- .../ref/call-banked-phi-case-4-near-0.asm | 4 +- .../ref/call-banked-phi-case-4-near-0.log | 12 +- .../ref/call-banked-phi-case-4-near-1.asm | 4 +- .../ref/call-banked-phi-case-4-near-1.log | 12 +- src/test/ref/call-banked-phi-case-5-far-0.asm | 4 +- src/test/ref/call-banked-phi-case-5-far-0.log | 8 +- src/test/ref/call-banked-phi-case-5-far-1.asm | 4 +- src/test/ref/call-banked-phi-case-5-far-1.log | 8 +- .../ref/call-banked-phi-case-6-close-0.asm | 4 +- .../ref/call-banked-phi-case-6-close-0.log | 8 +- .../ref/call-banked-phi-case-6-close-1.asm | 4 +- .../ref/call-banked-phi-case-6-close-1.log | 8 +- src/test/ref/call-parameter-autocast.log | 12 +- src/test/ref/callconstparam.log | 8 +- src/test/ref/casting-negative.log | 72 ++-- src/test/ref/casting.log | 4 +- src/test/ref/cbm-keyboard.log | 92 ++--- src/test/ref/cia-timer-cyclecount.log | 36 +- src/test/ref/cia-timer-simple.log | 36 +- src/test/ref/clobber-a-problem.log | 4 +- src/test/ref/complex/includes/includes-1.log | 4 +- src/test/ref/complex/includes/includes-2.log | 4 +- src/test/ref/complex/xmega65/xmega65.log | 8 +- src/test/ref/const-bool-return-problem.log | 8 +- src/test/ref/const-early-identification.log | 8 +- src/test/ref/const-identification.log | 8 +- src/test/ref/const-param.log | 12 +- src/test/ref/const-volatile-problem.log | 4 +- src/test/ref/constants.log | 92 ++--- src/test/ref/constref-not-literal-problem.log | 4 +- src/test/ref/cordic-atan2-16.log | 8 +- src/test/ref/cordic-atan2-clear.log | 12 +- src/test/ref/cordic-atan2.log | 8 +- src/test/ref/cstyle-decl-function.log | 8 +- src/test/ref/declared-memory-var-6.log | 40 +-- src/test/ref/declared-memory-var-7.log | 4 +- src/test/ref/declared-memory-var-8.log | 4 +- src/test/ref/declared-ssa-var-0.log | 4 +- src/test/ref/default-font.log | 4 +- src/test/ref/deref-to-derefidx-2.log | 8 +- src/test/ref/deref-to-derefidx.log | 8 +- src/test/ref/ducks-array.log | 20 +- src/test/ref/ducks-loop211.log | 4 +- src/test/ref/ducks-total.log | 332 +++++++++--------- src/test/ref/emptyblock-error.log | 8 +- src/test/ref/enum-5.log | 4 +- src/test/ref/euclid-3.log | 68 ++-- src/test/ref/euclid-problem-2.log | 16 +- .../examples/atari2600/atari2600-sprites.log | 4 +- src/test/ref/examples/c64/3d/perspective.log | 96 ++--- .../c64/bresenham/bitmap-bresenham.log | 60 ++-- .../c64/crunching/test-byteboozer.log | 4 +- .../c64/fastmultiply/fastmultiply8.log | 48 +-- src/test/ref/examples/c64/fire/fire.log | 28 +- .../ref/examples/c64/font-2x2/font-2x2.log | 20 +- .../examples/c64/kernalload/kernalload.log | 24 +- .../ref/examples/c64/krillload/krillload.log | 8 +- src/test/ref/examples/c64/linking/linking.log | 4 +- .../c64/multiplexer/simple-multiplexer.log | 24 +- .../examples/c64/nmisamples/nmisamples.log | 4 +- .../examples/c64/rasterbars/raster-bars.log | 4 +- src/test/ref/examples/c64/scroll/scroll.log | 4 +- .../ref/examples/c64/scrollbig/scrollbig.log | 20 +- .../ref/examples/c64/showlogo/showlogo.log | 8 +- src/test/ref/examples/c64/zpcode/zpcode.log | 8 +- .../ref/examples/cx16/cx16-rasterbars.log | 8 +- .../ref/examples/helloworld/helloworld.log | 44 +-- .../mega65/32bit-addressing-mega65.log | 4 +- src/test/ref/examples/mega65/banked-music.log | 28 +- .../ref/examples/mega65/camelot-1536dots.log | 44 +-- src/test/ref/examples/mega65/dma-test.log | 4 +- src/test/ref/examples/mega65/dma-test2.log | 8 +- src/test/ref/examples/mega65/dma-test3.log | 8 +- src/test/ref/examples/mega65/dma-test4.log | 8 +- src/test/ref/examples/mega65/dma-test5.log | 8 +- src/test/ref/examples/mega65/dma-test6.log | 8 +- src/test/ref/examples/mega65/dypp65.log | 16 +- .../ref/examples/mega65/helloworld-mega65.log | 48 +-- .../ref/examples/mega65/memorymap-test.log | 24 +- src/test/ref/examples/mega65/raster65.log | 8 +- src/test/ref/examples/nes/nes-dxycp.log | 20 +- .../ref/examples/plus4/plus4-randomwalk.log | 16 +- src/test/ref/examples/rom/rom.log | 16 +- src/test/ref/flipper-rex2.log | 12 +- src/test/ref/font-hex-show.log | 4 +- src/test/ref/fragment-synth.log | 8 +- src/test/ref/fragment-variations.log | 8 +- src/test/ref/function-pointer-advanced-1.log | 72 ++-- .../ref/function-pointer-noarg-call-10.log | 20 +- .../ref/function-pointer-noarg-call-13.log | 8 +- .../ref/function-pointer-noarg-call-14.log | 56 +-- .../ref/function-pointer-noarg-call-3.log | 4 +- .../ref/function-pointer-noarg-call-7.log | 8 +- .../ref/function-pointer-noarg-call-8.log | 12 +- .../ref/function-pointer-noarg-call-9.log | 4 +- .../ref/function-pointer-param-workaround.log | 4 +- src/test/ref/function-pointer-problem-1.log | 4 +- src/test/ref/function-pointer-return-2.log | 8 +- src/test/ref/function-pointer-return-3.log | 4 +- src/test/ref/global-label-problem.log | 20 +- src/test/ref/global-pc-multiple.log | 4 +- src/test/ref/helloworld2.log | 8 +- src/test/ref/hex2dec-ptrptr.log | 40 +-- src/test/ref/hex2dec.log | 44 +-- src/test/ref/incrementinarray.log | 20 +- src/test/ref/init-value-npe.log | 4 +- src/test/ref/init-volatiles.log | 4 +- src/test/ref/inline-asm-ref-scoped.log | 4 +- src/test/ref/inline-asm-uses-1.log | 4 +- src/test/ref/inline-kickasm-uses-problem.log | 4 +- src/test/ref/inline-pointer-1.log | 8 +- src/test/ref/inline-string-2.log | 12 +- src/test/ref/inline-string-4.log | 4 +- src/test/ref/inline-string.log | 12 +- src/test/ref/int-conversion.log | 176 +++++----- src/test/ref/int-literals.log | 68 ++-- src/test/ref/intermediates-simple.log | 4 +- src/test/ref/intermediates-struct.log | 8 +- .../ref/interrupt-volatile-reuse-problem1.log | 4 +- .../ref/interrupt-volatile-reuse-problem2.log | 4 +- src/test/ref/irq-hardware-clobber-jsr.log | 4 +- src/test/ref/irq-idx-problem.log | 4 +- .../ref/irq-local-var-overlap-problem.log | 8 +- src/test/ref/keyboard-glitch.log | 28 +- src/test/ref/library-constructor-1.log | 12 +- src/test/ref/library-constructor-3.log | 16 +- src/test/ref/linegen.log | 136 +++---- src/test/ref/literal-word-pointer-0.log | 4 +- src/test/ref/literal-word-pointer-1.log | 4 +- src/test/ref/liverange-1.log | 8 +- src/test/ref/liverange-10.log | 32 +- src/test/ref/liverange-2.log | 4 +- src/test/ref/liverange-3.log | 4 +- src/test/ref/liverange-4.log | 8 +- src/test/ref/liverange-5.log | 8 +- src/test/ref/liverange-6.log | 4 +- src/test/ref/liverange-7.log | 8 +- src/test/ref/liverange-8.log | 12 +- src/test/ref/liverange-9.log | 20 +- src/test/ref/liverange-call-problem.log | 16 +- src/test/ref/liverange-problem-0.log | 12 +- src/test/ref/liverange.log | 8 +- src/test/ref/longbranch-interrupt-problem.log | 4 +- src/test/ref/longjump2.log | 8 +- src/test/ref/loop-memset-min.log | 4 +- src/test/ref/loop-problem.log | 12 +- src/test/ref/loop-problem2.log | 8 +- src/test/ref/loophead-problem-2.log | 4 +- src/test/ref/loophead-problem-3.log | 4 +- src/test/ref/loophead-problem.log | 4 +- src/test/ref/loopnest.log | 4 +- src/test/ref/loopnest2.log | 8 +- src/test/ref/loopnest3.log | 8 +- src/test/ref/malloc-0.log | 8 +- src/test/ref/malloc-1.log | 8 +- src/test/ref/memcpy-0.log | 8 +- src/test/ref/memcpy-1.log | 8 +- src/test/ref/memory-heap.log | 8 +- .../ref/millfork-benchmarks/linkedlist-kc.log | 56 +-- .../ref/millfork-benchmarks/plasma-kc.log | 56 +-- .../ref/millfork-benchmarks/romsum-kc.log | 68 ++-- src/test/ref/millfork-benchmarks/sieve-kc.log | 80 ++--- src/test/ref/min-fmul-16.log | 36 +- src/test/ref/missing-band.log | 4 +- src/test/ref/modglobal.log | 8 +- src/test/ref/modglobalmin.log | 8 +- src/test/ref/mul8u-min.log | 4 +- .../simple-multiplexer-irq.log | 24 +- src/test/ref/multiply-16bit-const.log | 32 +- src/test/ref/nes-array.log | 8 +- src/test/ref/nomodify-3.log | 4 +- src/test/ref/nomodify-4.log | 8 +- src/test/ref/norom-charset.log | 4 +- src/test/ref/null-constant-1.log | 8 +- src/test/ref/number-conversion.log | 140 ++++---- src/test/ref/number-ternary-fail-2.log | 8 +- src/test/ref/number-type.log | 8 +- src/test/ref/overlap-allocation-2.log | 16 +- src/test/ref/overlap-allocation.log | 12 +- src/test/ref/plus-0.log | 8 +- src/test/ref/plus4-kbhit.log | 4 +- src/test/ref/plus4-keyboard-test.log | 4 +- src/test/ref/pointer-plus-0.log | 8 +- src/test/ref/pointer-pointer-2.log | 4 +- src/test/ref/pointer-pointer-3.log | 12 +- src/test/ref/pointer-swap.log | 20 +- src/test/ref/pointer-void-1.log | 12 +- src/test/ref/pointer-void-2.log | 12 +- src/test/ref/pointer-void-3.log | 8 +- src/test/ref/post-increment-problem-2.log | 4 +- src/test/ref/pragma-noparam-noparen.log | 1 - src/test/ref/pragma-noparenthesis.log | 8 +- src/test/ref/primes-1000-2.log | 40 +-- src/test/ref/print-problem.log | 12 +- src/test/ref/printf-1.log | 88 ++--- src/test/ref/printf-10.log | 16 +- src/test/ref/printf-11.log | 12 +- src/test/ref/printf-12.log | 232 ++++++------ src/test/ref/printf-14.log | 64 ++-- src/test/ref/printf-15.log | 52 +-- src/test/ref/printf-17.log | 136 +++---- src/test/ref/printf-18.log | 84 ++--- src/test/ref/printf-19.log | 148 ++++---- src/test/ref/printmsg.log | 28 +- src/test/ref/problem-ma-var-overwrite.log | 8 +- src/test/ref/problem-negate-const.log | 4 +- .../ref/problem-struct-inline-parameter-1.log | 4 +- .../ref/problem-struct-inline-parameter.log | 4 +- .../procedure-callingconvention-stack-4.log | 4 +- .../procedure-callingconvention-stack-5.log | 4 +- src/test/ref/procedure-declare-10.log | 4 +- src/test/ref/procedure-declare-2.log | 8 +- src/test/ref/procedure-declare-3.log | 8 +- src/test/ref/procedure-declare-4.log | 8 +- src/test/ref/procedure-declare-5.log | 4 +- src/test/ref/processor-port-test.log | 188 +++++----- src/test/ref/ptrptr-optimize-1.log | 8 +- src/test/ref/ptrptr-optimize-2.log | 8 +- src/test/ref/ptrtest.log | 16 +- src/test/ref/register-0.log | 16 +- src/test/ref/reserve-zp-global-range.log | 4 +- src/test/ref/reserve-zp-global.log | 4 +- src/test/ref/reserve-zp-procedure-1.log | 4 +- src/test/ref/reserve-zp-procedure-2.log | 8 +- src/test/ref/reserve-zp-procedure-3.log | 4 +- src/test/ref/reserve-zp-procedure-4.log | 4 +- src/test/ref/robozzle64-label-problem.log | 8 +- src/test/ref/roll-sprite-msb.log | 4 +- src/test/ref/scan-desire-problem.log | 24 +- src/test/ref/scrollbig-clobber.log | 4 +- src/test/ref/semi-struct-1.log | 44 +-- src/test/ref/sepa-optimize-problem-1.log | 24 +- src/test/ref/sieve-min.log | 28 +- src/test/ref/signed-char-comparison.log | 4 +- src/test/ref/signed-indexed-subtract.log | 56 +-- src/test/ref/signed-words.log | 8 +- src/test/ref/sinus-basic.log | 72 ++-- src/test/ref/sinusgen16.log | 96 ++--- src/test/ref/sqr-delta.log | 4 +- src/test/ref/stack-relative-addressing.log | 4 +- src/test/ref/stars-2.log | 76 ++-- src/test/ref/static-init-code-0.log | 4 +- src/test/ref/strcmp-0.log | 244 ++++++------- src/test/ref/strcpy-0.log | 8 +- .../ref/string-const-consolidation-noroot.log | 12 +- .../ref/string-const-consolidation-root.log | 32 +- src/test/ref/string-const-consolidation.log | 12 +- src/test/ref/string-escapes-2.log | 4 +- src/test/ref/string-escapes-4.log | 4 +- src/test/ref/string-pointer-problem.log | 4 +- src/test/ref/strip.log | 16 +- src/test/ref/strncat-0.log | 12 +- src/test/ref/struct-11.log | 8 +- src/test/ref/struct-11b.log | 8 +- src/test/ref/struct-12.log | 8 +- src/test/ref/struct-22.log | 8 +- src/test/ref/struct-23.log | 8 +- src/test/ref/struct-3.log | 8 +- src/test/ref/struct-44.log | 76 ++-- src/test/ref/struct-5.log | 4 +- src/test/ref/struct-pointer-ints.log | 4 +- src/test/ref/struct-ptr-14.log | 4 +- src/test/ref/struct-ptr-16.log | 8 +- src/test/ref/struct-ptr-17.log | 8 +- src/test/ref/struct-ptr-18.log | 4 +- src/test/ref/struct-ptr-19.log | 8 +- src/test/ref/struct-ptr-22.log | 44 +-- src/test/ref/struct-ptr-23.log | 8 +- src/test/ref/struct-ptr-24.log | 4 +- src/test/ref/struct-ptr-26.log | 20 +- src/test/ref/struct-ptr-28.log | 8 +- src/test/ref/struct-ptr-29.log | 8 +- src/test/ref/struct-ptr-30.log | 4 +- src/test/ref/struct-ptr-31.log | 8 +- src/test/ref/struct-ptr-34.log | 8 +- src/test/ref/struct-unwinding-2.log | 16 +- src/test/ref/summin.log | 12 +- src/test/ref/ternary-3.log | 12 +- src/test/ref/test-comments-block.log | 4 +- src/test/ref/test-comments-global.log | 4 +- src/test/ref/test-comments-single.log | 4 +- src/test/ref/test-comparisons-sword.log | 64 ++-- src/test/ref/test-comparisons-word.log | 56 +-- .../ref/test-interrupt-volatile-write.log | 4 +- src/test/ref/test-interrupt-volatile.log | 4 +- src/test/ref/test-keyboard-space.log | 12 +- src/test/ref/test-keyboard.log | 20 +- src/test/ref/test-lowhigh.log | 88 ++--- src/test/ref/test-scroll-up.log | 12 +- src/test/ref/test-signed-word-minus-byte.log | 52 +-- src/test/ref/tod-1.log | 64 ++-- src/test/ref/toupper-1.log | 60 ++-- src/test/ref/travis1.log | 24 +- src/test/ref/typedef-2.log | 4 +- src/test/ref/typedef-4.log | 4 +- src/test/ref/typeid-plus-bytes.log | 16 +- src/test/ref/union-7.log | 8 +- src/test/ref/union-8.log | 8 +- src/test/ref/var-register-zp-3.log | 12 +- src/test/ref/var-register.log | 4 +- src/test/ref/varmodel-ma_mem-3.log | 8 +- src/test/ref/varmodel-mem-1.log | 8 +- src/test/ref/void-parameter.log | 12 +- src/test/ref/volatile-0.log | 4 +- src/test/ref/volatile-2.log | 4 +- src/test/ref/voronoi.log | 16 +- src/test/ref/weeip-bbslist.log | 84 ++--- src/test/ref/weeip-checksum.log | 12 +- src/test/ref/wfragment1.log | 4 +- src/test/ref/zeropage-sinus.log | 16 +- src/test/ref/zp-reserve-coalesce-problem.log | 8 +- src/test/ref/zpparammin.log | 8 +- 363 files changed, 3814 insertions(+), 3869 deletions(-) rename src/main/java/dk/camelot64/kickc/model/{ => symbols}/Bank.java (89%) diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm index 40053e0b4..fda09c03e 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -4,4 +4,4 @@ lda #{c1} sta $0 jsr {la1} pla -sta $0 +sta $0 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm index 29641e03d..6d0c8e9c2 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -4,5 +4,4 @@ lda #{c1} sta $1 jsr {la1} pla -sta $1 - +sta $1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm index 667444f52..6be1d836e 100644 --- a/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm @@ -1,4 +1,4 @@ jsr $FF6E .byte <{la1} .byte >{la1} -.byte {c1} +.byte {c1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm index 667444f52..6be1d836e 100644 --- a/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm @@ -1,4 +1,4 @@ jsr $FF6E .byte <{la1} .byte >{la1} -.byte {c1} +.byte {c1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_near.asm b/src/main/fragment/mos6502-common/call_phi_near.asm index 71fb96bc2..443c46caa 100644 --- a/src/main/fragment/mos6502-common/call_phi_near.asm +++ b/src/main/fragment/mos6502-common/call_phi_near.asm @@ -1 +1 @@ -jsr {la1} +jsr {la1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 91669533e..a3ca5bddc 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -55,7 +55,7 @@ final public class AsmFragmentInstanceSpecBuilder { AsmFragmentBindings bindings = new AsmFragmentBindings(program); AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingDistance, callingConvention); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(callingDistance.getBank())); + bindings.bind("c1", new ConstantInteger(callingDistance.getBankNumber())); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 4b43f7d4b..850933e44 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -52,20 +52,20 @@ public class Directive { static public class Bank extends Directive { private String bankArea; // A bank area is a memory range that is banked on a target platform. - private Long bank; // A bank is a number that defines a bank configuration in a bank area. + private Long bankNumber; // A bank is a number that defines a bank configuration in a bank area. - public Bank(String bankArea, Long bank) { + public Bank(String bankArea, Long bankNumber) { super("bank" ); this.bankArea = bankArea; - this.bank = bank; + this.bankNumber = bankNumber; } public String getBankArea() { return bankArea; } - public Long getBank() { - return bank; + public Long getBankNumber() { + return bankNumber; } } diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index c42debf3d..bcd720852 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -8,11 +8,13 @@ import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.values.LabelRef; import dk.camelot64.kickc.model.values.ProcedureRef; -import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.passes.calcs.*; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** A KickC Intermediate Compiler Language (ICL) Program */ public class Program { @@ -105,7 +107,6 @@ public class Program { private NaturalLoopSet loopSet; /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; - /** All #pragma code segments. Collected during parsing. These are used by the bank() pragmas to validate if the code segment exists during compilation.*/ public Program() { this.outputFileManager = new OutputFileManager(); @@ -537,4 +538,5 @@ public class Program { sizeInfo.append(getAsm().getSizeInfo()); return sizeInfo.toString(); } + } diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java similarity index 89% rename from src/main/java/dk/camelot64/kickc/model/Bank.java rename to src/main/java/dk/camelot64/kickc/model/symbols/Bank.java index b080bc0e4..ce1ace201 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java @@ -1,9 +1,6 @@ -package dk.camelot64.kickc.model; - - +package dk.camelot64.kickc.model.symbols; /** - * *

* Specific target computer platforms implement a memory layout that can be banked either in ram or rom. * This class models the capability to calculate which function call implementations are banked and which not. @@ -99,44 +96,28 @@ package dk.camelot64.kickc.model; * __bank( method, number ) directive to calculate the function call implementation * at the function calling locations! * - * + *

* The KickC compiler contains several test cases and examples which demonstrate the usage of the banking system. * + * @param bankArea The bankable area name. + * @param bankNumber The bank number. */ -public class Bank extends Object { - - private final String bankArea; // The bank method to apply. - private Long bank; // The bank number. +public record Bank(String bankArea, Long bankNumber) { /** * Creates a new Bank which collects the necessary data to handle banking. * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. - * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + * So "Banked RAM" is is a bankArea, and the bank is a configurable bank number in the bankArea. + * * @param bankArea A bank area is a memory range that is banked on a target platform. - * @param bank A bank is a number that defines a bank configuration in a bank area. + * @param bankNumber A bank is a number that defines a bank configuration in a bank area. */ - public Bank(String bankArea, Long bank) { - this.bankArea = bankArea; - this.bank = bank; - } - - public String getBankArea() { - return bankArea; - } - - public Long getBank() { - return bank; - } - - public void setBank(Long bank) { - this.bank = bank; + public Bank { } @Override public String toString() { - return "banked : " + - "bank area='" + bankArea + '\'' + - ", bank=" + bank; + return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index d59dd6419..40da8c1d2 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -1,7 +1,6 @@ package dk.camelot64.kickc.model.symbols; import dk.camelot64.kickc.model.Comment; -import dk.camelot64.kickc.model.Bank; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.types.SymbolType; @@ -42,10 +41,12 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; - /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines. - * When this value is null, the procedure is not allocated to a bank. + /** + * The bank that the procedure code is placed in. + * Used to decide whether to produce near, close or far call when generating code. + * If null, the procedure is in a common bank (always visible) and all calls will be near. */ - private Bank bankLocation; + private Bank bank; /** The names of all legal intrinsic procedures. */ @@ -56,12 +57,12 @@ public class Procedure extends Scope { Pass1ByteXIntrinsicRewrite.INTRINSIC_MAKELONG4 ); - public Bank getBankLocation() { - return bankLocation; + public Bank getBank() { + return bank; } - public void setBankLocation(Bank bankLocation) { - this.bankLocation = bankLocation; + public void setBank(Bank bank) { + this.bank = bank; } public enum CallingProximity { @@ -109,16 +110,16 @@ public class Procedure extends Scope { return bankArea; } - public Long getBank() { + public Long getBankNumber() { return bank; } public CallingDistance(Procedure from, Procedure to) { - if (((!from.isDeclaredBanked() && !to.isDeclaredBanked())) || - ((from.isDeclaredBanked() && !to.isDeclaredBanked())) || - ((from.isDeclaredBanked() && to.isDeclaredBanked()) && - (from.getBank() == to.getBank()) && + if (((!from.isBanked() && !to.isBanked())) || + ((from.isBanked() && !to.isBanked())) || + ((from.isBanked() && to.isBanked()) && + (from.getBankNumber() == to.getBankNumber()) && (from.getBankArea().contentEquals(to.getBankArea())) ) ) { @@ -127,18 +128,18 @@ public class Procedure extends Scope { this.bankArea = ""; this.bank = 0L; } else { - if ((!from.isDeclaredBanked() && to.isDeclaredBanked()) || - ((from.isDeclaredBanked() && to.isDeclaredBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) + if ((!from.isBanked() && to.isBanked()) || + ((from.isBanked() && to.isBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) ) { // close call - case #2, #6 this.proximity = CallingProximity.CLOSE; this.bankArea = to.getBankArea(); - this.bank = to.getBank(); + this.bank = to.getBankNumber(); } else { // far call - case #5 this.proximity = CallingProximity.FAR; this.bankArea = to.getBankArea(); - this.bank = to.getBank(); + this.bank = to.getBankNumber(); } } } @@ -183,11 +184,11 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String segmentCode, String segmentData, CallingConvention callingConvention, Bank bankLocation) { + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String segmentCode, String segmentData, CallingConvention callingConvention, Bank bank) { super(name, parentScope, segmentData); this.procedureType = procedureType; this.declaredInline = false; - this.bankLocation = bankLocation; + this.bank = bank; this.interruptType = null; this.comments = new ArrayList<>(); this.segmentCode = segmentCode; @@ -301,20 +302,20 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public boolean isDeclaredBanked() { - return bankLocation != null; + public boolean isBanked() { + return bank != null; } - public Long getBank() { - if(bankLocation != null) - return bankLocation.getBank(); + public Long getBankNumber() { + if(bank != null) + return bank.bankNumber(); else return 0L; } public String getBankArea() { - if(bankLocation != null) - return bankLocation.getBankArea(); + if(bank != null) + return bank.bankArea(); else return ""; } @@ -379,8 +380,8 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } - if(isDeclaredBanked()) { - res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBank()).append(") "); + if(isBanked()) { + res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBankNumber()).append(") "); } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); @@ -418,23 +419,11 @@ public class Procedure extends Scope { if(o == null || getClass() != o.getClass()) return false; if(!super.equals(o)) return false; Procedure procedure = (Procedure) o; - return variableLengthParameterList == procedure.variableLengthParameterList && - declaredInline == procedure.declaredInline && - Objects.equals(bankLocation, procedure.bankLocation) && - declaredIntrinsic == procedure.declaredIntrinsic && - isConstructor == procedure.isConstructor && - Objects.equals(procedureType, procedure.procedureType) && - Objects.equals(parameterNames, procedure.parameterNames) && - Objects.equals(interruptType, procedure.interruptType) && - Objects.equals(comments, procedure.comments) && - Objects.equals(reservedZps, procedure.reservedZps) && - Objects.equals(segmentCode, procedure.segmentCode) && - Objects.equals(constructorRefs, procedure.constructorRefs) && - callingConvention == procedure.callingConvention; + return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && Objects.equals(parameterNames, procedure.parameterNames) && Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && Objects.equals(segmentCode, procedure.segmentCode) && Objects.equals(constructorRefs, procedure.constructorRefs) && Objects.equals(definitionSource, procedure.definitionSource) && Objects.equals(bank, procedure.bank) && callingConvention == procedure.callingConvention; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, callingConvention); + return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, definitionSource, bank, callingConvention); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 0ef0c0345..b73ae4353 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -16,8 +16,6 @@ public abstract class Scope implements Symbol { public static final String SEGMENT_CODE_DEFAULT = "Code"; /** The default data segment. */ public static final String SEGMENT_DATA_DEFAULT = "Data"; - /** The default bank segment. */ - public static final Long SEGMENT_BANK_DEFAULT = -1L; private String name; private HashMap symbols; diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 84832cf36..d15b8d800 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,11 +107,11 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma bank(...) changes the current bank. Functionsand variables will be placed in the specified bank. + * #pragma bank(...) changes the current bank. Functions and variables will be placed in the specified bank. */ public static final String PRAGMA_BANK = "bank"; /** - * #pragma nobank Changes the current bank to the default bank. + * #pragma nobank Changes the current bank to the default/common bank. */ public static final String PRAGMA_NOBANK = "nobank"; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index b1a939feb..9d4cf7357 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -16,7 +16,6 @@ import dk.camelot64.kickc.parser.KickCParserBaseVisitor; import dk.camelot64.kickc.passes.utils.SizeOfConstants; import org.antlr.v4.runtime.BufferedTokenStream; import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.RuleContext; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; @@ -295,12 +294,14 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 0) { asm.addComment(signature.toString(), false); } - // Banking information of the procedure. - Bank bank = procedure.getBankLocation(); - if(bank != null) { - StringBuilder signatureBank = new StringBuilder(); - signatureBank.append(" " + bank.toString()); // This procedure is in a bank and in a banking area. - asm.addComment(signatureBank.toString(), false); + if(procedure.getBank() != null) { + asm.addComment(" " + procedure.getBank(), false); } } @@ -896,6 +891,7 @@ public class Pass4CodeGeneration { } } else if (Procedure.CallingConvention.PHI_CALL.equals(toProcedure.getCallingConvention())) { // Generate PHI transition + boolean generatedPhis = false; if (genCallPhiEntry) { ControlFlowBlock callSuccessor = getGraph().getCallSuccessor(block); if (callSuccessor != null && callSuccessor.hasPhiBlock()) { @@ -904,17 +900,21 @@ public class Pass4CodeGeneration { throw new InternalError("Error! JSR transition already generated. Must modify PhiTransitions code to ensure this does not happen."); } genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); + generatedPhis = true; } } - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(new Procedure.CallingDistance(fromProcedure, toProcedure),"phi", call.getProcedure().getFullName(), program), program); - } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - Boolean toIsBanked = toProcedure.isDeclaredBanked(); - Long fromBank = fromProcedure.getBank(); - Long toBank = toProcedure.getBank(); - if(toIsBanked && fromBank != toBank) { - throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); - } else { + final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); + if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } else { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(callingDistance,"phi", call.getProcedure().getFullName(), program), program); + } + } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { + final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); + if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } else { + throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); } } } else if (statement instanceof StatementCallExecute) { @@ -923,14 +923,14 @@ public class Pass4CodeGeneration { if(procedureRef != null) { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); - Procedure fromProcedure = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. - RValue procedureRVal = call.getProcedureRVal(); - // Same as PHI - if (toProcedure.isDeclaredBanked() && fromProcedure.getBank() != toProcedure.getBank()) { - throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); - } else { + Procedure fromProcedure = block.getProcedure(this.program); + final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); + if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + } else { + throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); } + RValue procedureRVal = call.getProcedureRVal(); if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); } diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index d0c3f50bd..46f28583e 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index 850a4e045..635b2d637 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-5.log b/src/test/ref/address-5.log index 89039d32b..ec12d868c 100644 --- a/src/test/ref/address-5.log +++ b/src/test/ref/address-5.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print // main::@return // } diff --git a/src/test/ref/address-6.log b/src/test/ref/address-6.log index 7b69f56e2..40634ffb4 100644 --- a/src/test/ref/address-6.log +++ b/src/test/ref/address-6.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print // main::@return // } diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index d3c427e55..9ccbe545a 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -259,7 +259,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -275,7 +275,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -291,7 +291,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 ldx #'l' jsr setByte jmp __b3 @@ -410,7 +410,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -423,7 +423,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -436,7 +436,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 ldx #'l' jsr setByte // main::@3 diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index deb4adb98..badb057de 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -367,7 +367,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -417,7 +417,7 @@ main: { // [15] *(main::SCREEN2+3) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+3 - // [16] call setv -- call_phi_near + // [16] call setv // Set value directly in a call jsr setv jmp __b1 @@ -429,7 +429,7 @@ main: { // [18] *(main::SCREEN2+4) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+4 - // [19] call setp -- call_phi_near + // [19] call setp // Set value through pointer in a call jsr setp jmp __b2 @@ -545,7 +545,7 @@ __start: { sta.z val // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -603,7 +603,7 @@ main: { lda.z ptr sta SCREEN2+3 // setv(4) - // [16] call setv -- call_phi_near + // [16] call setv // Set value directly in a call jsr setv // main::@1 @@ -616,7 +616,7 @@ main: { lda.z ptr sta SCREEN2+4 // setp(ptr, 5) - // [19] call setp -- call_phi_near + // [19] call setp // Set value through pointer in a call jsr setp // main::@2 diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index 5452e93f9..f06b24e72 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -332,7 +332,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx jsr print @@ -349,7 +349,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -377,7 +377,7 @@ main: { // [11] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print jmp __b3 // main::@3 @@ -499,7 +499,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx jsr print @@ -513,7 +513,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::i#2 = 2 [phi:main::@2->main::@1#0] -- vbuz1=vbuc1 @@ -538,7 +538,7 @@ main: { // [7] call print // [11] phi from main::@1 to print [phi:main::@1->print] // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print // main::@3 // for(char i:2..3) diff --git a/src/test/ref/array-16bit-lookup.log b/src/test/ref/array-16bit-lookup.log index 9c1c39308..4425fa5ea 100644 --- a/src/test/ref/array-16bit-lookup.log +++ b/src/test/ref/array-16bit-lookup.log @@ -313,7 +313,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue -- call_phi_near + // [3] call getValue jsr getValue // [4] getValue::return#0 = getValue::return#1 jmp __b2 @@ -451,7 +451,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue -- call_phi_near + // [3] call getValue jsr getValue // [4] getValue::return#0 = getValue::return#1 // main::@2 diff --git a/src/test/ref/asm-mnemonic-names.log b/src/test/ref/asm-mnemonic-names.log index 7c776fad2..e2456e540 100644 --- a/src/test/ref/asm-mnemonic-names.log +++ b/src/test/ref/asm-mnemonic-names.log @@ -135,7 +135,7 @@ main: { // [0] *lda = main::jmp -- _deref_pbuc1=vbuc2 lda #jmp sta lda - // [1] call bne -- call_phi_near + // [1] call bne jsr bne jmp __b1 // main::@1 @@ -215,7 +215,7 @@ main: { lda #jmp sta lda // bne(jmp) - // [1] call bne -- call_phi_near + // [1] call bne jsr bne // main::@1 // asm diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index 9c2927c8f..fea93d4d2 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -726,7 +726,7 @@ main: { test_from_main: // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near + // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 lda #3 sta.z test.a jsr test @@ -741,7 +741,7 @@ main: { test_from___b1: // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 lda #3+1 sta.z test.a jsr test @@ -756,7 +756,7 @@ main: { test_from___b2: // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 lda #3+1-1 sta.z test.a jsr test @@ -771,7 +771,7 @@ main: { test_from___b3: // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6 sta.z test.a jsr test @@ -786,7 +786,7 @@ main: { test_from___b4: // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -801,7 +801,7 @@ main: { test_from___b5: // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -816,7 +816,7 @@ main: { test_from___b6: // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -831,7 +831,7 @@ main: { test_from___b7: // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -846,7 +846,7 @@ main: { test_from___b8: // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -861,7 +861,7 @@ main: { test_from___b9: // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -876,7 +876,7 @@ main: { test_from___b10: // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test @@ -1027,7 +1027,7 @@ main: { // [23] phi from main to test [phi:main->test] // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near + // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 lda #3 sta.z test.a jsr test @@ -1039,7 +1039,7 @@ main: { // [23] phi from main::@1 to test [phi:main::@1->test] // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 lda #3+1 sta.z test.a jsr test @@ -1051,7 +1051,7 @@ main: { // [23] phi from main::@2 to test [phi:main::@2->test] // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 lda #3+1-1 sta.z test.a jsr test @@ -1063,7 +1063,7 @@ main: { // [23] phi from main::@3 to test [phi:main::@3->test] // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6 sta.z test.a jsr test @@ -1075,7 +1075,7 @@ main: { // [23] phi from main::@4 to test [phi:main::@4->test] // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -1087,7 +1087,7 @@ main: { // [23] phi from main::@5 to test [phi:main::@5->test] // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -1099,7 +1099,7 @@ main: { // [23] phi from main::@6 to test [phi:main::@6->test] // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -1111,7 +1111,7 @@ main: { // [23] phi from main::@7 to test [phi:main::@7->test] // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -1123,7 +1123,7 @@ main: { // [23] phi from main::@8 to test [phi:main::@8->test] // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -1135,7 +1135,7 @@ main: { // [23] phi from main::@9 to test [phi:main::@9->test] // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -1147,7 +1147,7 @@ main: { // [23] phi from main::@10 to test [phi:main::@10->test] // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test diff --git a/src/test/ref/atarixl-md5b.log b/src/test/ref/atarixl-md5b.log index 281f695b8..f8b947650 100644 --- a/src/test/ref/atarixl-md5b.log +++ b/src/test/ref/atarixl-md5b.log @@ -903,7 +903,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [6] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -940,7 +940,7 @@ main: { // main::@3 __b3: // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near + // [14] phi from main::@3 to md5 [phi:main::@3->md5] md5_from___b3: jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] @@ -1012,7 +1012,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy jsr print jmp __b5 // md5::@5 @@ -1049,7 +1049,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy jsr print jmp __b6 // md5::@6 @@ -1400,7 +1400,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [6] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return @@ -1431,7 +1431,7 @@ main: { // main::@3 // md5() // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near + // [14] phi from main::@3 to md5 [phi:main::@3->md5] jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] // main::@4 @@ -1498,7 +1498,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy jsr print // md5::@5 // i&1 @@ -1530,7 +1530,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy jsr print // md5::@6 // for(char i = 0; i<4; i++) diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 9cda2ff11..68efa05eb 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1318,7 +1318,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -1339,7 +1339,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -1390,7 +1390,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle -- call_phi_near + // [11] call circle jsr circle jmp __b6 // main::@6 @@ -1584,7 +1584,7 @@ circle: { // [60] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot jmp __b6 // circle::@6 @@ -1609,7 +1609,7 @@ circle: { // [60] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot jmp __b7 // circle::@7 @@ -1634,7 +1634,7 @@ circle: { // [60] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot jmp __b8 // circle::@8 @@ -1659,7 +1659,7 @@ circle: { // [60] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot jmp __b9 // circle::@9 @@ -1684,7 +1684,7 @@ circle: { // [60] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot jmp __b10 // circle::@10 @@ -1709,7 +1709,7 @@ circle: { // [60] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot jmp __b11 // circle::@11 @@ -1734,7 +1734,7 @@ circle: { // [60] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot jmp __b12 // circle::@12 @@ -1759,7 +1759,7 @@ circle: { // [60] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot jmp __b13 // circle::@13 @@ -2189,7 +2189,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -2207,7 +2207,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -2256,7 +2256,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle -- call_phi_near + // [11] call circle jsr circle // main::@6 // i += 5 @@ -2450,7 +2450,7 @@ circle: { // [34] call plot // [60] phi from circle::@4 to plot [phi:circle::@4->plot] // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2473,7 +2473,7 @@ circle: { // [37] call plot // [60] phi from circle::@6 to plot [phi:circle::@6->plot] // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2496,7 +2496,7 @@ circle: { // [40] call plot // [60] phi from circle::@7 to plot [phi:circle::@7->plot] // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2519,7 +2519,7 @@ circle: { // [43] call plot // [60] phi from circle::@8 to plot [phi:circle::@8->plot] // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2542,7 +2542,7 @@ circle: { // [46] call plot // [60] phi from circle::@9 to plot [phi:circle::@9->plot] // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2565,7 +2565,7 @@ circle: { // [49] call plot // [60] phi from circle::@10 to plot [phi:circle::@10->plot] // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2588,7 +2588,7 @@ circle: { // [52] call plot // [60] phi from circle::@11 to plot [phi:circle::@11->plot] // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2611,7 +2611,7 @@ circle: { // [55] call plot // [60] phi from circle::@12 to plot [phi:circle::@12->plot] // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index ce278821e..0e5befc1a 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1192,7 +1192,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -1213,7 +1213,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -1232,7 +1232,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near + // [16] phi from main::@3 to circle [phi:main::@3->circle] circle_from___b3: jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -1411,7 +1411,7 @@ circle: { // [55] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot jmp __b6 // circle::@6 @@ -1436,7 +1436,7 @@ circle: { // [55] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot jmp __b7 // circle::@7 @@ -1461,7 +1461,7 @@ circle: { // [55] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot jmp __b8 // circle::@8 @@ -1486,7 +1486,7 @@ circle: { // [55] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot jmp __b9 // circle::@9 @@ -1511,7 +1511,7 @@ circle: { // [55] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot jmp __b10 // circle::@10 @@ -1536,7 +1536,7 @@ circle: { // [55] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot jmp __b11 // circle::@11 @@ -1561,7 +1561,7 @@ circle: { // [55] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot jmp __b12 // circle::@12 @@ -1586,7 +1586,7 @@ circle: { // [55] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot jmp __b13 // circle::@13 @@ -1955,7 +1955,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -1973,7 +1973,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -1994,7 +1994,7 @@ main: { sta VICII_MEMORY // circle(100,100,50) // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near + // [16] phi from main::@3 to circle [phi:main::@3->circle] jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 @@ -2169,7 +2169,7 @@ circle: { // [29] call plot // [55] phi from circle::@4 to plot [phi:circle::@4->plot] // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2192,7 +2192,7 @@ circle: { // [32] call plot // [55] phi from circle::@6 to plot [phi:circle::@6->plot] // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2215,7 +2215,7 @@ circle: { // [35] call plot // [55] phi from circle::@7 to plot [phi:circle::@7->plot] // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2238,7 +2238,7 @@ circle: { // [38] call plot // [55] phi from circle::@8 to plot [phi:circle::@8->plot] // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2261,7 +2261,7 @@ circle: { // [41] call plot // [55] phi from circle::@9 to plot [phi:circle::@9->plot] // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2284,7 +2284,7 @@ circle: { // [44] call plot // [55] phi from circle::@10 to plot [phi:circle::@10->plot] // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2307,7 +2307,7 @@ circle: { // [47] call plot // [55] phi from circle::@11 to plot [phi:circle::@11->plot] // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2330,7 +2330,7 @@ circle: { // [50] call plot // [55] phi from circle::@12 to plot [phi:circle::@12->plot] // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index ec14390c3..a9ee08268 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -2327,7 +2327,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [13] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2336,7 +2336,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2345,7 +2345,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] init_screen_from___b3: jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2361,7 +2361,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line -- call_phi_near + // [11] call bitmap_line jsr bitmap_line jmp __b4 // main::@4 @@ -2501,7 +2501,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2522,7 +2522,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2599,7 +2599,7 @@ bitmap_line: { // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2613,7 +2613,7 @@ bitmap_line: { // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2646,7 +2646,7 @@ bitmap_line: { // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [57] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2660,7 +2660,7 @@ bitmap_line: { // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2720,7 +2720,7 @@ bitmap_line: { // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2799,7 +2799,7 @@ bitmap_line: { // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2845,7 +2845,7 @@ bitmap_line: { // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2923,7 +2923,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot jmp __breturn @@ -3494,19 +3494,19 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [13] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [9] phi next#5 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -3520,7 +3520,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line -- call_phi_near + // [11] call bitmap_line jsr bitmap_line // main::@4 // next++; @@ -3650,7 +3650,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3668,7 +3668,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3743,7 +3743,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3756,7 +3756,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3788,7 +3788,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [57] sgn_u16::return#0 = sgn_u16::return#4 @@ -3801,7 +3801,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3856,7 +3856,7 @@ bitmap_line: { // [67] call bitmap_plot // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3930,7 +3930,7 @@ bitmap_line: { // [78] call bitmap_plot // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -3972,7 +3972,7 @@ bitmap_line: { // [84] call bitmap_plot // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4046,7 +4046,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index cbb073377..4a8593ac2 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -2293,7 +2293,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [14] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] @@ -2302,7 +2302,7 @@ main: { // main::@3 __b3: // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] bitmap_clear_from___b3: jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2316,7 +2316,7 @@ main: { // main::@1 __b1: // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line -- call_phi_near + // [9] call bitmap_line jsr bitmap_line jmp __b4 // main::@4 @@ -2485,7 +2485,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2506,7 +2506,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2542,7 +2542,7 @@ bitmap_line: { // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [43] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2556,7 +2556,7 @@ bitmap_line: { // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2589,7 +2589,7 @@ bitmap_line: { // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [52] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2603,7 +2603,7 @@ bitmap_line: { // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2663,7 +2663,7 @@ bitmap_line: { // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2742,7 +2742,7 @@ bitmap_line: { // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2788,7 +2788,7 @@ bitmap_line: { // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2866,7 +2866,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot jmp __breturn @@ -3443,13 +3443,13 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [14] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // bitmap_clear(PURPLE, WHITE) // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [7] phi next#6 = 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 @@ -3460,7 +3460,7 @@ main: { __b1: // bitmap_line(0,0,next,100) // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line -- call_phi_near + // [9] call bitmap_line jsr bitmap_line // main::@4 // next++; @@ -3611,7 +3611,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3629,7 +3629,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3664,7 +3664,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [43] abs_u16::return#0 = abs_u16::return#4 @@ -3677,7 +3677,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3709,7 +3709,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [52] sgn_u16::return#0 = sgn_u16::return#4 @@ -3722,7 +3722,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3777,7 +3777,7 @@ bitmap_line: { // [62] call bitmap_plot // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3851,7 +3851,7 @@ bitmap_line: { // [73] call bitmap_plot // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -3893,7 +3893,7 @@ bitmap_line: { // [79] call bitmap_plot // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -3967,7 +3967,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 6436ef53c..656e0bd4e 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1730,7 +1730,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1782,7 +1782,7 @@ main: { .label vx = $a .label vy = 9 // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [34] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] @@ -1791,7 +1791,7 @@ main: { // main::@8 __b8: // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] bitmap_clear_from___b8: jsr bitmap_clear jmp __b9 @@ -1811,7 +1811,7 @@ main: { // [17] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [18] call init_irq -- call_phi_near + // [18] call init_irq jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: @@ -1840,7 +1840,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot -- call_phi_near + // [22] call bitmap_plot jsr bitmap_plot jmp __b10 // main::@10 @@ -2056,7 +2056,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2077,7 +2077,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2562,7 +2562,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -2613,13 +2613,13 @@ main: { .label vy = 9 // bitmap_init(BITMAP, SCREEN) // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [34] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] // main::@8 // bitmap_clear(BLACK, WHITE) // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] jsr bitmap_clear // main::@9 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -2634,7 +2634,7 @@ main: { lda #toD0181_return sta D018 // init_irq() - // [18] call init_irq -- call_phi_near + // [18] call init_irq jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] // [19] phi main::vy#2 = 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 @@ -2656,7 +2656,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot -- call_phi_near + // [22] call bitmap_plot jsr bitmap_plot // main::@10 // x += vx @@ -2856,7 +2856,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2874,7 +2874,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index 4b3924927..fbdff3656 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -2524,7 +2524,7 @@ main: { .label a = $1c .label i = $1b // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [19] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2533,7 +2533,7 @@ main: { // main::@5 __b5: // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] bitmap_clear_from___b5: jsr bitmap_clear jmp __b6 @@ -2616,7 +2616,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line -- call_phi_near + // [16] call bitmap_line jsr bitmap_line jmp __b7 // main::@7 @@ -2761,7 +2761,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2782,7 +2782,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2821,7 +2821,7 @@ bitmap_line: { // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2843,7 +2843,7 @@ bitmap_line: { // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // [52] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2875,7 +2875,7 @@ bitmap_line: { // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [58] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2897,7 +2897,7 @@ bitmap_line: { // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // [62] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2940,7 +2940,7 @@ bitmap_line: { // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -3019,7 +3019,7 @@ bitmap_line: { // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -3052,7 +3052,7 @@ bitmap_line: { // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3126,7 +3126,7 @@ bitmap_line: { // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn } @@ -3699,13 +3699,13 @@ main: { .label i = $1b // bitmap_init(BITMAP, SCREEN) // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [19] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // bitmap_clear(BLACK, WHITE) // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] jsr bitmap_clear // main::@6 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -3783,7 +3783,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line -- call_phi_near + // [16] call bitmap_line jsr bitmap_line // main::@7 // a+=32 @@ -3919,7 +3919,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3937,7 +3937,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3975,7 +3975,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [52] abs_u16::return#1 = abs_u16::return#4 @@ -4027,7 +4027,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [58] sgn_u16::return#0 = sgn_u16::return#4 @@ -4048,7 +4048,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [62] sgn_u16::return#1 = sgn_u16::return#4 @@ -4087,7 +4087,7 @@ bitmap_line: { // [69] call bitmap_plot // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4161,7 +4161,7 @@ bitmap_line: { // [80] call bitmap_plot // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -4191,7 +4191,7 @@ bitmap_line: { // [86] call bitmap_plot // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4263,7 +4263,7 @@ bitmap_line: { // [96] call bitmap_plot // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot rts } diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index dafc94580..ba502c020 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -980,7 +980,7 @@ main: { lda #SCREEN/$40|BITMAP/$400 sta D018 // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [11] phi from main to init_screen [phi:main->init_screen] init_screen_from_main: jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] @@ -989,7 +989,7 @@ main: { // main::@3 __b3: // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] init_plot_tables_from___b3: jsr init_plot_tables jmp __b1 @@ -1005,7 +1005,7 @@ main: { // [8] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near + // [46] phi from main::@2 to plots [phi:main::@2->plots] plots_from___b2: jsr plots jmp __b4 @@ -1234,7 +1234,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot -- call_phi_near + // [52] call plot jsr plot jmp __b3 // plots::@3 @@ -1511,13 +1511,13 @@ main: { sta D018 // init_screen() // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [11] phi from main to init_screen [phi:main->init_screen] jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // init_plot_tables() // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] jsr init_plot_tables // main::@1 __b1: @@ -1532,7 +1532,7 @@ main: { inc BG_COLOR // plots() // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near + // [46] phi from main::@2 to plots [phi:main::@2->plots] jsr plots // main::@4 // (*BG_COLOR)--; @@ -1751,7 +1751,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot -- call_phi_near + // [52] call plot jsr plot // plots::@3 // for(byte i=0; ibool_const_if] -- call_phi_near + // [7] phi from main to bool_const_if [phi:main->bool_const_if] bool_const_if_from_main: jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] @@ -377,7 +377,7 @@ main: { // main::@1 __b1: // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] bool_const_vars_from___b1: jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -386,7 +386,7 @@ main: { // main::@2 __b2: // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] bool_const_inline_from___b2: jsr bool_const_inline jmp __breturn @@ -503,19 +503,19 @@ Score: 60 main: { // bool_const_if() // [1] call bool_const_if - // [7] phi from main to bool_const_if [phi:main->bool_const_if] -- call_phi_near + // [7] phi from main to bool_const_if [phi:main->bool_const_if] jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_const_vars() // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_const_inline() // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] jsr bool_const_inline // main::@return // } diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index 4e2a534ae..9eefa4f55 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -325,7 +325,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet -- call_phi_near + // [5] call isSet jsr isSet // [6] isSet::return#0 = isSet::return#1 jmp __b5 @@ -474,7 +474,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet -- call_phi_near + // [5] call isSet jsr isSet // [6] isSet::return#0 = isSet::return#1 // main::@5 diff --git a/src/test/ref/bool-ifs.log b/src/test/ref/bool-ifs.log index 85068d2b7..93674d607 100644 --- a/src/test/ref/bool-ifs.log +++ b/src/test/ref/bool-ifs.log @@ -655,7 +655,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -664,7 +664,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -673,7 +673,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -682,7 +682,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1040,25 +1040,25 @@ Score: 1684 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] jsr bool_complex // main::@return // } diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index df8e0e9a3..afc8566b2 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -689,7 +689,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -698,7 +698,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -707,7 +707,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -716,7 +716,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1102,25 +1102,25 @@ Score: 1899 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] jsr bool_complex // main::@return // } diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index aae73a3d4..cdea0bfb0 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -2212,7 +2212,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2221,7 +2221,7 @@ main: { // main::@1 __b1: // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] testChar_from___b1: jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2229,21 +2229,21 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call testShort -- call_phi_near + // [5] call testShort jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testInt -- call_phi_near + // [7] call testInt jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [9] call testLong -- call_phi_near + // [9] call testLong jsr testLong jmp __breturn // main::@return @@ -2255,7 +2255,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -2277,7 +2277,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2292,7 +2292,7 @@ testChar: { // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -2304,7 +2304,7 @@ testChar: { // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -2316,7 +2316,7 @@ testChar: { // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] print_uchar_from___b3: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -2328,7 +2328,7 @@ testChar: { // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] @@ -2337,7 +2337,7 @@ testChar: { // testChar::@5 __b5: // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] print_schar_from___b5: jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] @@ -2348,7 +2348,7 @@ testChar: { // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -2378,7 +2378,7 @@ testShort: { // [80] phi from testShort to print_str [phi:testShort->print_str] print_str_from_testShort: // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2393,7 +2393,7 @@ testShort: { // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -2408,7 +2408,7 @@ testShort: { // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -2419,7 +2419,7 @@ testShort: { // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -2434,7 +2434,7 @@ testShort: { // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -2445,7 +2445,7 @@ testShort: { // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -2459,7 +2459,7 @@ testShort: { // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // testShort::@return @@ -2485,7 +2485,7 @@ testInt: { // [80] phi from testInt to print_str [phi:testInt->print_str] print_str_from_testInt: // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2500,7 +2500,7 @@ testInt: { // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -2515,7 +2515,7 @@ testInt: { // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -2526,7 +2526,7 @@ testInt: { // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -2541,7 +2541,7 @@ testInt: { // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -2552,7 +2552,7 @@ testInt: { // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -2566,7 +2566,7 @@ testInt: { // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // testInt::@return @@ -2592,7 +2592,7 @@ testLong: { // [80] phi from testLong to print_str [phi:testLong->print_str] print_str_from_testLong: // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2607,7 +2607,7 @@ testLong: { // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] print_ulong_from___b1: // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 lda #u @@ -2626,7 +2626,7 @@ testLong: { // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -2637,7 +2637,7 @@ testLong: { // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] print_slong_from___b3: - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 lda #n @@ -2656,7 +2656,7 @@ testLong: { // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -2667,7 +2667,7 @@ testLong: { // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] print_slong_from___b5: - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 lda #s @@ -2685,7 +2685,7 @@ testLong: { // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // testLong::@return @@ -2776,7 +2776,7 @@ print_str: { // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2806,7 +2806,7 @@ print_uchar: { // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2820,7 +2820,7 @@ print_uchar: { // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2860,7 +2860,7 @@ print_schar: { // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -2872,7 +2872,7 @@ print_schar: { // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 ldx #b jsr print_uchar jmp __breturn @@ -2925,7 +2925,7 @@ print_uint: { // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2961,7 +2961,7 @@ print_sint: { // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2976,7 +2976,7 @@ print_sint: { // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] print_uint_from___b2: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_sint::@return @@ -2992,7 +2992,7 @@ print_sint: { // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -3022,7 +3022,7 @@ print_ulong: { // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 @@ -3036,7 +3036,7 @@ print_ulong: { // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return @@ -3061,7 +3061,7 @@ print_slong: { // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -3076,7 +3076,7 @@ print_slong: { // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] print_ulong_from___b2: // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy jsr print_ulong jmp __breturn // print_slong::@return @@ -3092,7 +3092,7 @@ print_slong: { // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -3473,28 +3473,28 @@ Score: 2013 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testChar() // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testShort() - // [5] call testShort -- call_phi_near + // [5] call testShort jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testInt() - // [7] call testInt -- call_phi_near + // [7] call testInt jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testLong() - // [9] call testLong -- call_phi_near + // [9] call testLong jsr testLong // main::@return // } @@ -3506,7 +3506,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -3526,7 +3526,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3538,7 +3538,7 @@ testChar: { // [17] call print_uchar // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -3547,7 +3547,7 @@ testChar: { // [19] call print_char // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -3556,7 +3556,7 @@ testChar: { // [21] call print_uchar // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -3565,21 +3565,21 @@ testChar: { // [23] call print_char // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] // testChar::@5 // print_schar(s) // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] // testChar::@6 // print_ln() // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -3608,7 +3608,7 @@ testShort: { // [30] call print_str // [80] phi from testShort to print_str [phi:testShort->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3620,7 +3620,7 @@ testShort: { // [32] call print_uint // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -3632,7 +3632,7 @@ testShort: { // [34] call print_char // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -3640,7 +3640,7 @@ testShort: { // print_sint(n) // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -3652,7 +3652,7 @@ testShort: { // [38] call print_char // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -3660,7 +3660,7 @@ testShort: { // print_sint(s) // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -3671,7 +3671,7 @@ testShort: { // print_ln() // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy jsr print_ln // testShort::@return // } @@ -3696,7 +3696,7 @@ testInt: { // [45] call print_str // [80] phi from testInt to print_str [phi:testInt->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3708,7 +3708,7 @@ testInt: { // [47] call print_uint // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -3720,7 +3720,7 @@ testInt: { // [49] call print_char // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -3728,7 +3728,7 @@ testInt: { // print_sint(n) // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -3740,7 +3740,7 @@ testInt: { // [53] call print_char // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -3748,7 +3748,7 @@ testInt: { // print_sint(s) // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -3759,7 +3759,7 @@ testInt: { // print_ln() // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy jsr print_ln // testInt::@return // } @@ -3784,7 +3784,7 @@ testLong: { // [60] call print_str // [80] phi from testLong to print_str [phi:testLong->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3796,7 +3796,7 @@ testLong: { // [62] call print_ulong // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 lda #u @@ -3812,7 +3812,7 @@ testLong: { // [64] call print_char // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -3820,7 +3820,7 @@ testLong: { // print_slong(n) // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 lda #n @@ -3836,7 +3836,7 @@ testLong: { // [68] call print_char // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -3844,7 +3844,7 @@ testLong: { // print_slong(s) // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 lda #s @@ -3859,7 +3859,7 @@ testLong: { // print_ln() // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy jsr print_ln // testLong::@return // } @@ -3945,7 +3945,7 @@ print_str: { // [85] call print_char // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3975,7 +3975,7 @@ print_uchar: { // Table of hexadecimal digits // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3988,7 +3988,7 @@ print_uchar: { // [93] call print_char // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } @@ -4025,7 +4025,7 @@ print_schar: { // [101] call print_char // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -4034,7 +4034,7 @@ print_schar: { // [103] call print_uchar // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 ldx #b jsr print_uchar // print_schar::@return @@ -4084,7 +4084,7 @@ print_uint: { // [112] call print_uchar // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4093,7 +4093,7 @@ print_uint: { // [114] call print_uchar // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4115,7 +4115,7 @@ print_sint: { // [119] call print_char // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4127,7 +4127,7 @@ print_sint: { // [122] call print_uint // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy jsr print_uint // print_sint::@return // } @@ -4140,7 +4140,7 @@ print_sint: { // [125] call print_char // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -4169,7 +4169,7 @@ print_ulong: { // [129] call print_uint // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -4181,7 +4181,7 @@ print_ulong: { // [131] call print_uint // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } @@ -4203,7 +4203,7 @@ print_slong: { // [136] call print_char // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -4215,7 +4215,7 @@ print_slong: { // [139] call print_ulong // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy jsr print_ulong // print_slong::@return // } @@ -4228,7 +4228,7 @@ print_slong: { // [142] call print_char // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_slong::@4 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index f7b3c6de1..9e674183c 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1380,7 +1380,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near + // [40] phi from main to gfx_init [phi:main->gfx_init] gfx_init_from_main: jsr gfx_init jmp __b6 @@ -1592,7 +1592,7 @@ main: { // Initialize the different graphics in the memory gfx_init: { // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] gfx_init_screen0_from_gfx_init: jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] @@ -1601,7 +1601,7 @@ gfx_init: { // gfx_init::@1 __b1: // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] gfx_init_plane_charset8_from___b1: jsr gfx_init_plane_charset8 jmp __breturn @@ -1703,7 +1703,7 @@ gfx_init_plane_charset8: { // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_plane_charset8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 jmp __b9 @@ -1850,7 +1850,7 @@ gfx_init_plane_charset8: { // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -2224,7 +2224,7 @@ main: { sta.z PROCPORT // gfx_init() // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near + // [40] phi from main to gfx_init [phi:main->gfx_init] jsr gfx_init // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -2454,13 +2454,13 @@ main: { gfx_init: { // gfx_init_screen0() // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] // gfx_init::@1 // gfx_init_plane_charset8() // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] jsr gfx_init_plane_charset8 // gfx_init::@return // } @@ -2557,7 +2557,7 @@ gfx_init_plane_charset8: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@9 @@ -2691,7 +2691,7 @@ gfx_init_plane_charset8: { // [82] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 5f14475bb..932a1908c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -911,7 +911,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] gfx_init_chunky_from_main: jsr gfx_init_chunky jmp __b6 @@ -1110,7 +1110,7 @@ gfx_init_chunky: { // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_chunky: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1167,7 +1167,7 @@ gfx_init_chunky: { // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b4: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy jsr dtvSetCpuBankSegment1 jmp __b7 // gfx_init_chunky::@7 @@ -1238,7 +1238,7 @@ gfx_init_chunky: { // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b6: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -1530,7 +1530,7 @@ main: { sta.z PROCPORT // gfx_init_chunky() // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] jsr gfx_init_chunky // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -1744,7 +1744,7 @@ gfx_init_chunky: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1791,7 +1791,7 @@ gfx_init_chunky: { txa // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@7 // dtvSetCpuBankSegment1(gfxbCpuBank++); @@ -1858,7 +1858,7 @@ gfx_init_chunky: { // [52] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@return diff --git a/src/test/ref/call-banked-phi-case-1-near-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log index 32bf16c0b..6cc252f0c 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -204,7 +204,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] plus_from_main: jsr plus jmp __b1 @@ -309,7 +309,7 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] jsr plus // main::@1 // SCREEN[0] = plus('0', 7) diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log index ff7923bbf..6d479c599 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.log +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -273,7 +273,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] plus_from_main: jsr plus jmp __b1 @@ -294,7 +294,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -398,7 +398,7 @@ Score: 36 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] jsr plus // main::@1 // SCREEN[0] = plus('0', 7) @@ -417,7 +417,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index f867223cc..992a24726 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 8d78e1673..2fb184a72 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -230,7 +230,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 @@ -341,7 +341,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index 3074c08e3..937d2243f 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 3ac501458..3738f423b 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -230,7 +230,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 @@ -341,7 +341,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index 135a22afc..36effde7d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index e5e80a97d..7b0249d61 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -431,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index 39b32a2d9..dc45fa7ff 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -69,7 +69,6 @@ plus: { } .segment Code // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 3a2aea220..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index ee40560bd..6409550db 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,7 +199,7 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -316,7 +316,6 @@ plus: { .segment Code // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -344,7 +343,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return @@ -432,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } @@ -448,7 +447,6 @@ plus: { .segment Code // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 09b563343..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index 9eda4af17..d9e6ece5d 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -68,7 +68,7 @@ plus: { rts } // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 8fff4dd12..c5c7e65c3 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -315,7 +315,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -431,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } @@ -446,7 +446,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index 7a009fb12..961e21569 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -68,7 +68,7 @@ plus: { rts } // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 355d2d82c..fd0d233ce 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -315,7 +315,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -431,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } @@ -446,7 +446,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index f492f49fe..d4144fb7c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -72,7 +72,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index c7fde5e3d..b4699672c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -299,7 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -319,7 +319,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b jmp __breturn @@ -435,7 +435,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -454,7 +454,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index 002273c5d..3f168055b 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -72,7 +72,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index d8beab3fb..0be8f5ff7 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -299,7 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -319,7 +319,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b jmp __breturn @@ -435,7 +435,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -454,7 +454,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index bed31d08c..32a709284 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -75,7 +75,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index 8dd9b182a..d18801d0d 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -300,7 +300,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -323,7 +323,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -439,7 +439,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -461,7 +461,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index b924a7a81..15769f0b8 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -75,7 +75,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 4228f15f1..ffe2cc66e 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -300,7 +300,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -323,7 +323,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -439,7 +439,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -461,7 +461,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index 51c9246e2..c86f830af 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -261,7 +261,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -277,7 +277,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -292,7 +292,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print jmp __breturn // main::@return @@ -386,7 +386,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -399,7 +399,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -411,7 +411,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index ae33a22d0..f93f9d39a 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -307,7 +307,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near + // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -322,7 +322,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 ldx #3 jsr line jmp __breturn @@ -438,7 +438,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near + // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -450,7 +450,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 ldx #3 jsr line // main::@return diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log index 1ec60bd76..cfa761d3c 100644 --- a/src/test/ref/casting-negative.log +++ b/src/test/ref/casting-negative.log @@ -3802,7 +3802,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3810,7 +3810,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -3846,7 +3846,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3887,7 +3887,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -3899,7 +3899,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -3907,7 +3907,7 @@ cputc: { main: { .label signed_char_value = $17 // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [55] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3939,7 +3939,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting -- call_phi_near + // [34] call test_casting jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -4069,7 +4069,7 @@ cputln: { sta.z conio_cursor_x // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [53] call cscroll -- call_phi_near + // [53] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4183,7 +4183,7 @@ clrscr: { test_casting: { .label signed_short_value = 4 // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint -- call_phi_near + // [72] call printf_sint jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] __b1_from_test_casting: @@ -4198,7 +4198,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4234,7 +4234,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4253,7 +4253,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4269,7 +4269,7 @@ cscroll: { memset_from___b3: // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4285,7 +4285,7 @@ cscroll: { memset_from___b4: // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4354,7 +4354,7 @@ printf_sint: { __b2: // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: jsr utoa jmp __b3 @@ -4364,7 +4364,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -4630,7 +4630,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [144] utoa_append::return#0 = utoa_append::value#2 @@ -4686,7 +4686,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -5199,12 +5199,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -5233,7 +5233,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -5272,7 +5272,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -5283,7 +5283,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -5292,7 +5292,7 @@ main: { .label signed_char_value = $17 // clrscr() // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [55] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::signed_char_value#2 = -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 @@ -5323,7 +5323,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting -- call_phi_near + // [34] call test_casting jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [29] phi main::signed_char_value#2 = main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy @@ -5455,7 +5455,7 @@ cputln: { // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [53] call cscroll -- call_phi_near + // [53] call cscroll jsr cscroll // cputln::@return // } @@ -5570,7 +5570,7 @@ test_casting: { .label signed_short_value = 4 // printf("%d\n", signed_short_value) // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint -- call_phi_near + // [72] call printf_sint jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] // test_casting::@1 @@ -5582,7 +5582,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5615,7 +5615,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5631,7 +5631,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5644,7 +5644,7 @@ cscroll: { // [118] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5657,7 +5657,7 @@ cscroll: { // [118] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5729,7 +5729,7 @@ printf_sint: { // utoa(uvalue, printf_buffer.digits, format.radix) // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] jsr utoa // printf_sint::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -5737,7 +5737,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] jsr printf_number_buffer // printf_sint::@return // } @@ -5993,7 +5993,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [144] utoa_append::return#0 = utoa_append::value#2 @@ -6043,7 +6043,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index 0e79411dd..83d5fabb2 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -413,7 +413,7 @@ main: { // main::@2 __b2: // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near + // [11] phi from main::@2 to w [phi:main::@2->w] w_from___b2: jsr w jmp __breturn @@ -577,7 +577,7 @@ main: { // main::@2 // w() // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near + // [11] phi from main::@2 to w [phi:main::@2->w] jsr w // main::@return // } diff --git a/src/test/ref/cbm-keyboard.log b/src/test/ref/cbm-keyboard.log index 07b7d51e5..0ffec3780 100644 --- a/src/test/ref/cbm-keyboard.log +++ b/src/test/ref/cbm-keyboard.log @@ -4473,7 +4473,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -4481,7 +4481,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -4517,7 +4517,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4558,7 +4558,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -4570,7 +4570,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -4593,7 +4593,7 @@ main: { lda #toD0181_return sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] clrscr_from___b3: jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -4609,7 +4609,7 @@ main: { jmp __b1 // main::@1 __b1: - // [32] call GETIN -- call_phi_near + // [32] call GETIN jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 jmp __b4 @@ -4634,7 +4634,7 @@ main: { __b2: // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode -- call_phi_near + // [38] call petscii_to_screencode jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 jmp __b5 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4674,7 +4674,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4686,7 +4686,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] printf_uchar_from___b7: jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -4702,7 +4702,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4847,7 +4847,7 @@ cputln: { sta.z conio_cursor_x // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [69] call cscroll -- call_phi_near + // [69] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -5115,7 +5115,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 @@ -5126,7 +5126,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -5155,7 +5155,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5174,7 +5174,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5190,7 +5190,7 @@ cscroll: { memset_from___b3: // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5206,7 +5206,7 @@ cscroll: { memset_from___b4: // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5332,7 +5332,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -5368,7 +5368,7 @@ printf_number_buffer: { // printf_number_buffer::@4 __b4: // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] strlen_from___b4: jsr strlen // [154] strlen::return#2 = strlen::len#2 @@ -5430,7 +5430,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] printf_padding_from___b6: jsr printf_padding jmp __b2 @@ -5463,7 +5463,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -6310,12 +6310,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -6344,7 +6344,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -6383,7 +6383,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -6394,7 +6394,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -6414,7 +6414,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // clrscr() // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [31] phi main::current#2 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -6425,7 +6425,7 @@ main: { // main::@1 __b1: // char ch = GETIN() - // [32] call GETIN -- call_phi_near + // [32] call GETIN jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 // main::@4 @@ -6445,7 +6445,7 @@ main: { // petscii_to_screencode(ch) // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode -- call_phi_near + // [38] call petscii_to_screencode jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 // main::@5 @@ -6459,7 +6459,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -6481,7 +6481,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -6492,7 +6492,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -6504,7 +6504,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -6650,7 +6650,7 @@ cputln: { // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [69] call cscroll -- call_phi_near + // [69] call cscroll jsr cscroll // cputln::@return // } @@ -6910,7 +6910,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6919,7 +6919,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] jsr printf_number_buffer // printf_uchar::@return // } @@ -6944,7 +6944,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -6960,7 +6960,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -6973,7 +6973,7 @@ cscroll: { // [184] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6986,7 +6986,7 @@ cscroll: { // [184] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -7110,7 +7110,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -7143,7 +7143,7 @@ printf_number_buffer: { // printf_number_buffer::@4 // strlen(buffer.digits) // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] jsr strlen // strlen(buffer.digits) // [154] strlen::return#2 = strlen::len#2 @@ -7196,7 +7196,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7223,7 +7223,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index 825e359ca..d0f1acec5 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -694,7 +694,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call clock_start -- call_phi_near + // [2] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start jmp __b2 @@ -702,7 +702,7 @@ main: { __b2: // asm { nop } nop - // [4] call clock -- call_phi_near + // [4] call clock jsr clock // [5] clock::return#2 = clock::return#0 jmp __b3 @@ -725,7 +725,7 @@ main: { sbc #>CLOCKS_PER_INIT>>$10 sta.z cyclecount+3 // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at -- call_phi_near + // [9] call print_ulong_at // Print cycle count jsr print_ulong_at jmp __b1_from___b3 @@ -813,7 +813,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -831,7 +831,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -853,7 +853,7 @@ print_uint_at: { // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -873,7 +873,7 @@ print_uint_at: { // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -906,7 +906,7 @@ print_uchar_at: { // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -929,7 +929,7 @@ print_uchar_at: { // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1097,7 +1097,7 @@ main: { // main::@1 __b1: // clock_start() - // [2] call clock_start -- call_phi_near + // [2] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start // main::@2 @@ -1105,7 +1105,7 @@ main: { // asm { nop } nop // clock() - // [4] call clock -- call_phi_near + // [4] call clock jsr clock // [5] clock::return#2 = clock::return#0 // main::@3 @@ -1128,7 +1128,7 @@ main: { sta.z cyclecount+3 // print_ulong_at(cyclecount, SCREEN) // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at -- call_phi_near + // [9] call print_ulong_at // Print cycle count jsr print_ulong_at jmp __b1 @@ -1222,7 +1222,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1238,7 +1238,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@return // } @@ -1259,7 +1259,7 @@ print_uint_at: { // [28] call print_uchar_at // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1277,7 +1277,7 @@ print_uint_at: { // [31] call print_uchar_at // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@return // } @@ -1310,7 +1310,7 @@ print_uchar_at: { // Table of hexadecimal digits // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1332,7 +1332,7 @@ print_uchar_at: { // [41] call print_char_at // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index cc00daf4c..eff475044 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -657,7 +657,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call clock_start -- call_phi_near + // [1] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -666,14 +666,14 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call clock -- call_phi_near + // [3] call clock jsr clock // [4] clock::return#2 = clock::return#0 jmp __b2 // main::@2 __b2: // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at -- call_phi_near + // [6] call print_ulong_at jsr print_ulong_at jmp __b1_from___b2 } @@ -760,7 +760,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -778,7 +778,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -800,7 +800,7 @@ print_uint_at: { // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -820,7 +820,7 @@ print_uint_at: { // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -853,7 +853,7 @@ print_uchar_at: { // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -876,7 +876,7 @@ print_uchar_at: { // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1030,20 +1030,20 @@ Score: 467 // main main: { // clock_start() - // [1] call clock_start -- call_phi_near + // [1] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // clock() - // [3] call clock -- call_phi_near + // [3] call clock jsr clock // [4] clock::return#2 = clock::return#0 // main::@2 // print_ulong_at(clock(), SCREEN) // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at -- call_phi_near + // [6] call print_ulong_at jsr print_ulong_at jmp __b1 } @@ -1136,7 +1136,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1152,7 +1152,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@return // } @@ -1173,7 +1173,7 @@ print_uint_at: { // [25] call print_uchar_at // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1191,7 +1191,7 @@ print_uint_at: { // [28] call print_uchar_at // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@return // } @@ -1224,7 +1224,7 @@ print_uchar_at: { // Table of hexadecimal digits // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1246,7 +1246,7 @@ print_uchar_at: { // [38] call print_char_at // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index d30d271a5..e5d4baccd 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -236,7 +236,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -383,7 +383,7 @@ __start: { sta.z irq_raster_next // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/complex/includes/includes-1.log b/src/test/ref/complex/includes/includes-1.log index e9853d55d..f9b16c089 100644 --- a/src/test/ref/complex/includes/includes-1.log +++ b/src/test/ref/complex/includes/includes-1.log @@ -235,7 +235,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = 4 // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [6] phi from main to strlen [phi:main->strlen] strlen_from_main: jsr strlen // [2] strlen::return#2 = strlen::len#2 @@ -364,7 +364,7 @@ main: { .label __0 = 4 // strlen(STR) // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [6] phi from main to strlen [phi:main->strlen] jsr strlen // strlen(STR) // [2] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/complex/includes/includes-2.log b/src/test/ref/complex/includes/includes-2.log index 51cbad9f1..ba9264981 100644 --- a/src/test/ref/complex/includes/includes-2.log +++ b/src/test/ref/complex/includes/includes-2.log @@ -164,7 +164,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [4] phi from main to strlen [phi:main->strlen] strlen_from_main: jsr strlen jmp __b1 @@ -234,7 +234,7 @@ Score: 24 main: { // strlen(STR) // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [4] phi from main to strlen [phi:main->strlen] jsr strlen // main::@1 // SCREEN [0] = (char) strlen(STR) diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 82f78053f..0610788ff 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -569,7 +569,7 @@ main: { memset_from_main: // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -585,7 +585,7 @@ main: { memset_from___b6: // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -866,7 +866,7 @@ main: { // [17] phi from main to memset [phi:main->memset] // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -879,7 +879,7 @@ main: { // [17] phi from main::@6 to memset [phi:main::@6->memset] // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 lda #COLS diff --git a/src/test/ref/const-bool-return-problem.log b/src/test/ref/const-bool-return-problem.log index 8825ee589..0c1be65c9 100644 --- a/src/test/ref/const-bool-return-problem.log +++ b/src/test/ref/const-bool-return-problem.log @@ -420,7 +420,7 @@ main: { __b3: // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid -- call_phi_near + // [8] call OBJ_is_solid jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 jmp __b7 @@ -467,7 +467,7 @@ OBJ_is_solid: { // OBJ_is_solid::@1 __b1: // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] tile_flag_at_from___b1: jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] @@ -612,7 +612,7 @@ main: { // OBJ_is_solid(ox,oy) // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid -- call_phi_near + // [8] call OBJ_is_solid jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 // main::@7 @@ -657,7 +657,7 @@ OBJ_is_solid: { __b1: // tile_flag_at() // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] // [17] phi OBJ_is_solid::return#3 = tile_flag_at::return#1 [phi:OBJ_is_solid::@1->OBJ_is_solid::@return#0] -- vboaa=vboc1 diff --git a/src/test/ref/const-early-identification.log b/src/test/ref/const-early-identification.log index 3a12e4591..267852183 100644 --- a/src/test/ref/const-early-identification.log +++ b/src/test/ref/const-early-identification.log @@ -206,7 +206,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -227,7 +227,7 @@ main: { // [7] *(SCREEN+2) = *main::addrA -- _deref_pbuc1=_deref_pbuc2 lda.z addrA sta SCREEN+2 - // [8] call sub -- call_phi_near + // [8] call sub jsr sub jmp __breturn // main::@return @@ -315,7 +315,7 @@ __start: { sta.z A // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -338,7 +338,7 @@ main: { lda.z addrA sta SCREEN+2 // sub() - // [8] call sub -- call_phi_near + // [8] call sub jsr sub // main::@return // } diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index bcf87ce92..c27bca22e 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -377,7 +377,7 @@ main: { // main::@2 __b2: // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near + // [8] phi from main::@2 to line [phi:main::@2->line] line_from___b2: jsr line jmp __b2_from___b2 @@ -405,7 +405,7 @@ line: { // line::@2 __b2: // [12] plot::x#1 = line::x#2 - // [13] call plot -- call_phi_near + // [13] call plot jsr plot jmp __b3 // line::@3 @@ -535,7 +535,7 @@ main: { __b2: // line(0, 10) // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near + // [8] phi from main::@2 to line [phi:main::@2->line] jsr line jmp __b2 } @@ -561,7 +561,7 @@ line: { __b2: // plot(x) // [12] plot::x#1 = line::x#2 - // [13] call plot -- call_phi_near + // [13] call plot jsr plot // line::@3 // for(byte x = x0; x<=x1; x++) diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index f950c9ac6..d169c1ccf 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -269,7 +269,7 @@ main: { // [1] call sum // [14] phi from main to sum [phi:main->sum] sum_from_main: - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 lda #'c' jsr sum // [2] sum::return#0 = sum::return#3 @@ -282,7 +282,7 @@ main: { // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #'m' jsr sum // [6] sum::return#1 = sum::return#3 @@ -295,7 +295,7 @@ main: { // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #'l' jsr sum // [10] sum::return#2 = sum::return#3 @@ -392,7 +392,7 @@ main: { // sum(reverse, 'c') // [1] call sum // [14] phi from main to sum [phi:main->sum] - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 lda #'c' jsr sum // sum(reverse, 'c') @@ -405,7 +405,7 @@ main: { // sum(reverse, 'm') // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #'m' jsr sum // sum(reverse, 'm') @@ -418,7 +418,7 @@ main: { // sum(reverse, 'l') // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #'l' jsr sum // sum(reverse, 'l') diff --git a/src/test/ref/const-volatile-problem.log b/src/test/ref/const-volatile-problem.log index d40481e85..19557408a 100644 --- a/src/test/ref/const-volatile-problem.log +++ b/src/test/ref/const-volatile-problem.log @@ -204,7 +204,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -313,7 +313,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index d5b216b61..b1c1bb33f 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -1647,7 +1647,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [7] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls jmp __b1 @@ -1657,7 +1657,7 @@ main: { lda #GREEN sta BG_COLOR // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] test_bytes_from___b1: jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1666,7 +1666,7 @@ main: { // main::@2 __b2: // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] test_sbytes_from___b2: jsr test_sbytes jmp __breturn @@ -1679,7 +1679,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [28] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1712,7 +1712,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 lda #msg @@ -1736,7 +1736,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 lda #msg1 @@ -1760,7 +1760,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 lda #msg2 @@ -1792,7 +1792,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg @@ -1811,7 +1811,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg1 @@ -1830,7 +1830,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg2 @@ -1849,7 +1849,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg3 @@ -1868,7 +1868,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg4 @@ -1945,7 +1945,7 @@ assert_byte: { // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] print_str_from_assert_byte: // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] __b4_from_assert_byte: @@ -1956,7 +1956,7 @@ assert_byte: { // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1977,7 +1977,7 @@ assert_byte: { // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -1992,7 +1992,7 @@ assert_byte: { // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy jsr print_ln jmp __breturn // assert_byte::@return @@ -2008,7 +2008,7 @@ assert_byte: { // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2031,7 +2031,7 @@ assert_sbyte: { // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] print_str_from_assert_sbyte: // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] __b4_from_assert_sbyte: @@ -2042,7 +2042,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2063,7 +2063,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -2078,7 +2078,7 @@ assert_sbyte: { // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy jsr print_ln jmp __breturn // assert_sbyte::@return @@ -2094,7 +2094,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2130,7 +2130,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char -- call_phi_near + // [66] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -2438,7 +2438,7 @@ Score: 1783 main: { // print_cls() // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [7] phi from main to print_cls [phi:main->print_cls] jsr print_cls // main::@1 // *BG_COLOR = GREEN @@ -2447,13 +2447,13 @@ main: { sta BG_COLOR // test_bytes() // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // test_sbytes() // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] jsr test_sbytes // main::@return // } @@ -2465,7 +2465,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [28] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2496,7 +2496,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 lda #msg @@ -2518,7 +2518,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 lda #msg1 @@ -2540,7 +2540,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 lda #msg2 @@ -2571,7 +2571,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg @@ -2587,7 +2587,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg1 @@ -2603,7 +2603,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg2 @@ -2619,7 +2619,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg3 @@ -2635,7 +2635,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg4 @@ -2710,7 +2710,7 @@ assert_byte: { // [36] call print_str // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] // assert_byte::@4 @@ -2718,7 +2718,7 @@ assert_byte: { // [38] call print_str // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2735,7 +2735,7 @@ assert_byte: { // [41] call print_str // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -2747,7 +2747,7 @@ assert_byte: { // print_ln() // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy jsr print_ln // assert_byte::@return // } @@ -2763,7 +2763,7 @@ assert_byte: { // [46] call print_str // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2787,7 +2787,7 @@ assert_sbyte: { // [50] call print_str // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] // assert_sbyte::@4 @@ -2795,7 +2795,7 @@ assert_sbyte: { // [52] call print_str // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2812,7 +2812,7 @@ assert_sbyte: { // [55] call print_str // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -2824,7 +2824,7 @@ assert_sbyte: { // print_ln() // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy jsr print_ln // assert_sbyte::@return // } @@ -2840,7 +2840,7 @@ assert_sbyte: { // [60] call print_str // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2874,7 +2874,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char -- call_phi_near + // [66] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/constref-not-literal-problem.log b/src/test/ref/constref-not-literal-problem.log index 5e11f1540..4068dc7e4 100644 --- a/src/test/ref/constref-not-literal-problem.log +++ b/src/test/ref/constref-not-literal-problem.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call copy -- call_phi_near + // [1] call copy jsr copy jmp __breturn // main::@return @@ -267,7 +267,7 @@ Score: 41 // main main: { // copy(B, A) - // [1] call copy -- call_phi_near + // [1] call copy jsr copy // main::@return // } diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 42ef0d493..02d896823 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1758,7 +1758,7 @@ main: { .label x = $f .label y = $17 // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [22] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1816,7 +1816,7 @@ main: { sta.z yw // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 -- call_phi_near + // [10] call atan2_16 jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 jmp __b6 @@ -2636,7 +2636,7 @@ main: { .label y = $17 // init_font_hex(CHARSET) // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [22] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2683,7 +2683,7 @@ main: { // word angle_w = atan2_16(xw, yw) // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 -- call_phi_near + // [10] call atan2_16 jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 // main::@6 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 827cd2778..9f4227d9a 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -2027,7 +2027,7 @@ main: { // Clear the screen by modifying the charset .label clear_char = $18 // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [10] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -2042,7 +2042,7 @@ main: { lda #toD0181_return sta D018 // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] init_angle_screen_from___b5: jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2357,7 +2357,7 @@ init_angle_screen: { sty.z yw // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 -- call_phi_near + // [49] call atan2_16 jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 jmp __b5 @@ -3059,7 +3059,7 @@ main: { .label clear_char = $18 // init_font_hex(CHARSET) // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [10] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -3070,7 +3070,7 @@ main: { sta D018 // init_angle_screen(SCREEN) // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [5] phi main::clear_char#5 = CHARSET [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -3373,7 +3373,7 @@ init_angle_screen: { // word angle_w = atan2_16(xw, yw) // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 -- call_phi_near + // [49] call atan2_16 jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 // init_angle_screen::@5 diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index c4712c1a2..2e53e0d27 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1440,7 +1440,7 @@ main: { .label x = $c .label y = $d // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [18] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1488,7 +1488,7 @@ main: { __b2: // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 -- call_phi_near + // [8] call atan2_8 jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa @@ -2171,7 +2171,7 @@ main: { .label y = $d // init_font_hex(CHARSET) // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [18] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2207,7 +2207,7 @@ main: { // byte angle = atan2_8(x, y) // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 -- call_phi_near + // [8] call atan2_8 jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa diff --git a/src/test/ref/cstyle-decl-function.log b/src/test/ref/cstyle-decl-function.log index beb959f12..85b67ab57 100644 --- a/src/test/ref/cstyle-decl-function.log +++ b/src/test/ref/cstyle-decl-function.log @@ -243,7 +243,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#0 = sum::return#2 @@ -258,7 +258,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [6] sum::return#1 = sum::return#2 @@ -353,7 +353,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 2) @@ -368,7 +368,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 12) diff --git a/src/test/ref/declared-memory-var-6.log b/src/test/ref/declared-memory-var-6.log index b629987ff..5a8d4a8da 100644 --- a/src/test/ref/declared-memory-var-6.log +++ b/src/test/ref/declared-memory-var-6.log @@ -438,7 +438,7 @@ main: { out_from_main: // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 ldx #reg_zp_flex jsr out jmp __b1 @@ -450,7 +450,7 @@ main: { // [24] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -461,7 +461,7 @@ main: { // [24] phi from main::@2 to out [phi:main::@2->out] out_from___b2: // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 ldx #reg_mem_flex jsr out jmp __b3 @@ -473,7 +473,7 @@ main: { // [24] phi from main::@3 to out [phi:main::@3->out] out_from___b3: // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -484,7 +484,7 @@ main: { // [24] phi from main::@4 to out [phi:main::@4->out] out_from___b4: // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -496,7 +496,7 @@ main: { // [24] phi from main::@5 to out [phi:main::@5->out] out_from___b5: // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -508,7 +508,7 @@ main: { // [24] phi from main::@6 to out [phi:main::@6->out] out_from___b6: // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 ldx #default_zp_flex jsr out jmp __b7 @@ -520,7 +520,7 @@ main: { // [24] phi from main::@7 to out [phi:main::@7->out] out_from___b7: // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -531,7 +531,7 @@ main: { // [24] phi from main::@8 to out [phi:main::@8->out] out_from___b8: // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 ldx #default_mem_flex jsr out jmp __b9 @@ -543,7 +543,7 @@ main: { // [24] phi from main::@9 to out [phi:main::@9->out] out_from___b9: // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy jsr out jmp __breturn // main::@return @@ -694,7 +694,7 @@ main: { // [24] phi from main to out [phi:main->out] // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 ldx #reg_zp_flex jsr out // main::@1 @@ -704,7 +704,7 @@ main: { // [6] call out // [24] phi from main::@1 to out [phi:main::@1->out] // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -712,7 +712,7 @@ main: { // [8] call out // [24] phi from main::@2 to out [phi:main::@2->out] // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 ldx #reg_mem_flex jsr out // main::@3 @@ -722,7 +722,7 @@ main: { // [10] call out // [24] phi from main::@3 to out [phi:main::@3->out] // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -730,7 +730,7 @@ main: { // [12] call out // [24] phi from main::@4 to out [phi:main::@4->out] // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -739,7 +739,7 @@ main: { // [14] call out // [24] phi from main::@5 to out [phi:main::@5->out] // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -748,7 +748,7 @@ main: { // [16] call out // [24] phi from main::@6 to out [phi:main::@6->out] // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 ldx #default_zp_flex jsr out // main::@7 @@ -758,7 +758,7 @@ main: { // [18] call out // [24] phi from main::@7 to out [phi:main::@7->out] // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -766,7 +766,7 @@ main: { // [20] call out // [24] phi from main::@8 to out [phi:main::@8->out] // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 ldx #default_mem_flex jsr out // main::@9 @@ -776,7 +776,7 @@ main: { // [22] call out // [24] phi from main::@9 to out [phi:main::@9->out] // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy jsr out // main::@return // } diff --git a/src/test/ref/declared-memory-var-7.log b/src/test/ref/declared-memory-var-7.log index 7718eb181..943be5261 100644 --- a/src/test/ref/declared-memory-var-7.log +++ b/src/test/ref/declared-memory-var-7.log @@ -181,7 +181,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -287,7 +287,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-memory-var-8.log b/src/test/ref/declared-memory-var-8.log index 76c66804b..f5d839898 100644 --- a/src/test/ref/declared-memory-var-8.log +++ b/src/test/ref/declared-memory-var-8.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -285,7 +285,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-ssa-var-0.log b/src/test/ref/declared-ssa-var-0.log index 2f7d9e2f8..77a968616 100644 --- a/src/test/ref/declared-ssa-var-0.log +++ b/src/test/ref/declared-ssa-var-0.log @@ -518,7 +518,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -791,7 +791,7 @@ __start: { sta.z idx_nssa_g // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index ce1a6dbd9..099802ad4 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -469,7 +469,7 @@ main: { .label ch = 6 .label x = 7 // [1] call memset - // [13] phi from main to memset [phi:main->memset] -- call_phi_near + // [13] phi from main to memset [phi:main->memset] memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -686,7 +686,7 @@ main: { .label x = 7 // memset(SCREEN, ' ', 1000) // [1] call memset - // [13] phi from main to memset [phi:main->memset] -- call_phi_near + // [13] phi from main to memset [phi:main->memset] jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#4 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index 7996b0807..4d3b92685 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -245,7 +245,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -260,7 +260,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -358,7 +358,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -370,7 +370,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index c68e6aed2..272e2ec42 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -225,7 +225,7 @@ main: { print_from_main: // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -240,7 +240,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -327,7 +327,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -339,7 +339,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/ducks-array.log b/src/test/ref/ducks-array.log index 246dd736f..52b0efcee 100644 --- a/src/test/ref/ducks-array.log +++ b/src/test/ref/ducks-array.log @@ -360,7 +360,7 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout -- call_phi_near + // [1] call chrout jsr chrout jmp __b1 // main::@1 @@ -368,7 +368,7 @@ main: { // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout -- call_phi_near + // [3] call chrout jsr chrout jmp __b2 // main::@2 @@ -376,7 +376,7 @@ main: { // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout jmp __b3 // main::@3 @@ -384,7 +384,7 @@ main: { // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout -- call_phi_near + // [7] call chrout jsr chrout jmp __b4 // main::@4 @@ -392,7 +392,7 @@ main: { // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout -- call_phi_near + // [9] call chrout jsr chrout jmp __breturn // main::@return @@ -468,35 +468,35 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout -- call_phi_near + // [1] call chrout jsr chrout // main::@1 // chrout(points[0]) // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout -- call_phi_near + // [3] call chrout jsr chrout // main::@2 // chrout(points[1]) // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout // main::@3 // chrout(points[2]) // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout -- call_phi_near + // [7] call chrout jsr chrout // main::@4 // chrout(points[3]) // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout -- call_phi_near + // [9] call chrout jsr chrout // main::@return // } diff --git a/src/test/ref/ducks-loop211.log b/src/test/ref/ducks-loop211.log index 2cfcc151f..66f3d5dd8 100644 --- a/src/test/ref/ducks-loop211.log +++ b/src/test/ref/ducks-loop211.log @@ -214,7 +214,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout jmp __b2 // main::@2 @@ -320,7 +320,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout // main::@2 // ++k; diff --git a/src/test/ref/ducks-total.log b/src/test/ref/ducks-total.log index 731814936..b2ef90b84 100644 --- a/src/test/ref/ducks-total.log +++ b/src/test/ref/ducks-total.log @@ -9588,14 +9588,14 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 lda #0 sta.z m - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [10] call main -- call_phi_near + // [10] call main jsr main jmp __breturn // __start::@return @@ -9637,7 +9637,7 @@ conio_c64_init: { // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -9700,7 +9700,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout -- call_phi_near + // [21] call chrout // border and black paper jsr chrout jmp __b50 @@ -9709,7 +9709,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout -- call_phi_near + // [23] call chrout //Lock UpperCase to Lowercase key jsr chrout jmp __b51 @@ -9751,7 +9751,7 @@ main: { // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] clear_screen_from___b3: - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 lda #$20 sta.z clear_screen.n jsr clear_screen @@ -9764,7 +9764,7 @@ main: { // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] textcolor_from___b52: - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -9776,7 +9776,7 @@ main: { // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] cputs_from___b53: - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 lda #intro @@ -9791,7 +9791,7 @@ main: { // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] textcolor_from___b54: - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -9803,7 +9803,7 @@ main: { // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] cputs_from___b55: - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 lda #levels @@ -9818,7 +9818,7 @@ main: { // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] textcolor_from___b56: - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -9830,7 +9830,7 @@ main: { // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] cputs_from___b57: - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 lda #foot @@ -9858,7 +9858,7 @@ main: { // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] clear_screen_from___b5: - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -9871,7 +9871,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout -- call_phi_near + // [47] call chrout // Graphic mode jsr chrout jmp __b59 @@ -9880,7 +9880,7 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout -- call_phi_near + // [49] call chrout jsr chrout jmp __b60 // main::@60 @@ -9888,7 +9888,7 @@ main: { // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout -- call_phi_near + // [51] call chrout jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] __b6_from___b60: @@ -9912,7 +9912,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout -- call_phi_near + // [55] call chrout // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout jmp __b61 @@ -9927,7 +9927,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout -- call_phi_near + // [59] call chrout //last brick from last line (#23) to avoid scrolling jsr chrout jmp __b62 @@ -9975,7 +9975,7 @@ main: { // [345] phi from main::@13 to random [phi:main::@13->random] random_from___b13: // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy jsr random jmp __b71 // main::@71 @@ -10018,7 +10018,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout -- call_phi_near + // [72] call chrout // Duck #1 jsr chrout jmp __b65 @@ -10027,7 +10027,7 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout -- call_phi_near + // [74] call chrout jsr chrout jmp __b66 // main::@66 @@ -10035,7 +10035,7 @@ main: { // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout -- call_phi_near + // [76] call chrout jsr chrout jmp __b67 // main::@67 @@ -10043,7 +10043,7 @@ main: { // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout -- call_phi_near + // [78] call chrout jsr chrout jmp __b68 // main::@68 @@ -10051,7 +10051,7 @@ main: { // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout -- call_phi_near + // [80] call chrout jsr chrout jmp __b69 // main::@69 @@ -10059,7 +10059,7 @@ main: { // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout -- call_phi_near + // [82] call chrout jsr chrout jmp __b70 // main::@70 @@ -10089,7 +10089,7 @@ main: { // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] write_score_from___b19: - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 lda #<0 sta.z score lda #>0 @@ -10101,7 +10101,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout -- call_phi_near + // [89] call chrout // Write Score (yellow) jsr chrout jmp __b76 @@ -10110,7 +10110,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout -- call_phi_near + // [91] call chrout jsr chrout jmp __b77 // main::@77 @@ -10163,7 +10163,7 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout -- call_phi_near + // [97] call chrout jsr chrout jmp __b79 // main::@79 @@ -10171,7 +10171,7 @@ main: { // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout -- call_phi_near + // [99] call chrout jsr chrout jmp __b80 // main::@80 @@ -10179,7 +10179,7 @@ main: { // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout -- call_phi_near + // [101] call chrout jsr chrout jmp __b81 // main::@81 @@ -10201,7 +10201,7 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout -- call_phi_near + // [105] call chrout jsr chrout jmp __b82 // main::@82 @@ -10209,7 +10209,7 @@ main: { // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout -- call_phi_near + // [107] call chrout jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b24_from___b103: @@ -10229,7 +10229,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -10247,7 +10247,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -10340,7 +10340,7 @@ main: { jmp __b25 // main::@25 __b25: - // [123] call chrono_restart -- call_phi_near + // [123] call chrono_restart jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] __b26_from___b25: @@ -10384,7 +10384,7 @@ main: { // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] write_score_from___b28: - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy jsr write_score jmp __b86 // main::@86 @@ -10396,7 +10396,7 @@ main: { // [381] phi from main::@86 to wait [phi:main::@86->wait] wait_from___b86: // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 lda #$14 sta.z wait.n jsr wait @@ -10485,7 +10485,7 @@ main: { // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] clear_screen_from___b44: - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -10498,7 +10498,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout -- call_phi_near + // [148] call chrout jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] __b92_from___b91: @@ -10509,7 +10509,7 @@ main: { // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] textcolor_from___b92: - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -10521,7 +10521,7 @@ main: { // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] cputs_from___b93: - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 lda #game_over @@ -10536,7 +10536,7 @@ main: { // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] textcolor_from___b94: - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -10548,7 +10548,7 @@ main: { // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] cputs_from___b95: - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 lda #your_score @@ -10562,7 +10562,7 @@ main: { // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] cputs_from___b96: - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -10577,7 +10577,7 @@ main: { // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] textcolor_from___b97: - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 lda #3 sta.z textcolor.color jsr textcolor @@ -10589,7 +10589,7 @@ main: { // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] cputs_from___b98: - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 lda #high_score @@ -10630,7 +10630,7 @@ main: { // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] utoa_from___b46: - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] __b100_from___b46: @@ -10640,7 +10640,7 @@ main: { // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] cputs_from___b100: - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -10655,7 +10655,7 @@ main: { // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] textcolor_from___b101: - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -10667,7 +10667,7 @@ main: { // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] cputs_from___b102: - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 lda #play_again @@ -10728,7 +10728,7 @@ main: { jmp __b27 // main::@27 __b27: - // [182] call read_chrono -- call_phi_near + // [182] call read_chrono jsr read_chrono jmp __b85 // main::@85 @@ -10904,7 +10904,7 @@ main: { // [381] phi from main::@42 to wait [phi:main::@42->wait] wait_from___b42: // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -11083,7 +11083,7 @@ main: { // [381] phi from main::@36 to wait [phi:main::@36->wait] wait_from___b36: // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -11182,7 +11182,7 @@ main: { // [381] phi from main::@89 to wait [phi:main::@89->wait] wait_from___b89: // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -11305,7 +11305,7 @@ main: { // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] write_score_from___b34: - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] __b88_from___b34: @@ -11316,7 +11316,7 @@ main: { // [381] phi from main::@88 to wait [phi:main::@88->wait] wait_from___b88: // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -11338,7 +11338,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout -- call_phi_near + // [274] call chrout jsr chrout jmp __b24_from___b23 // main::@21 @@ -11347,7 +11347,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout -- call_phi_near + // [276] call chrout jsr chrout jmp __b78 // main::@78 @@ -11364,7 +11364,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout -- call_phi_near + // [279] call chrout jsr chrout jmp __b74 // main::@74 @@ -11393,7 +11393,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout -- call_phi_near + // [284] call chrout jsr chrout jmp __b73 // main::@73 @@ -11429,7 +11429,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout -- call_phi_near + // [289] call chrout jsr chrout jmp __b72 // main::@72 @@ -11445,7 +11445,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout -- call_phi_near + // [292] call chrout jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] __b9_from___b7: @@ -11465,7 +11465,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout -- call_phi_near + // [296] call chrout jsr chrout jmp __b64 // main::@64 @@ -11482,7 +11482,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout -- call_phi_near + // [299] call chrout jsr chrout jmp __b63 // main::@63 @@ -11661,7 +11661,7 @@ clear_screen: { // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] gotoxy_from___b3: - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 lda #0 sta.z gotoxy.y jsr gotoxy @@ -11671,7 +11671,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout -- call_phi_near + // [327] call chrout jsr chrout jmp __breturn // clear_screen::@return @@ -11761,7 +11761,7 @@ cputs: { // cputs::@2 __b2: // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc -- call_phi_near + // [344] call cputc jsr cputc jmp __b1_from___b2 } @@ -11850,7 +11850,7 @@ write_score: { // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] utoa_from___b7: - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy jsr utoa jmp __b11 // write_score::@11 @@ -11899,7 +11899,7 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout -- call_phi_near + // [367] call chrout jsr chrout jmp __b12 // write_score::@12 @@ -11907,7 +11907,7 @@ write_score: { // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout -- call_phi_near + // [369] call chrout jsr chrout jmp __b13 // write_score::@13 @@ -11936,7 +11936,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout -- call_phi_near + // [375] call chrout jsr chrout jmp __b14 // write_score::@14 @@ -12138,7 +12138,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [408] utoa_append::return#0 = utoa_append::value#2 @@ -12181,7 +12181,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u -- call_phi_near + // [414] call div16u8u jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -12256,7 +12256,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [428] call cputln -- call_phi_near + // [428] call cputln jsr cputln jmp __breturn // cputc::@return @@ -12268,7 +12268,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [431] call cputln -- call_phi_near + // [431] call cputln jsr cputln jmp __breturn } @@ -12355,7 +12355,7 @@ div16u8u: { // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] divr8u_from_div16u8u: // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 lda #0 sta.z divr8u.rem jsr divr8u @@ -12374,7 +12374,7 @@ div16u8u: { // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] divr8u_from___b1: // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy jsr divr8u // [446] divr8u::return#3 = divr8u::return#0 jmp __b2 @@ -12416,7 +12416,7 @@ cputln: { sta.z conio_cursor_x // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [454] call cscroll -- call_phi_near + // [454] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -12537,7 +12537,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -12556,7 +12556,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -12573,7 +12573,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12589,7 +12589,7 @@ cscroll: { // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -13931,11 +13931,11 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 sta.z m // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [10] call main -- call_phi_near + // [10] call main jsr main // __start::@return // [11] return @@ -13969,7 +13969,7 @@ conio_c64_init: { // [16] gotoxy::y#2 = conio_c64_init::line#2 // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy // conio_c64_init::@return // } @@ -14033,7 +14033,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout -- call_phi_near + // [21] call chrout // border and black paper jsr chrout // main::@50 @@ -14041,7 +14041,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout -- call_phi_near + // [23] call chrout //Lock UpperCase to Lowercase key jsr chrout // main::@51 @@ -14077,7 +14077,7 @@ main: { // clear_screen(32,0) // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 lda #$20 sta.z clear_screen.n jsr clear_screen @@ -14087,7 +14087,7 @@ main: { // [29] call textcolor // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -14096,7 +14096,7 @@ main: { // cputs(intro) // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 lda #intro @@ -14108,7 +14108,7 @@ main: { // [33] call textcolor // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -14117,7 +14117,7 @@ main: { // cputs(levels) // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 lda #levels @@ -14129,7 +14129,7 @@ main: { // [37] call textcolor // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -14138,7 +14138,7 @@ main: { // cputs(foot) // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 lda #foot @@ -14165,7 +14165,7 @@ main: { // [44] call clear_screen // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -14178,7 +14178,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout -- call_phi_near + // [47] call chrout // Graphic mode jsr chrout // main::@59 @@ -14186,14 +14186,14 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout -- call_phi_near + // [49] call chrout jsr chrout // main::@60 // chrout(down) // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout -- call_phi_near + // [51] call chrout jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] // [52] phi n#89 = n#109 [phi:main::@60->main::@6#0] -- register_copy @@ -14217,7 +14217,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout -- call_phi_near + // [55] call chrout // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout // main::@61 @@ -14232,7 +14232,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout -- call_phi_near + // [59] call chrout //last brick from last line (#23) to avoid scrolling jsr chrout // main::@62 @@ -14277,7 +14277,7 @@ main: { // Write differential random bricks depending on 'l' level choosen // [345] phi from main::@13 to random [phi:main::@13->random] // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy jsr random // main::@71 // z+m @@ -14322,7 +14322,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout -- call_phi_near + // [72] call chrout // Duck #1 jsr chrout // main::@65 @@ -14330,35 +14330,35 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout -- call_phi_near + // [74] call chrout jsr chrout // main::@66 // chrout(80) // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout -- call_phi_near + // [76] call chrout jsr chrout // main::@67 // chrout(84) // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout -- call_phi_near + // [78] call chrout jsr chrout // main::@68 // chrout(83) // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout -- call_phi_near + // [80] call chrout jsr chrout // main::@69 // chrout(58) // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout -- call_phi_near + // [82] call chrout jsr chrout // main::@70 // POKE @@ -14385,7 +14385,7 @@ main: { // [87] call write_score // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 lda #<0 sta.z score sta.z score+1 @@ -14395,7 +14395,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout -- call_phi_near + // [89] call chrout // Write Score (yellow) jsr chrout // main::@76 @@ -14403,7 +14403,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout -- call_phi_near + // [91] call chrout jsr chrout // main::@77 // POKE @@ -14453,21 +14453,21 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout -- call_phi_near + // [97] call chrout jsr chrout // main::@79 // chrout(green) // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout -- call_phi_near + // [99] call chrout jsr chrout // main::@80 // chrout(reverse_on) // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout -- call_phi_near + // [101] call chrout jsr chrout // main::@81 // POKE @@ -14490,14 +14490,14 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout -- call_phi_near + // [105] call chrout jsr chrout // main::@82 // chrout(48) // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout -- call_phi_near + // [107] call chrout jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b11: @@ -14509,7 +14509,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -14526,7 +14526,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -14607,7 +14607,7 @@ main: { // [122] phi from main::@103 to main::@25 [phi:main::@103->main::@25] // main::@25 // chrono_restart() - // [123] call chrono_restart -- call_phi_near + // [123] call chrono_restart jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] // [124] phi n#20 = n#52 [phi:main::@25->main::@26#0] -- register_copy @@ -14651,7 +14651,7 @@ main: { // write_score() // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy jsr write_score // main::@86 // POKE @@ -14662,7 +14662,7 @@ main: { // [130] call wait // [381] phi from main::@86 to wait [phi:main::@86->wait] // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 lda #$14 sta.z wait.n jsr wait @@ -14747,7 +14747,7 @@ main: { // [145] call clear_screen // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -14760,7 +14760,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout -- call_phi_near + // [148] call chrout jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] // main::@92 @@ -14768,7 +14768,7 @@ main: { // [150] call textcolor // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -14777,7 +14777,7 @@ main: { // cputs(game_over) // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 lda #game_over @@ -14789,7 +14789,7 @@ main: { // [154] call textcolor // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -14798,7 +14798,7 @@ main: { // cputs(your_score) // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 lda #your_score @@ -14809,7 +14809,7 @@ main: { // cputs(buffer) // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -14821,7 +14821,7 @@ main: { // [160] call textcolor // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 lda #3 sta.z textcolor.color jsr textcolor @@ -14830,7 +14830,7 @@ main: { // cputs(high_score) // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 lda #high_score @@ -14867,14 +14867,14 @@ main: { sta.z utoa.value+1 // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] // main::@100 // cputs(buffer) // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -14886,7 +14886,7 @@ main: { // [171] call textcolor // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -14895,7 +14895,7 @@ main: { // cputs(play_again) // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 lda #play_again @@ -14951,7 +14951,7 @@ main: { // main::@27 __b27: // read_chrono() - // [182] call read_chrono -- call_phi_near + // [182] call read_chrono jsr read_chrono // main::@85 // m=PEEK @@ -15123,7 +15123,7 @@ main: { // [212] call wait // [381] phi from main::@42 to wait [phi:main::@42->wait] // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -15280,7 +15280,7 @@ main: { // Clear peephole if there is not bricks contact // [381] phi from main::@36 to wait [phi:main::@36->wait] // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -15371,7 +15371,7 @@ main: { // [254] call wait // [381] phi from main::@89 to wait [phi:main::@89->wait] // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -15494,7 +15494,7 @@ main: { // write_score() // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] // main::@88 @@ -15502,7 +15502,7 @@ main: { // [271] call wait // [381] phi from main::@88 to wait [phi:main::@88->wait] // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -15525,7 +15525,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout -- call_phi_near + // [274] call chrout jsr chrout jmp __b11 // main::@21 @@ -15535,7 +15535,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout -- call_phi_near + // [276] call chrout jsr chrout // main::@78 // for (j=0; j<5; j++) @@ -15551,7 +15551,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout -- call_phi_near + // [279] call chrout jsr chrout // main::@74 // for (j=0; j<4; ++j) @@ -15577,7 +15577,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout -- call_phi_near + // [284] call chrout jsr chrout // main::@73 // z+m @@ -15618,7 +15618,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout -- call_phi_near + // [289] call chrout jsr chrout // main::@72 // for (j=1; j<=m; ++j) @@ -15633,7 +15633,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout -- call_phi_near + // [292] call chrout jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] // [293] phi n#101 = 2 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 @@ -15651,7 +15651,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout -- call_phi_near + // [296] call chrout jsr chrout // main::@64 // for (k=1;k<22;k++) @@ -15667,7 +15667,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout -- call_phi_near + // [299] call chrout jsr chrout // main::@63 // for(n=2;n<22;++n) @@ -15839,7 +15839,7 @@ clear_screen: { // [325] call gotoxy // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 lda #0 sta.z gotoxy.y jsr gotoxy @@ -15848,7 +15848,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout -- call_phi_near + // [327] call chrout jsr chrout // clear_screen::@return // } @@ -15935,7 +15935,7 @@ cputs: { __b2: // cputc(c) // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc -- call_phi_near + // [344] call cputc jsr cputc jmp __b1 } @@ -16014,7 +16014,7 @@ write_score: { // [358] call utoa // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy jsr utoa // write_score::@11 // if (score>9) @@ -16063,14 +16063,14 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout -- call_phi_near + // [367] call chrout jsr chrout // write_score::@12 // chrout(home) // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout -- call_phi_near + // [369] call chrout jsr chrout // write_score::@13 // POKE @@ -16099,7 +16099,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout -- call_phi_near + // [375] call chrout jsr chrout // write_score::@14 // for (m=0;m<4;m++) @@ -16295,7 +16295,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [408] utoa_append::return#0 = utoa_append::value#2 @@ -16340,7 +16340,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u -- call_phi_near + // [414] call div16u8u jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -16413,7 +16413,7 @@ cputc: { // [427] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [428] call cputln -- call_phi_near + // [428] call cputln jsr cputln // cputc::@return __breturn: @@ -16424,7 +16424,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [431] call cputln -- call_phi_near + // [431] call cputln jsr cputln rts } @@ -16509,7 +16509,7 @@ div16u8u: { // [440] call divr8u // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 lda #0 sta.z divr8u.rem jsr divr8u @@ -16527,7 +16527,7 @@ div16u8u: { // [445] call divr8u // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy jsr divr8u // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) // [446] divr8u::return#3 = divr8u::return#0 @@ -16573,7 +16573,7 @@ cputln: { // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [454] call cscroll -- call_phi_near + // [454] call cscroll jsr cscroll // cputln::@return // } @@ -16684,7 +16684,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -16700,7 +16700,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -16714,7 +16714,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -16728,7 +16728,7 @@ cscroll: { // [480] call memset // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/emptyblock-error.log b/src/test/ref/emptyblock-error.log index e0cecc608..94603b9c6 100644 --- a/src/test/ref/emptyblock-error.log +++ b/src/test/ref/emptyblock-error.log @@ -210,7 +210,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] menu_from___b1: jsr menu jmp __b1_from___b1 @@ -223,7 +223,7 @@ menu: { // menu::@1 __b1: // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] mode_from___b1: jsr mode jmp __breturn @@ -301,7 +301,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] jsr menu jmp __b1 } @@ -311,7 +311,7 @@ menu: { // menu::@1 // mode() // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] jsr mode // menu::@return // } diff --git a/src/test/ref/enum-5.log b/src/test/ref/enum-5.log index 22495f37d..de8d812af 100644 --- a/src/test/ref/enum-5.log +++ b/src/test/ref/enum-5.log @@ -120,7 +120,7 @@ main: { // [0] *main::SCREEN = main::ON -- _deref_pbuc1=vbuc2 lda #ON sta SCREEN - // [1] call test -- call_phi_near + // [1] call test jsr test jmp __breturn // main::@return @@ -186,7 +186,7 @@ main: { lda #ON sta SCREEN // test() - // [1] call test -- call_phi_near + // [1] call test jsr test // main::@return // } diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index 2f5eec06d..1fad1e5a5 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -1274,7 +1274,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [15] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1298,7 +1298,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1318,7 +1318,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1338,7 +1338,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1358,7 +1358,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1378,7 +1378,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1398,7 +1398,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 lda #$77 sta.z print_euclid.a jsr print_euclid @@ -1412,7 +1412,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [36] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1432,7 +1432,7 @@ print_euclid: { // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] print_uchar_from_print_euclid: // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] __b1_from_print_euclid: @@ -1443,7 +1443,7 @@ print_euclid: { // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b2 @@ -1455,7 +1455,7 @@ print_euclid: { // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] print_uchar_from___b2: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] __b3_from___b2: @@ -1466,7 +1466,7 @@ print_euclid: { // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b4 @@ -1476,7 +1476,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] euclid_from___b4: jsr euclid // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -1490,7 +1490,7 @@ print_euclid: { // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] print_uchar_from___b5: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] __b6_from___b5: @@ -1498,7 +1498,7 @@ print_euclid: { // print_euclid::@6 __b6: // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] print_ln_from___b6: jsr print_ln jmp __breturn @@ -1572,7 +1572,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1586,7 +1586,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1885,7 +1885,7 @@ Score: 1607 main: { // print_cls() // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [15] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1905,7 +1905,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1923,7 +1923,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1941,7 +1941,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1959,7 +1959,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1977,7 +1977,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1995,7 +1995,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 lda #$77 sta.z print_euclid.a jsr print_euclid @@ -2009,7 +2009,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [36] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2027,7 +2027,7 @@ print_euclid: { // [20] call print_uchar // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] // print_euclid::@1 @@ -2035,7 +2035,7 @@ print_euclid: { // [22] call print_char // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // print_euclid::@2 @@ -2045,7 +2045,7 @@ print_euclid: { // [24] call print_uchar // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] // print_euclid::@3 @@ -2053,7 +2053,7 @@ print_euclid: { // [26] call print_char // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // print_euclid::@4 @@ -2062,7 +2062,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] jsr euclid // euclid(a,b) // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -2074,13 +2074,13 @@ print_euclid: { // [32] call print_uchar // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] // print_euclid::@6 // print_ln() // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] jsr print_ln // print_euclid::@return // } @@ -2152,7 +2152,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2165,7 +2165,7 @@ print_uchar: { // [48] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index 697c007eb..4bd995818 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -499,7 +499,7 @@ main: { euclid_from_main: // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 lda #$80 sta.z euclid.a jsr euclid @@ -516,7 +516,7 @@ main: { euclid_from___b1: // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 lda #$a9 sta.z euclid.a jsr euclid @@ -533,7 +533,7 @@ main: { euclid_from___b2: // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 lda #$ff sta.z euclid.a jsr euclid @@ -550,7 +550,7 @@ main: { euclid_from___b3: // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 lda #$63 sta.z euclid.a jsr euclid @@ -705,7 +705,7 @@ main: { // [18] phi from main to euclid [phi:main->euclid] // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 lda #$80 sta.z euclid.a jsr euclid @@ -722,7 +722,7 @@ main: { // [18] phi from main::@1 to euclid [phi:main::@1->euclid] // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 lda #$a9 sta.z euclid.a jsr euclid @@ -739,7 +739,7 @@ main: { // [18] phi from main::@2 to euclid [phi:main::@2->euclid] // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 lda #$ff sta.z euclid.a jsr euclid @@ -756,7 +756,7 @@ main: { // [18] phi from main::@3 to euclid [phi:main::@3->euclid] // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 lda #$63 sta.z euclid.a jsr euclid diff --git a/src/test/ref/examples/atari2600/atari2600-sprites.log b/src/test/ref/examples/atari2600/atari2600-sprites.log index b2b4eda99..21d78081a 100644 --- a/src/test/ref/examples/atari2600/atari2600-sprites.log +++ b/src/test/ref/examples/atari2600/atari2600-sprites.log @@ -869,7 +869,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -1279,7 +1279,7 @@ __start: { sta.z p0_xpos // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/3d/perspective.log b/src/test/ref/examples/c64/3d/perspective.log index 0e9259487..75d6e8d72 100644 --- a/src/test/ref/examples/c64/3d/perspective.log +++ b/src/test/ref/examples/c64/3d/perspective.log @@ -1781,7 +1781,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -1794,7 +1794,7 @@ main: { // asm { sei } sei // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [17] phi from main to mulf_init [phi:main->mulf_init] mulf_init_from_main: jsr mulf_init jmp __b1 @@ -1811,7 +1811,7 @@ main: { lda #>mulf_sqr2 sta.z psp2+1 // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] print_cls_from___b1: jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1820,7 +1820,7 @@ main: { // main::@2 __b2: // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] do_perspective_from___b2: jsr do_perspective jmp __breturn @@ -1926,7 +1926,7 @@ mulf_init: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [65] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1949,7 +1949,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1963,7 +1963,7 @@ do_perspective: { // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] print_schar_from___b1: - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -1975,7 +1975,7 @@ do_perspective: { // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] print_str_from___b2: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -1989,7 +1989,7 @@ do_perspective: { // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] print_schar_from___b3: - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2001,7 +2001,7 @@ do_perspective: { // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] print_str_from___b4: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2015,7 +2015,7 @@ do_perspective: { // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] print_schar_from___b5: - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2027,7 +2027,7 @@ do_perspective: { // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] print_str_from___b6: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -2038,7 +2038,7 @@ do_perspective: { jmp __b7 // do_perspective::@7 __b7: - // [53] call perspective -- call_phi_near + // [53] call perspective jsr perspective jmp __b8 // do_perspective::@8 @@ -2049,7 +2049,7 @@ do_perspective: { // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] print_uchar_from___b8: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] __b9_from___b8: @@ -2060,7 +2060,7 @@ do_perspective: { // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] print_str_from___b9: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2075,7 +2075,7 @@ do_perspective: { // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] print_uchar_from___b10: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] __b11_from___b10: @@ -2086,7 +2086,7 @@ do_perspective: { // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] print_str_from___b11: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -2098,7 +2098,7 @@ do_perspective: { // do_perspective::@12 __b12: // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] print_ln_from___b12: jsr print_ln jmp __breturn @@ -2196,7 +2196,7 @@ print_str: { // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2224,7 +2224,7 @@ print_schar: { // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] print_char_from___b3: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -2239,7 +2239,7 @@ print_schar: { // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_schar::@return @@ -2255,7 +2255,7 @@ print_schar: { // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -2327,7 +2327,7 @@ print_uchar: { // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2341,7 +2341,7 @@ print_uchar: { // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2772,7 +2772,7 @@ __start: { sta.z psp2+1 // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -2785,7 +2785,7 @@ main: { sei // mulf_init() // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [17] phi from main to mulf_init [phi:main->mulf_init] jsr mulf_init // main::@1 // psp1 = (unsigned int)mulf_sqr1 @@ -2802,13 +2802,13 @@ main: { sta.z psp2+1 // print_cls() // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // do_perspective($39, -$47, $36) // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] jsr do_perspective // main::@return // } @@ -2914,7 +2914,7 @@ mulf_init: { print_cls: { // memset(print_screen, ' ', 1000) // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [65] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2935,7 +2935,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2946,7 +2946,7 @@ do_perspective: { // print_schar(x) // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -2955,7 +2955,7 @@ do_perspective: { // [43] call print_str // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2966,7 +2966,7 @@ do_perspective: { // print_schar(y) // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2975,7 +2975,7 @@ do_perspective: { // [47] call print_str // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2986,7 +2986,7 @@ do_perspective: { // print_schar(z) // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2995,7 +2995,7 @@ do_perspective: { // [51] call print_str // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -3004,7 +3004,7 @@ do_perspective: { // [52] phi from do_perspective::@6 to do_perspective::@7 [phi:do_perspective::@6->do_perspective::@7] // do_perspective::@7 // perspective(x, y, z) - // [53] call perspective -- call_phi_near + // [53] call perspective jsr perspective // do_perspective::@8 // print_uchar((char)xr) @@ -3013,7 +3013,7 @@ do_perspective: { // [55] call print_uchar // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] // do_perspective::@9 @@ -3021,7 +3021,7 @@ do_perspective: { // [57] call print_str // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3034,7 +3034,7 @@ do_perspective: { // [59] call print_uchar // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] // do_perspective::@11 @@ -3042,7 +3042,7 @@ do_perspective: { // [61] call print_str // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3052,7 +3052,7 @@ do_perspective: { // do_perspective::@12 // print_ln() // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] jsr print_ln // do_perspective::@return // } @@ -3144,7 +3144,7 @@ print_str: { // [76] call print_char // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3169,7 +3169,7 @@ print_schar: { // [81] call print_char // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -3181,7 +3181,7 @@ print_schar: { // [84] call print_uchar // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy jsr print_uchar // print_schar::@return // } @@ -3194,7 +3194,7 @@ print_schar: { // [87] call print_char // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_schar::@4 @@ -3268,7 +3268,7 @@ print_uchar: { // Table of hexadecimal digits // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3281,7 +3281,7 @@ print_uchar: { // [100] call print_char // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log index 8995c17ed..78e8ae48d 100644 --- a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log @@ -2379,7 +2379,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [11] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2388,7 +2388,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2397,7 +2397,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] init_screen_from___b3: jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -2407,7 +2407,7 @@ main: { // main::@1 __b1: // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near + // [44] phi from main::@1 to lines [phi:main::@1->lines] lines_from___b1: jsr lines jmp __b1_from___b1 @@ -2540,7 +2540,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2561,7 +2561,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2660,7 +2660,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line -- call_phi_near + // [52] call bitmap_line jsr bitmap_line jmp __b3 // lines::@3 @@ -2757,7 +2757,7 @@ bitmap_line: { // [64] call abs_u16 // [114] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [65] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2779,7 +2779,7 @@ bitmap_line: { // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // [69] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2811,7 +2811,7 @@ bitmap_line: { // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [75] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2833,7 +2833,7 @@ bitmap_line: { // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // [79] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2876,7 +2876,7 @@ bitmap_line: { // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2955,7 +2955,7 @@ bitmap_line: { // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2988,7 +2988,7 @@ bitmap_line: { // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3062,7 +3062,7 @@ bitmap_line: { // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn } @@ -3595,26 +3595,26 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [11] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 __b1: // lines() // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near + // [44] phi from main::@1 to lines [phi:main::@1->lines] jsr lines jmp __b1 } @@ -3738,7 +3738,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3756,7 +3756,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3849,7 +3849,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line -- call_phi_near + // [52] call bitmap_line jsr bitmap_line // lines::@3 // for(char l=0; labs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [65] abs_u16::return#0 = abs_u16::return#4 @@ -3965,7 +3965,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [69] abs_u16::return#1 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [75] sgn_u16::return#0 = sgn_u16::return#4 @@ -4017,7 +4017,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [79] sgn_u16::return#1 = sgn_u16::return#4 @@ -4056,7 +4056,7 @@ bitmap_line: { // [86] call bitmap_plot // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4130,7 +4130,7 @@ bitmap_line: { // [97] call bitmap_plot // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -4160,7 +4160,7 @@ bitmap_line: { // [103] call bitmap_plot // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4232,7 +4232,7 @@ bitmap_line: { // [113] call bitmap_plot // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot rts } diff --git a/src/test/ref/examples/c64/crunching/test-byteboozer.log b/src/test/ref/examples/c64/crunching/test-byteboozer.log index d603107b2..7d5cb9d8f 100644 --- a/src/test/ref/examples/c64/crunching/test-byteboozer.log +++ b/src/test/ref/examples/c64/crunching/test-byteboozer.log @@ -281,7 +281,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch -- call_phi_near + // [1] call byteboozer_decrunch // Decrunch sprite file into memory jsr byteboozer_decrunch jmp __b2 @@ -445,7 +445,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch -- call_phi_near + // [1] call byteboozer_decrunch // Decrunch sprite file into memory jsr byteboozer_decrunch // main::@2 diff --git a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log index 4b8b3bda8..6bb624ab9 100644 --- a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log @@ -1327,7 +1327,7 @@ main: { .label i = $f .label at_line = $d // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [30] phi from main to init_screen [phi:main->init_screen] init_screen_from_main: jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1361,7 +1361,7 @@ main: { // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] print_schar_at_from___b1: // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy jsr print_schar_at jmp __b5 // main::@5 @@ -1419,7 +1419,7 @@ main: { // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] print_schar_at_from___b2: // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy jsr print_schar_at jmp __b6 // main::@6 @@ -1459,7 +1459,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 -- call_phi_near + // [19] call fmul8 jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 jmp __b7 @@ -1477,7 +1477,7 @@ main: { // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] print_schar_at_from___b7: // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy jsr print_schar_at jmp __b8 // main::@8 @@ -1508,7 +1508,7 @@ init_screen: { .const WHITE = 1 .label COLS = 2 // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] print_cls_from_init_screen: jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] @@ -1599,7 +1599,7 @@ print_schar_at: { // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] print_char_at_from___b3: // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -1615,7 +1615,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at -- call_phi_near + // [52] call print_uchar_at jsr print_uchar_at jmp __breturn // print_schar_at::@return @@ -1629,7 +1629,7 @@ print_schar_at: { // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 ldx #'-' jsr print_char_at jmp __b4 @@ -1677,7 +1677,7 @@ fmul8: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [77] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1722,7 +1722,7 @@ print_uchar_at: { // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -1742,7 +1742,7 @@ print_uchar_at: { // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -2072,7 +2072,7 @@ main: { .label at_line = $d // init_screen() // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [30] phi from main to init_screen [phi:main->init_screen] jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::at#4 = (char *) 1024+4 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2101,7 +2101,7 @@ main: { // [5] call print_schar_at // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy jsr print_schar_at // main::@5 // at += 4 @@ -2156,7 +2156,7 @@ main: { // [13] call print_schar_at // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy jsr print_schar_at // main::@6 // [14] main::at#12 = main::at#2 -- pbuz1=pbuz2 @@ -2192,7 +2192,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 -- call_phi_near + // [19] call fmul8 jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 // main::@7 @@ -2208,7 +2208,7 @@ main: { // [24] call print_schar_at // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy jsr print_schar_at // main::@8 // for(char j: 0..8) @@ -2236,7 +2236,7 @@ init_screen: { .label COLS = 2 // print_cls() // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] // [32] phi init_screen::l#2 = 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1 @@ -2321,7 +2321,7 @@ print_schar_at: { // [48] call print_char_at // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -2335,7 +2335,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at -- call_phi_near + // [52] call print_uchar_at jsr print_uchar_at // print_schar_at::@return // } @@ -2348,7 +2348,7 @@ print_schar_at: { // [55] call print_char_at // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 ldx #'-' jsr print_char_at // print_schar_at::@4 @@ -2397,7 +2397,7 @@ fmul8: { print_cls: { // memset(print_screen, ' ', 1000) // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [77] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2441,7 +2441,7 @@ print_uchar_at: { // Table of hexadecimal digits // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@1 // b&$f @@ -2460,7 +2460,7 @@ print_uchar_at: { // [75] call print_char_at // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/examples/c64/fire/fire.log b/src/test/ref/examples/c64/fire/fire.log index e59bb1d91..04aa6b997 100644 --- a/src/test/ref/examples/c64/fire/fire.log +++ b/src/test/ref/examples/c64/fire/fire.log @@ -1695,7 +1695,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -1711,7 +1711,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1727,7 +1727,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1743,7 +1743,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 ldx #YELLOW jsr fillscreen jmp sid_rnd_init1 @@ -1763,7 +1763,7 @@ main: { // main::@2 __b2: // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] makecharset_from___b2: jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] @@ -1775,7 +1775,7 @@ main: { // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] fire_from___b1: - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -1795,7 +1795,7 @@ main: { // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] fire_from___b3: - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -2546,7 +2546,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -2559,7 +2559,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2572,7 +2572,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2585,7 +2585,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 ldx #YELLOW jsr fillscreen // main::sid_rnd_init1 @@ -2603,7 +2603,7 @@ main: { // main::@2 // makecharset(CHARSET) // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] // main::@1 @@ -2611,7 +2611,7 @@ main: { // fire(SCREEN1) // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -2627,7 +2627,7 @@ main: { // fire(SCREEN2) // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 lda #SCREEN2 diff --git a/src/test/ref/examples/c64/font-2x2/font-2x2.log b/src/test/ref/examples/c64/font-2x2/font-2x2.log index 610d18dbd..54e8fc78d 100644 --- a/src/test/ref/examples/c64/font-2x2/font-2x2.log +++ b/src/test/ref/examples/c64/font-2x2/font-2x2.log @@ -2350,7 +2350,7 @@ main: { lda #PROCPORT_RAM_CHARROM sta.z PROCPORT // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near + // [22] phi from main to font_2x2 [phi:main->font_2x2] font_2x2_from_main: jsr font_2x2 jmp __b6 @@ -2363,7 +2363,7 @@ main: { cli // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] font_compress_from___b6: jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] @@ -2382,7 +2382,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near + // [85] phi from main::@5 to memset [phi:main::@5->memset] memset_from___b5: jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2420,7 +2420,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show -- call_phi_near + // [15] call show jsr show jmp __b7 // main::@7 @@ -2735,7 +2735,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] font_find_from___b1: jsr font_find // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx @@ -3428,7 +3428,7 @@ main: { sta.z PROCPORT // font_2x2(CHARGEN, FONT_ORIGINAL) // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near + // [22] phi from main to font_2x2 [phi:main->font_2x2] jsr font_2x2 // main::@6 // *PROCPORT = PROCPORT_BASIC_KERNEL_IO @@ -3441,7 +3441,7 @@ main: { // char size = font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP) // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] // main::toD0181 @@ -3456,7 +3456,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near + // [85] phi from main::@5 to memset [phi:main::@5->memset] jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi main::y#4 = 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 @@ -3485,7 +3485,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show -- call_phi_near + // [15] call show jsr show // main::@7 // show(c++, x, y, FONT_COMPRESSED_MAP); @@ -3792,7 +3792,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] jsr font_find // char found = font_find(next_original, font_compressed, font_size) // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/examples/c64/kernalload/kernalload.log b/src/test/ref/examples/c64/kernalload/kernalload.log index f2753c471..b0fba1a3b 100644 --- a/src/test/ref/examples/c64/kernalload/kernalload.log +++ b/src/test/ref/examples/c64/kernalload/kernalload.log @@ -763,7 +763,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 - // [1] call loadFileToMemory -- call_phi_near + // [1] call loadFileToMemory // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -783,7 +783,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error -- call_phi_near + // [7] call error jsr error jmp __b1 // main::@1 @@ -835,7 +835,7 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam -- call_phi_near + // [16] call setnam jsr setnam jmp __b1 // loadFileToMemory::@1 @@ -843,7 +843,7 @@ loadFileToMemory: { // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs -- call_phi_near + // [18] call setlfs jsr setlfs jmp __b2 // loadFileToMemory::@2 @@ -856,7 +856,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load -- call_phi_near + // [21] call load jsr load // [22] load::return#0 = load::return#2 jmp __b3 @@ -898,7 +898,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near + // [41] phi from setnam to strlen [phi:setnam->strlen] strlen_from_setnam: jsr strlen // [29] strlen::return#2 = strlen::len#2 @@ -1187,7 +1187,7 @@ Score: 720 main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 // char status = loadFileToMemory(8, "SPRITE", LOAD_SPRITE) - // [1] call loadFileToMemory -- call_phi_near + // [1] call loadFileToMemory // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -1206,7 +1206,7 @@ main: { // error(status) // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error -- call_phi_near + // [7] call error jsr error // main::@1 __b1: @@ -1257,14 +1257,14 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam -- call_phi_near + // [16] call setnam jsr setnam // loadFileToMemory::@1 // setlfs(device) // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs -- call_phi_near + // [18] call setlfs jsr setlfs // loadFileToMemory::@2 // load(address, 0) @@ -1276,7 +1276,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load -- call_phi_near + // [21] call load jsr load // [22] load::return#0 = load::return#2 // loadFileToMemory::@3 @@ -1316,7 +1316,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near + // [41] phi from setnam to strlen [phi:setnam->strlen] jsr strlen // strlen(filename) // [29] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/examples/c64/krillload/krillload.log b/src/test/ref/examples/c64/krillload/krillload.log index c9c97817f..665ca6f4e 100644 --- a/src/test/ref/examples/c64/krillload/krillload.log +++ b/src/test/ref/examples/c64/krillload/krillload.log @@ -461,7 +461,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = $ff&SPRITE/$40 - // [1] call krill_install -- call_phi_near + // [1] call krill_install // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -488,7 +488,7 @@ main: { jmp __b1 // main::@1 __b1: - // [8] call krill_loadraw -- call_phi_near + // [8] call krill_loadraw jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 jmp __b7 @@ -744,7 +744,7 @@ Score: 128 main: { .const toSpritePtr1_return = $ff&SPRITE/$40 // char status = krill_install() - // [1] call krill_install -- call_phi_near + // [1] call krill_install // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -767,7 +767,7 @@ main: { // main::@1 __b1: // krill_loadraw("sprite") - // [8] call krill_loadraw -- call_phi_near + // [8] call krill_loadraw jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 // main::@7 diff --git a/src/test/ref/examples/c64/linking/linking.log b/src/test/ref/examples/c64/linking/linking.log index 8cb2caf14..fadfb0a08 100644 --- a/src/test/ref/examples/c64/linking/linking.log +++ b/src/test/ref/examples/c64/linking/linking.log @@ -330,7 +330,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] fillscreen_from___b2: jsr fillscreen jmp __b3 @@ -496,7 +496,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] jsr fillscreen // main::@3 // (*BG_COLOR)++; diff --git a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log index 09f17dcee..e8051dc8f 100644 --- a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log @@ -1674,7 +1674,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -1686,7 +1686,7 @@ __start: { main: { // asm { sei } sei - // [10] call init -- call_phi_near + // [10] call init jsr init // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1694,7 +1694,7 @@ main: { // main::@1 __b1: // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [29] phi from main::@1 to loop [phi:main::@1->loop] loop_from___b1: jsr loop jmp __breturn @@ -1713,7 +1713,7 @@ init: { sta D011 // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [54] phi from init to plexInit [phi:init->plexInit] plexInit_from_init: jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] @@ -1850,7 +1850,7 @@ loop: { // [40] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] plexSort_from___b5: jsr plexSort jmp __b11 @@ -1903,7 +1903,7 @@ loop: { __b9: // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [50] call plexShowSprite -- call_phi_near + // [50] call plexShowSprite jsr plexShowSprite jmp __b12 // loop::@12 @@ -2583,7 +2583,7 @@ __start: { sta.z plex_free_next // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -2595,13 +2595,13 @@ main: { // asm { sei } sei // init() - // [10] call init -- call_phi_near + // [10] call init jsr init // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [29] phi from main::@1 to loop [phi:main::@1->loop] jsr loop // main::@return // } @@ -2620,7 +2620,7 @@ init: { // plexInit(SCREEN) // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [54] phi from init to plexInit [phi:init->plexInit] jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] // [16] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -2748,7 +2748,7 @@ loop: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexSort() // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] jsr plexSort // loop::@11 // VICII->BORDER_COLOR = BLACK @@ -2796,7 +2796,7 @@ loop: { // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexShowSprite() - // [50] call plexShowSprite -- call_phi_near + // [50] call plexShowSprite jsr plexShowSprite // loop::@12 // for( char ss: 0..PLEX_COUNT-1) diff --git a/src/test/ref/examples/c64/nmisamples/nmisamples.log b/src/test/ref/examples/c64/nmisamples/nmisamples.log index 3943b2d56..3b7a48291 100644 --- a/src/test/ref/examples/c64/nmisamples/nmisamples.log +++ b/src/test/ref/examples/c64/nmisamples/nmisamples.log @@ -329,7 +329,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -573,7 +573,7 @@ __start: { sta.z sample+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/rasterbars/raster-bars.log b/src/test/ref/examples/c64/rasterbars/raster-bars.log index df81be3ca..c46d54f43 100644 --- a/src/test/ref/examples/c64/rasterbars/raster-bars.log +++ b/src/test/ref/examples/c64/rasterbars/raster-bars.log @@ -248,7 +248,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call raster -- call_phi_near + // [4] call raster jsr raster jmp __b1 } @@ -419,7 +419,7 @@ main: { // [3] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // raster() - // [4] call raster -- call_phi_near + // [4] call raster jsr raster jmp __b1 } diff --git a/src/test/ref/examples/c64/scroll/scroll.log b/src/test/ref/examples/c64/scroll/scroll.log index 5cdde9acf..0369e4d2d 100644 --- a/src/test/ref/examples/c64/scroll/scroll.log +++ b/src/test/ref/examples/c64/scroll/scroll.log @@ -517,7 +517,7 @@ main: { .label line = SCREEN+$28 .label nxt = 4 // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [21] phi from main to fillscreen [phi:main->fillscreen] fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -802,7 +802,7 @@ main: { .label nxt = 4 // fillscreen(SCREEN, $20) // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [21] phi from main to fillscreen [phi:main->fillscreen] jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::nxt#10 = TEXT [phi:main->main::@1#0] -- pbuz1=pbuc1 diff --git a/src/test/ref/examples/c64/scrollbig/scrollbig.log b/src/test/ref/examples/c64/scrollbig/scrollbig.log index ef0ad24ba..8c184af4f 100644 --- a/src/test/ref/examples/c64/scrollbig/scrollbig.log +++ b/src/test/ref/examples/c64/scrollbig/scrollbig.log @@ -1466,7 +1466,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [8] phi from main to fillscreen [phi:main->fillscreen] fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1514,7 +1514,7 @@ main: { __b3: // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR - // [6] call scroll_soft -- call_phi_near + // [6] call scroll_soft jsr scroll_soft jmp __b4 // main::@4 @@ -1581,7 +1581,7 @@ scroll_soft: { jmp __b2 // scroll_soft::@2 __b2: - // [17] call scroll_bit -- call_phi_near + // [17] call scroll_bit jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] __b1_from___b2: @@ -1623,7 +1623,7 @@ scroll_bit: { jmp __b2 // scroll_bit::@2 __b2: - // [24] call next_char -- call_phi_near + // [24] call next_char jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -1666,7 +1666,7 @@ scroll_bit: { // scroll_bit::@1 __b1: // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] scroll_hard_from___b1: jsr scroll_hard jmp __b7 @@ -2044,7 +2044,7 @@ Score: 20882 main: { // fillscreen(SCREEN, $20) // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [8] phi from main to fillscreen [phi:main->fillscreen] jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi current_chargen#28 = CHARGEN [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2087,7 +2087,7 @@ main: { // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // scroll_soft() - // [6] call scroll_soft -- call_phi_near + // [6] call scroll_soft jsr scroll_soft // main::@4 // --VICII->BG_COLOR; @@ -2151,7 +2151,7 @@ scroll_soft: { // [16] phi from scroll_soft to scroll_soft::@2 [phi:scroll_soft->scroll_soft::@2] // scroll_soft::@2 // scroll_bit() - // [17] call scroll_bit -- call_phi_near + // [17] call scroll_bit jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] // [18] phi current_chargen#12 = current_chargen#21 [phi:scroll_soft::@2->scroll_soft::@1#0] -- register_copy @@ -2189,7 +2189,7 @@ scroll_bit: { // [23] phi from scroll_bit to scroll_bit::@2 [phi:scroll_bit->scroll_bit::@2] // scroll_bit::@2 // unsigned int c = next_char() - // [24] call next_char -- call_phi_near + // [24] call next_char jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -2229,7 +2229,7 @@ scroll_bit: { __b1: // scroll_hard() // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] jsr scroll_hard // scroll_bit::@7 // asm diff --git a/src/test/ref/examples/c64/showlogo/showlogo.log b/src/test/ref/examples/c64/showlogo/showlogo.log index a73435332..ec8afeea4 100644 --- a/src/test/ref/examples/c64/showlogo/showlogo.log +++ b/src/test/ref/examples/c64/showlogo/showlogo.log @@ -641,7 +641,7 @@ main: { memset_from___b3: // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -657,7 +657,7 @@ main: { memset_from___b4: // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -916,7 +916,7 @@ main: { // [16] phi from main::@3 to memset [phi:main::@3->memset] // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -929,7 +929,7 @@ main: { // [16] phi from main::@4 to memset [phi:main::@4->memset] // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS diff --git a/src/test/ref/examples/c64/zpcode/zpcode.log b/src/test/ref/examples/c64/zpcode/zpcode.log index ba4f154fd..5de3e625f 100644 --- a/src/test/ref/examples/c64/zpcode/zpcode.log +++ b/src/test/ref/examples/c64/zpcode/zpcode.log @@ -382,7 +382,7 @@ main: { __b4: // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near + // [17] phi from main::@4 to loop [phi:main::@4->loop] loop_from___b4: jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -392,7 +392,7 @@ main: { __b5: // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] zpLoop_from___b5: jsr zpLoop jmp __b6 @@ -581,14 +581,14 @@ main: { // loop() // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near + // [17] phi from main::@4 to loop [phi:main::@4->loop] jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // zpLoop() // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] jsr zpLoop // main::@6 // *BG_COLOR = 0 diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.log b/src/test/ref/examples/cx16/cx16-rasterbars.log index 10ffb8032..18cd7a889 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.log +++ b/src/test/ref/examples/cx16/cx16-rasterbars.log @@ -998,7 +998,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [51] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1083,7 +1083,7 @@ irq_line: { __b1: // [27] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] -- call_phi_near + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] memset_from___b1: jsr memset jmp __b19 @@ -1567,7 +1567,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [51] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -1652,7 +1652,7 @@ irq_line: { // memset(BARS, 0, sizeof(BARS)) // [27] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] -- call_phi_near + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] jsr memset // irq_line::@19 // char idx = sin_idx-- diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index 4fa87ecd3..06f0e6a9a 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -1423,7 +1423,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1431,7 +1431,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1467,7 +1467,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1508,7 +1508,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1520,14 +1520,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } // main main: { // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [50] phi from main to printf_str [phi:main->printf_str] printf_str_from_main: jsr printf_str jmp __breturn @@ -1663,7 +1663,7 @@ cputln: { sta.z conio_cursor_x // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [48] call cscroll -- call_phi_near + // [48] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -1735,7 +1735,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -1754,7 +1754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -1770,7 +1770,7 @@ cscroll: { memset_from___b3: // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1786,7 +1786,7 @@ cscroll: { memset_from___b4: // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2178,12 +2178,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2212,7 +2212,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -2251,7 +2251,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -2262,7 +2262,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -2270,7 +2270,7 @@ cputc: { main: { // printf("hello world!\n") // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [50] phi from main to printf_str [phi:main->printf_str] jsr printf_str // main::@return // } @@ -2407,7 +2407,7 @@ cputln: { // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [48] call cscroll -- call_phi_near + // [48] call cscroll jsr cscroll // cputln::@return // } @@ -2474,7 +2474,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2490,7 +2490,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2503,7 +2503,7 @@ cscroll: { // [82] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2516,7 +2516,7 @@ cscroll: { // [82] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/examples/mega65/32bit-addressing-mega65.log b/src/test/ref/examples/mega65/32bit-addressing-mega65.log index 3a5303669..f50f22628 100644 --- a/src/test/ref/examples/mega65/32bit-addressing-mega65.log +++ b/src/test/ref/examples/mega65/32bit-addressing-mega65.log @@ -151,7 +151,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ __start: { sta.z ADDR32+3 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/mega65/banked-music.log b/src/test/ref/examples/mega65/banked-music.log index 1f4c72627..483f214bb 100644 --- a/src/test/ref/examples/mega65/banked-music.log +++ b/src/test/ref/examples/mega65/banked-music.log @@ -1140,7 +1140,7 @@ irq: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] memoryRemapBlock_from_irq: jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] @@ -1167,7 +1167,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1217,7 +1217,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1253,7 +1253,7 @@ main: { // open sideborder ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO - // [20] call memcpy_dma4 -- call_phi_near + // [20] call memcpy_dma4 // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1263,7 +1263,7 @@ main: { __b6: // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] memoryRemapBlock_from___b6: jsr memoryRemapBlock jmp __b7 @@ -1290,7 +1290,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1386,7 +1386,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 lda #pageOffset @@ -1847,7 +1847,7 @@ irq: { // memoryRemapBlock(0x40, 0x100) // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] // irq::@4 @@ -1867,7 +1867,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1912,7 +1912,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1952,7 +1952,7 @@ main: { ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO // memcpy_dma4(1, (void*)0x0000, 0, upperCodeData, MUSIC_END-MUSIC) - // [20] call memcpy_dma4 -- call_phi_near + // [20] call memcpy_dma4 // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1960,7 +1960,7 @@ main: { // memoryRemapBlock(0x40, 0x100) // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] jsr memoryRemapBlock // main::@7 // asm @@ -1982,7 +1982,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -2078,7 +2078,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 lda #pageOffset diff --git a/src/test/ref/examples/mega65/camelot-1536dots.log b/src/test/ref/examples/mega65/camelot-1536dots.log index 5966d3c76..516889aad 100644 --- a/src/test/ref/examples/mega65/camelot-1536dots.log +++ b/src/test/ref/examples/mega65/camelot-1536dots.log @@ -2901,7 +2901,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [10] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2927,7 +2927,7 @@ main: { jmp __b6 // main::@6 __b6: - // [13] call memoryRemap -- call_phi_near + // [13] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b10 @@ -2960,7 +2960,7 @@ main: { lda #VICIV_VFAST ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [21] call graphics_mode -- call_phi_near + // [21] call graphics_mode // Initialize graphics jsr graphics_mode jmp __b11 @@ -3053,7 +3053,7 @@ main: { stz SPRITES_XMSB // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] init_plot_from___b9: jsr init_plot jmp __b12 @@ -3116,7 +3116,7 @@ main: { // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] memset_dma_from___b5: - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy jsr memset_dma jmp __b13 // main::@13 @@ -3124,7 +3124,7 @@ main: { // [56] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR) = PURPLE -- _deref_pbuc1=vbuc2 ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR - // [57] call render_dots -- call_phi_near + // [57] call render_dots // Render some dots jsr render_dots jmp __b14 @@ -3327,7 +3327,7 @@ graphics_mode: { // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] memset_dma_from___b8: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS1 @@ -3341,7 +3341,7 @@ graphics_mode: { // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] memset_dma_from___b11: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS2 @@ -3360,7 +3360,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke -- call_phi_near + // [93] call lpoke jsr lpoke jmp __b9 // graphics_mode::@9 @@ -3373,7 +3373,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke -- call_phi_near + // [97] call lpoke // No extended attributes jsr lpoke jmp __b10 @@ -3840,7 +3840,7 @@ render_dots: { ldy #0 adc (__25),y taz - // [161] call plot -- call_phi_near + // [161] call plot jsr plot jmp __b18 // render_dots::@18 @@ -4681,7 +4681,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [10] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -4701,7 +4701,7 @@ main: { // [12] phi from main::SEI1 to main::@6 [phi:main::SEI1->main::@6] // main::@6 // memoryRemap(0x00,0,0) - // [13] call memoryRemap -- call_phi_near + // [13] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@10 @@ -4740,7 +4740,7 @@ main: { ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC // graphics_mode() - // [21] call graphics_mode -- call_phi_near + // [21] call graphics_mode // Initialize graphics jsr graphics_mode // main::@11 @@ -4831,7 +4831,7 @@ main: { // init_plot() // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] jsr init_plot // main::@12 // asm @@ -4894,7 +4894,7 @@ main: { // [55] call memset_dma // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy jsr memset_dma // main::@13 // VICIV->BORDER_COLOR = PURPLE @@ -4902,7 +4902,7 @@ main: { ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR // render_dots() - // [57] call render_dots -- call_phi_near + // [57] call render_dots // Render some dots jsr render_dots // main::@14 @@ -5114,7 +5114,7 @@ graphics_mode: { // [87] call memset_dma // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS1 @@ -5125,7 +5125,7 @@ graphics_mode: { // memset_dma(GRAPHICS2, 0x00, 40*25*8) // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS2 @@ -5144,7 +5144,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke -- call_phi_near + // [93] call lpoke jsr lpoke // graphics_mode::@9 // lpoke(cols++, 0); @@ -5157,7 +5157,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke -- call_phi_near + // [97] call lpoke // No extended attributes jsr lpoke // graphics_mode::@10 @@ -5626,7 +5626,7 @@ render_dots: { clc adc (__25),y taz - // [161] call plot -- call_phi_near + // [161] call plot jsr plot // render_dots::@18 // idx_x1 -= 11 diff --git a/src/test/ref/examples/mega65/dma-test.log b/src/test/ref/examples/mega65/dma-test.log index 1357cda42..6b118ed53 100644 --- a/src/test/ref/examples/mega65/dma-test.log +++ b/src/test/ref/examples/mega65/dma-test.log @@ -384,7 +384,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b1 @@ -570,7 +570,7 @@ Score: 81 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@1 diff --git a/src/test/ref/examples/mega65/dma-test2.log b/src/test/ref/examples/mega65/dma-test2.log index 57c7da4f7..620a9ffa2 100644 --- a/src/test/ref/examples/mega65/dma-test2.log +++ b/src/test/ref/examples/mega65/dma-test2.log @@ -511,7 +511,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -519,7 +519,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma -- call_phi_near + // [3] call memcpy_dma // Move screen up using DMA jsr memcpy_dma jmp __breturn @@ -759,13 +759,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma(DEFAULT_SCREEN, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma -- call_phi_near + // [3] call memcpy_dma // Move screen up using DMA jsr memcpy_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test3.log b/src/test/ref/examples/mega65/dma-test3.log index 8673a5c03..f4fb1aa35 100644 --- a/src/test/ref/examples/mega65/dma-test3.log +++ b/src/test/ref/examples/mega65/dma-test3.log @@ -547,7 +547,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -555,7 +555,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma4 -- call_phi_near + // [3] call memcpy_dma4 // Move screen up using DMA jsr memcpy_dma4 jmp __breturn @@ -813,13 +813,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma4(0, DEFAULT_SCREEN, 0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma4 -- call_phi_near + // [3] call memcpy_dma4 // Move screen up using DMA jsr memcpy_dma4 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test4.log b/src/test/ref/examples/mega65/dma-test4.log index 9499054f2..4b42f4f75 100644 --- a/src/test/ref/examples/mega65/dma-test4.log +++ b/src/test/ref/examples/mega65/dma-test4.log @@ -665,7 +665,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -673,7 +673,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma256 -- call_phi_near + // [3] call memcpy_dma256 // Move screen up using DMA jsr memcpy_dma256 jmp __breturn @@ -957,13 +957,13 @@ Score: 155 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma256(0,0, DEFAULT_SCREEN, 0,0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma256 -- call_phi_near + // [3] call memcpy_dma256 // Move screen up using DMA jsr memcpy_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test5.log b/src/test/ref/examples/mega65/dma-test5.log index b77b5b6cf..d58be21be 100644 --- a/src/test/ref/examples/mega65/dma-test5.log +++ b/src/test/ref/examples/mega65/dma-test5.log @@ -507,7 +507,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -515,7 +515,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma -- call_phi_near + // [3] call memset_dma // Fill screen up using DMA jsr memset_dma jmp __breturn @@ -755,13 +755,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma(DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma -- call_phi_near + // [3] call memset_dma // Fill screen up using DMA jsr memset_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test6.log b/src/test/ref/examples/mega65/dma-test6.log index 632c2b1ea..3145ecb9f 100644 --- a/src/test/ref/examples/mega65/dma-test6.log +++ b/src/test/ref/examples/mega65/dma-test6.log @@ -611,7 +611,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -619,7 +619,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma256 -- call_phi_near + // [3] call memset_dma256 // Fill screen up using 256MB DMA jsr memset_dma256 jmp __breturn @@ -884,13 +884,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma256(0, 0, DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma256 -- call_phi_near + // [3] call memset_dma256 // Fill screen up using 256MB DMA jsr memset_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dypp65.log b/src/test/ref/examples/mega65/dypp65.log index 178673d08..164eb0c8e 100644 --- a/src/test/ref/examples/mega65/dypp65.log +++ b/src/test/ref/examples/mega65/dypp65.log @@ -1460,7 +1460,7 @@ main: { jmp __b11 // main::@11 __b11: - // [3] call memoryRemap -- call_phi_near + // [3] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b12 @@ -1563,7 +1563,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 ldz #0 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -1574,7 +1574,7 @@ main: { jmp __b13 // main::@13 __b13: - // [30] call memset_dma256 -- call_phi_near + // [30] call memset_dma256 // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1593,7 +1593,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 @@ -2236,7 +2236,7 @@ main: { // [2] phi from main::SEI1 to main::@11 [phi:main::SEI1->main::@11] // main::@11 // memoryRemap(0,0,0) - // [3] call memoryRemap -- call_phi_near + // [3] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@12 @@ -2354,7 +2354,7 @@ main: { lda #>SCREEN sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -2363,7 +2363,7 @@ main: { // [29] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // memset_dma256(0xff,0x08,(void*)0x0000, WHITE, 45*25*2) - // [30] call memset_dma256 -- call_phi_near + // [30] call memset_dma256 // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2379,7 +2379,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 diff --git a/src/test/ref/examples/mega65/helloworld-mega65.log b/src/test/ref/examples/mega65/helloworld-mega65.log index 3d741a72b..f4fcca264 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.log +++ b/src/test/ref/examples/mega65/helloworld-mega65.log @@ -1699,7 +1699,7 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] conio_mega65_init_from___init1: jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -1708,7 +1708,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [34] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1732,7 +1732,7 @@ conio_mega65_init: { jmp __b2 // conio_mega65_init::@2 __b2: - // [12] call memoryRemap -- call_phi_near + // [12] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b3 @@ -1773,7 +1773,7 @@ conio_mega65_init: { // conio_mega65_init::@1 __b1: // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy -- call_phi_near + // [21] call gotoxy jsr gotoxy jmp __breturn // conio_mega65_init::@return @@ -1814,7 +1814,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [30] call cputln -- call_phi_near + // [30] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1826,14 +1826,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [33] call cputln -- call_phi_near + // [33] call cputln jsr cputln jmp __breturn } // main main: { // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [63] phi from main to printf_str [phi:main->printf_str] printf_str_from_main: jsr printf_str jmp __breturn @@ -2026,7 +2026,7 @@ cputln: { stz.z conio_cursor_x // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [61] call cscroll -- call_phi_near + // [61] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2095,7 +2095,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$50 @@ -2114,7 +2114,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$50 @@ -2130,7 +2130,7 @@ cscroll: { memset_from___b3: // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2146,7 +2146,7 @@ cscroll: { memset_from___b4: // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$50-$50 @@ -2569,12 +2569,12 @@ __start: { sta.z conio_line_color+1 // #pragma constructor_for(conio_mega65_init, cputc, clrscr, cscroll) // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [34] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2592,7 +2592,7 @@ conio_mega65_init: { // [11] phi from conio_mega65_init::SEI1 to conio_mega65_init::@2 [phi:conio_mega65_init::SEI1->conio_mega65_init::@2] // conio_mega65_init::@2 // memoryRemap(0,0,0) - // [12] call memoryRemap -- call_phi_near + // [12] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // conio_mega65_init::@3 @@ -2630,7 +2630,7 @@ conio_mega65_init: { __b1: // gotoxy(0, line) // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy -- call_phi_near + // [21] call gotoxy jsr gotoxy // conio_mega65_init::@return // } @@ -2669,7 +2669,7 @@ cputc: { // [29] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [30] call cputln -- call_phi_near + // [30] call cputln jsr cputln // cputc::@return __breturn: @@ -2680,7 +2680,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [33] call cputln -- call_phi_near + // [33] call cputln jsr cputln rts } @@ -2688,7 +2688,7 @@ cputc: { main: { // printf("hello world!") // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [63] phi from main to printf_str [phi:main->printf_str] jsr printf_str // main::@return // } @@ -2882,7 +2882,7 @@ cputln: { // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [61] call cscroll -- call_phi_near + // [61] call cscroll jsr cscroll // cputln::@return // } @@ -2946,7 +2946,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$50 @@ -2962,7 +2962,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$50 @@ -2975,7 +2975,7 @@ cscroll: { // [95] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2988,7 +2988,7 @@ cscroll: { // [95] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$50-$50 diff --git a/src/test/ref/examples/mega65/memorymap-test.log b/src/test/ref/examples/mega65/memorymap-test.log index e9f734cad..34e9e57ef 100644 --- a/src/test/ref/examples/mega65/memorymap-test.log +++ b/src/test/ref/examples/mega65/memorymap-test.log @@ -1023,7 +1023,7 @@ main: { // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] memoryRemapBlock_from_main: - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$40 jsr memoryRemapBlock jmp __b7 @@ -1040,7 +1040,7 @@ main: { // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] memoryRemapBlock_from___b7: - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$80 jsr memoryRemapBlock jmp __b8 @@ -1064,7 +1064,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1102,7 +1102,7 @@ main: { memoryRemap256M_from___b3: // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1134,7 +1134,7 @@ main: { memoryRemap256M_from___b6: // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 lda #0 sta.z memoryRemap256M.lowerPageOffset lda #0 @@ -1223,7 +1223,7 @@ memoryRemapBlock: { memoryRemap_from_memoryRemapBlock: // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy jsr memoryRemap jmp __breturn // memoryRemapBlock::@return @@ -1611,7 +1611,7 @@ main: { // [1] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$40 jsr memoryRemapBlock // main::@7 @@ -1628,7 +1628,7 @@ main: { // [4] call memoryRemapBlock // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$80 jsr memoryRemapBlock // main::@8 @@ -1652,7 +1652,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1686,7 +1686,7 @@ main: { // [46] phi from main::@3 to memoryRemap256M [phi:main::@3->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1714,7 +1714,7 @@ main: { // [46] phi from main::@6 to memoryRemap256M [phi:main::@6->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 txa sta.z memoryRemap256M.lowerPageOffset sta.z memoryRemap256M.lowerPageOffset+1 @@ -1807,7 +1807,7 @@ memoryRemapBlock: { // [33] phi from memoryRemapBlock to memoryRemap [phi:memoryRemapBlock->memoryRemap] // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy jsr memoryRemap // memoryRemapBlock::@return // } diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index 6c6c84084..a3be84bda 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -2201,7 +2201,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -2747,7 +2747,7 @@ main: { __b1: // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near + // [144] phi from main::@1 to memset [phi:main::@1->memset] memset_from___b1: jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -3403,7 +3403,7 @@ __start: { stz.z greet_idx // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -3965,7 +3965,7 @@ main: { // memset(SCREEN, ' ', 40*25) // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near + // [144] phi from main::@1 to memset [phi:main::@1->memset] jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/examples/nes/nes-dxycp.log b/src/test/ref/examples/nes/nes-dxycp.log index 7640dad65..fdccbdbe3 100644 --- a/src/test/ref/examples/nes/nes-dxycp.log +++ b/src/test/ref/examples/nes/nes-dxycp.log @@ -2194,7 +2194,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [45] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2242,7 +2242,7 @@ vblank: { jmp __b14 // vblank::@14 __b14: - // [12] call readJoy1 -- call_phi_near + // [12] call readJoy1 // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -2538,7 +2538,7 @@ main: { __b4: // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] ppuDataTransfer_from___b4: jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2557,7 +2557,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -2578,7 +2578,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 @@ -3276,7 +3276,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [45] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [6] return @@ -3318,7 +3318,7 @@ vblank: { // [11] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@14 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@14] // vblank::@14 // char joy = readJoy1() - // [12] call readJoy1 -- call_phi_near + // [12] call readJoy1 // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -3596,7 +3596,7 @@ main: { // ppuDataTransfer(PPU_PALETTE, PALETTE, sizeof(PALETTE)) // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3611,7 +3611,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -3629,7 +3629,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.log b/src/test/ref/examples/plus4/plus4-randomwalk.log index 9b13addd0..91996d03d 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.log +++ b/src/test/ref/examples/plus4/plus4-randomwalk.log @@ -1195,7 +1195,7 @@ main: { memset_from_main: // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN @@ -1211,7 +1211,7 @@ main: { memset_from___b10: // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_COLORRAM @@ -1227,7 +1227,7 @@ main: { memset_from___b11: // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 lda #VISITS @@ -1332,7 +1332,7 @@ main: { lda FADE,y ldy #0 sta (__8),y - // [20] call rand -- call_phi_near + // [20] call rand jsr rand // [21] rand::return#2 = rand::return#0 jmp __b13 @@ -1814,7 +1814,7 @@ main: { // [44] phi from main to memset [phi:main->memset] // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN @@ -1827,7 +1827,7 @@ main: { // [44] phi from main::@10 to memset [phi:main::@10->memset] // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_COLORRAM @@ -1840,7 +1840,7 @@ main: { // [44] phi from main::@11 to memset [phi:main::@11->memset] // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 lda #VISITS @@ -1946,7 +1946,7 @@ main: { ldy #0 sta (__8),y // rand() - // [20] call rand -- call_phi_near + // [20] call rand jsr rand // [21] rand::return#2 = rand::return#0 // main::@13 diff --git a/src/test/ref/examples/rom/rom.log b/src/test/ref/examples/rom/rom.log index 6fc4558a9..42362a5cd 100644 --- a/src/test/ref/examples/rom/rom.log +++ b/src/test/ref/examples/rom/rom.log @@ -567,7 +567,7 @@ main: { call2_from_main: // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 ldx #1 jsr call2 // [13] call2::return = call2::return @@ -583,7 +583,7 @@ main: { call2_from___b1: // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 ldx #3 jsr call2 // [17] call2::return = call2::return @@ -599,7 +599,7 @@ main: { call3_from___b2: // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 ldx #1 jsr call3 // [21] call3::return#2 = call3::return#0 @@ -614,7 +614,7 @@ main: { call3_from___b3: // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 ldx #3 jsr call3 // [25] call3::return#3 = call3::return#0 @@ -828,7 +828,7 @@ main: { // [34] phi from main to call2 [phi:main->call2] // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 ldx #1 jsr call2 // call2(1,2) @@ -844,7 +844,7 @@ main: { // [34] phi from main::@1 to call2 [phi:main::@1->call2] // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 ldx #3 jsr call2 // call2(3,4) @@ -860,7 +860,7 @@ main: { // [38] phi from main::@2 to call3 [phi:main::@2->call3] // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 ldx #1 jsr call3 // call3(1,2) @@ -875,7 +875,7 @@ main: { // [38] phi from main::@3 to call3 [phi:main::@3->call3] // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 ldx #3 jsr call3 // call3(3,4) diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index d38c416eb..317adebed 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -718,7 +718,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near + // [11] phi from main to prepare [phi:main->prepare] prepare_from_main: jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] @@ -759,7 +759,7 @@ main: { // main::@4 __b4: // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near + // [17] phi from main::@4 to flip [phi:main::@4->flip] flip_from___b4: jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -768,7 +768,7 @@ main: { // main::@5 __b5: // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near + // [33] phi from main::@5 to plot [phi:main::@5->plot] plot_from___b5: jsr plot jmp __b1_from___b5 @@ -1111,7 +1111,7 @@ Score: 83294 main: { // prepare() // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near + // [11] phi from main to prepare [phi:main->prepare] jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] __b3: @@ -1144,13 +1144,13 @@ main: { // main::@4 // flip() // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near + // [17] phi from main::@4 to flip [phi:main::@4->flip] jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // plot() // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near + // [33] phi from main::@5 to plot [phi:main::@5->plot] jsr plot jmp __b3 } diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index 8ee442525..d0df97974 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -696,7 +696,7 @@ main: { lda #toD0181_return sta D018 // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] init_font_hex_from___b2: jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] @@ -1026,7 +1026,7 @@ main: { sta D018 // init_font_hex(CHARSET) // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::c#2 = 0 [phi:main::@2->main::@1#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index 0c290d92f..408bca681 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -311,7 +311,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 ldx #$aa jsr fct // [3] fct::return#0 = fct::return#2 @@ -329,7 +329,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 ldx #$55 jsr fct // [7] fct::return#1 = fct::return#2 @@ -440,7 +440,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 ldx #$aa jsr fct // byte a1 = fct(x, z) @@ -458,7 +458,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 ldx #$55 jsr fct // byte a2 = fct(x, z) diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index c97d8efa9..ad1a43be9 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -298,7 +298,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.b lda #>$a @@ -326,7 +326,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 sta.z mul16u.b lda #>$3e8 @@ -458,7 +458,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.b lda #>$a @@ -486,7 +486,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 sta.z mul16u.b lda #>$3e8 diff --git a/src/test/ref/function-pointer-advanced-1.log b/src/test/ref/function-pointer-advanced-1.log index 1692d8760..73b175d3d 100644 --- a/src/test/ref/function-pointer-advanced-1.log +++ b/src/test/ref/function-pointer-advanced-1.log @@ -1256,7 +1256,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [29] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1409,7 +1409,7 @@ main: { jmp __b3 // main::@3 __b3: - // [33] call ln -- call_phi_near + // [33] call ln jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -1419,7 +1419,7 @@ main: { // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] exec_from___b6: - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 lda #sum @@ -1430,7 +1430,7 @@ main: { jmp __b7 // main::@7 __b7: - // [37] call ln -- call_phi_near + // [37] call ln jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -1440,7 +1440,7 @@ main: { // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] exec_from___b8: - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 lda #min @@ -1451,7 +1451,7 @@ main: { jmp __b9 // main::@9 __b9: - // [41] call ln -- call_phi_near + // [41] call ln jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -1461,7 +1461,7 @@ main: { // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] exec_from___b10: - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 lda #max @@ -1472,7 +1472,7 @@ main: { jmp __b11 // main::@11 __b11: - // [45] call ln -- call_phi_near + // [45] call ln jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] __b12_from___b11: @@ -1482,7 +1482,7 @@ main: { // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] exec_from___b12: - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 lda #xor @@ -1503,7 +1503,7 @@ main: { // [76] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: @@ -1514,7 +1514,7 @@ main: { // [84] phi from main::@4 to cout [phi:main::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout jmp __b5 @@ -1556,7 +1556,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -1568,7 +1568,7 @@ exec: { // [84] phi from exec::@4 to cout [phi:exec::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -1580,7 +1580,7 @@ exec: { // [84] phi from exec::@5 to cout [phi:exec::@5->cout] cout_from___b5: // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout jmp __b6 @@ -1631,7 +1631,7 @@ exec: { // [76] phi from exec::@3 to print [phi:exec::@3->print] print_from___b3: // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] __b7_from___b3: @@ -1642,7 +1642,7 @@ exec: { // [84] phi from exec::@7 to cout [phi:exec::@7->cout] cout_from___b7: // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout jmp __b8 @@ -1676,7 +1676,7 @@ print: { // [84] phi from print to cout [phi:print->cout] cout_from_print: // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy jsr cout jmp __b1 // print::@1 @@ -1691,7 +1691,7 @@ print: { // [84] phi from print::@1 to cout [phi:print::@1->cout] cout_from___b1: // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy jsr cout jmp __breturn // print::@return @@ -1965,7 +1965,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [29] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -2113,14 +2113,14 @@ main: { // [32] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // ln() - // [33] call ln -- call_phi_near + // [33] call ln jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 // exec(&sum) // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 lda #sum @@ -2129,14 +2129,14 @@ main: { // [36] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // ln() - // [37] call ln -- call_phi_near + // [37] call ln jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // exec(&min) // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 lda #min @@ -2145,14 +2145,14 @@ main: { // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // ln() - // [41] call ln -- call_phi_near + // [41] call ln jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // exec(&max) // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 lda #max @@ -2161,14 +2161,14 @@ main: { // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // ln() - // [45] call ln -- call_phi_near + // [45] call ln jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 // exec(&xor) // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 lda #xor @@ -2188,7 +2188,7 @@ main: { // [50] call print // [76] phi from main::@2 to print [phi:main::@2->print] // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] // main::@4 @@ -2196,7 +2196,7 @@ main: { // [52] call cout // [84] phi from main::@4 to cout [phi:main::@4->cout] // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // main::@5 @@ -2236,7 +2236,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -2245,7 +2245,7 @@ exec: { // [59] call cout // [84] phi from exec::@4 to cout [phi:exec::@4->cout] // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -2254,7 +2254,7 @@ exec: { // [61] call cout // [84] phi from exec::@5 to cout [phi:exec::@5->cout] // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // exec::@6 @@ -2302,7 +2302,7 @@ exec: { // [72] call print // [76] phi from exec::@3 to print [phi:exec::@3->print] // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] // exec::@7 @@ -2310,7 +2310,7 @@ exec: { // [74] call cout // [84] phi from exec::@7 to cout [phi:exec::@7->cout] // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // exec::@8 @@ -2343,7 +2343,7 @@ print: { // [79] call cout // [84] phi from print to cout [phi:print->cout] // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy jsr cout // print::@1 // i&0x0f @@ -2357,7 +2357,7 @@ print: { // [82] call cout // [84] phi from print::@1 to cout [phi:print::@1->cout] // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy jsr cout // print::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index 1d2198ef8..e0cc8628d 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -400,7 +400,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -414,7 +414,7 @@ world: { // [6] call print // [16] phi from world to print [phi:world->print] print_from_world: - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 lda #msg @@ -435,7 +435,7 @@ hello: { // [9] call print // [16] phi from hello to print [phi:hello->print] print_from_hello: - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 lda #msg @@ -456,7 +456,7 @@ main: { // [12] call do10 // [23] phi from main to do10 [phi:main->do10] do10_from_main: - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 lda #hello @@ -470,7 +470,7 @@ main: { // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] do10_from___b1: - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 lda #world @@ -654,7 +654,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -665,7 +665,7 @@ world: { // print("world ") // [6] call print // [16] phi from world to print [phi:world->print] - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 lda #msg @@ -685,7 +685,7 @@ hello: { // print("hello ") // [9] call print // [16] phi from hello to print [phi:hello->print] - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 lda #msg @@ -705,7 +705,7 @@ main: { // do10(&hello) // [12] call do10 // [23] phi from main to do10 [phi:main->do10] - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 lda #hello @@ -716,7 +716,7 @@ main: { // do10(&world) // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 lda #world diff --git a/src/test/ref/function-pointer-noarg-call-13.log b/src/test/ref/function-pointer-noarg-call-13.log index 34209ef12..8035feb5b 100644 --- a/src/test/ref/function-pointer-noarg-call-13.log +++ b/src/test/ref/function-pointer-noarg-call-13.log @@ -213,7 +213,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI -- call_phi_near + // [5] call enableDLI jsr enableDLI jmp __b1 // main::@1 @@ -223,7 +223,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI -- call_phi_near + // [7] call enableDLI jsr enableDLI jmp __breturn // main::@return @@ -325,7 +325,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI -- call_phi_near + // [5] call enableDLI jsr enableDLI // main::@1 // enableDLI(&fn2) @@ -334,7 +334,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI -- call_phi_near + // [7] call enableDLI jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-14.log b/src/test/ref/function-pointer-noarg-call-14.log index 154ebc78d..da9ae74fb 100644 --- a/src/test/ref/function-pointer-noarg-call-14.log +++ b/src/test/ref/function-pointer-noarg-call-14.log @@ -1541,7 +1541,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1549,7 +1549,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [33] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1563,7 +1563,7 @@ world: { // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] printf_str_from_world: - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -1584,7 +1584,7 @@ hello: { // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] printf_str_from_hello: - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -1627,7 +1627,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy -- call_phi_near + // [20] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1668,7 +1668,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [29] call cputln -- call_phi_near + // [29] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1680,7 +1680,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln jmp __breturn } @@ -1689,7 +1689,7 @@ main: { // [34] call f1 // [67] phi from main to f1 [phi:main->f1] f1_from_main: - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 lda #hello @@ -1703,7 +1703,7 @@ main: { // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] f1_from___b1: - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 lda #world @@ -1876,7 +1876,7 @@ cputln: { sta.z conio_cursor_x // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [65] call cscroll -- call_phi_near + // [65] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -1919,7 +1919,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -1938,7 +1938,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -1954,7 +1954,7 @@ cscroll: { memset_from___b3: // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1970,7 +1970,7 @@ cscroll: { memset_from___b4: // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2381,12 +2381,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [33] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2397,7 +2397,7 @@ world: { // printf("world!") // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -2417,7 +2417,7 @@ hello: { // printf("hello ") // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -2455,7 +2455,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy -- call_phi_near + // [20] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -2494,7 +2494,7 @@ cputc: { // [28] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [29] call cputln -- call_phi_near + // [29] call cputln jsr cputln // cputc::@return __breturn: @@ -2505,7 +2505,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln rts } @@ -2514,7 +2514,7 @@ main: { // f1(&hello) // [34] call f1 // [67] phi from main to f1 [phi:main->f1] - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 lda #hello @@ -2525,7 +2525,7 @@ main: { // f1(&world) // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 lda #world @@ -2698,7 +2698,7 @@ cputln: { // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [65] call cscroll -- call_phi_near + // [65] call cscroll jsr cscroll // cputln::@return // } @@ -2738,7 +2738,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2754,7 +2754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2767,7 +2767,7 @@ cscroll: { // [93] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2780,7 +2780,7 @@ cscroll: { // [93] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/function-pointer-noarg-call-3.log b/src/test/ref/function-pointer-noarg-call-3.log index 293123223..1aff2dbc6 100644 --- a/src/test/ref/function-pointer-noarg-call-3.log +++ b/src/test/ref/function-pointer-noarg-call-3.log @@ -334,7 +334,7 @@ main: { inc.z i // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn -- call_phi_near + // [8] call getfn jsr getfn // [9] getfn::return#0 = getfn::return#3 jmp __b3 @@ -495,7 +495,7 @@ main: { // getfn(++i) // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn -- call_phi_near + // [8] call getfn jsr getfn // [9] getfn::return#0 = getfn::return#3 // main::@3 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 6fd6ebde6..2cf1501c4 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [12] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -350,7 +350,7 @@ hello: { // main main: { // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] -- call_phi_near + // [15] phi from main to do10 [phi:main->do10] do10_from_main: jsr do10 jmp __breturn @@ -479,7 +479,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [12] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -518,7 +518,7 @@ hello: { main: { // do10(f) // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] -- call_phi_near + // [15] phi from main to do10 [phi:main->do10] jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 339af3fa2..c5d6cde97 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -341,7 +341,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -388,7 +388,7 @@ main: { lda #>msg1 sta.z msg+1 // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] -- call_phi_near + // [18] phi from main to do10 [phi:main->do10] do10_from_main: jsr do10 jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>msg2 sta.z msg+1 // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near + // [18] phi from main::@1 to do10 [phi:main::@1->do10] do10_from___b1: jsr do10 jmp __breturn @@ -543,7 +543,7 @@ __start: { sta.z idx // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return @@ -588,7 +588,7 @@ main: { sta.z msg+1 // do10(f) // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] -- call_phi_near + // [18] phi from main to do10 [phi:main->do10] jsr do10 // main::@1 // msg = msg2 @@ -599,7 +599,7 @@ main: { sta.z msg+1 // do10(f) // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near + // [18] phi from main::@1 to do10 [phi:main::@1->do10] jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index 7547a463a..e11a1a25c 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -174,7 +174,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [7] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -280,7 +280,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [7] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/function-pointer-param-workaround.log b/src/test/ref/function-pointer-param-workaround.log index e3173e1e5..98cb9eeeb 100644 --- a/src/test/ref/function-pointer-param-workaround.log +++ b/src/test/ref/function-pointer-param-workaround.log @@ -550,7 +550,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [32] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -880,7 +880,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [32] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return diff --git a/src/test/ref/function-pointer-problem-1.log b/src/test/ref/function-pointer-problem-1.log index 485a6a16d..33a272696 100644 --- a/src/test/ref/function-pointer-problem-1.log +++ b/src/test/ref/function-pointer-problem-1.log @@ -167,7 +167,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI -- call_phi_near + // [3] call enableDLI jsr enableDLI jmp __breturn // main::@return @@ -253,7 +253,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI -- call_phi_near + // [3] call enableDLI jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-return-2.log b/src/test/ref/function-pointer-return-2.log index 87123a32f..3016e22f8 100644 --- a/src/test/ref/function-pointer-return-2.log +++ b/src/test/ref/function-pointer-return-2.log @@ -267,7 +267,7 @@ main: { // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] set_border_from___b1: - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 lda #fn1 @@ -281,7 +281,7 @@ main: { // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] set_border_from___b2: - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 lda #fn2 @@ -418,7 +418,7 @@ main: { // [2] call set_border // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 lda #fn1 @@ -429,7 +429,7 @@ main: { // set_border(fn2) // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 lda #fn2 diff --git a/src/test/ref/function-pointer-return-3.log b/src/test/ref/function-pointer-return-3.log index 0e4451486..e4f571d97 100644 --- a/src/test/ref/function-pointer-return-3.log +++ b/src/test/ref/function-pointer-return-3.log @@ -384,7 +384,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run -- call_phi_near + // [6] call run jsr run jmp __b3 // main::@3 @@ -569,7 +569,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run -- call_phi_near + // [6] call run jsr run // main::@3 // for(char i=0; i < sizeof(tasks)/sizeof(struct Task); i++) diff --git a/src/test/ref/global-label-problem.log b/src/test/ref/global-label-problem.log index 64d27f2cf..630fe9e72 100644 --- a/src/test/ref/global-label-problem.log +++ b/src/test/ref/global-label-problem.log @@ -344,7 +344,7 @@ main: { print_from_main: // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 lda #msg @@ -359,7 +359,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -371,7 +371,7 @@ main: { // main::@2 __b2: // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near + // [14] phi from main::@2 to print1 [phi:main::@2->print1] print1_from___b2: jsr print1 jmp __breturn @@ -427,7 +427,7 @@ print1: { // [7] phi from print1 to print [phi:print1->print] print_from_print1: // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 lda #msg @@ -442,7 +442,7 @@ print1: { // [7] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #<@msg sta.z print.msg lda #>@msg @@ -537,7 +537,7 @@ main: { // [7] phi from main to print [phi:main->print] // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 lda #msg @@ -549,7 +549,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -559,7 +559,7 @@ main: { // main::@2 // print1() // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near + // [14] phi from main::@2 to print1 [phi:main::@2->print1] jsr print1 // main::@return // } @@ -612,7 +612,7 @@ print1: { // [15] call print // [7] phi from print1 to print [phi:print1->print] // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 lda #msg @@ -624,7 +624,7 @@ print1: { // [17] call print // [7] phi from print1::@1 to print [phi:print1::@1->print] // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #<@msg sta.z print.msg lda #>@msg diff --git a/src/test/ref/global-pc-multiple.log b/src/test/ref/global-pc-multiple.log index 5587b71f0..f2c01c47e 100644 --- a/src/test/ref/global-pc-multiple.log +++ b/src/test/ref/global-pc-multiple.log @@ -174,7 +174,7 @@ main: { jmp __b2 // main::@2 __b2: - // [4] call incScreen -- call_phi_near + // [4] call incScreen jsr incScreen jmp __b1 } @@ -252,7 +252,7 @@ main: { // main::@2 __b2: // incScreen() - // [4] call incScreen -- call_phi_near + // [4] call incScreen jsr incScreen jmp __b1 } diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index acd112cb5..d80d75484 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -260,7 +260,7 @@ main: { // [1] call print2 // [5] phi from main to print2 [phi:main->print2] print2_from_main: - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 lda #screen @@ -274,7 +274,7 @@ main: { // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] print2_from___b1: - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 lda #screen+$50 @@ -388,7 +388,7 @@ main: { // print2(screen, hello) // [1] call print2 // [5] phi from main to print2 [phi:main->print2] - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 lda #screen @@ -399,7 +399,7 @@ main: { // print2(screen+80, hello) // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 lda #screen+$50 diff --git a/src/test/ref/hex2dec-ptrptr.log b/src/test/ref/hex2dec-ptrptr.log index a6584ab71..39f626dc1 100644 --- a/src/test/ref/hex2dec-ptrptr.log +++ b/src/test/ref/hex2dec-ptrptr.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call cls - // [13] phi from main to cls [phi:main->cls] -- call_phi_near + // [13] phi from main to cls [phi:main->cls] cls_from_main: jsr cls jmp __b1 @@ -771,7 +771,7 @@ main: { // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] utoa16w_from___b1: - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value lda #>0 @@ -788,7 +788,7 @@ main: { // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -805,7 +805,7 @@ main: { // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] utoa16w_from___b3: - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -822,7 +822,7 @@ main: { // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] utoa16w_from___b4: - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -839,7 +839,7 @@ main: { // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -909,7 +909,7 @@ utoa16w: { utoa16n_from_utoa16w: // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // [23] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -925,7 +925,7 @@ utoa16w: { // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // [29] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -944,7 +944,7 @@ utoa16w: { // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n jmp __b3 // utoa16w::@3 @@ -958,7 +958,7 @@ utoa16w: { utoa16n_from___b3: // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n jmp __b4 // utoa16w::@4 @@ -1159,7 +1159,7 @@ Score: 751 main: { // cls() // [1] call cls - // [13] phi from main to cls [phi:main->cls] -- call_phi_near + // [13] phi from main to cls [phi:main->cls] jsr cls // main::@1 // utoa16w(00000, screen) @@ -1170,7 +1170,7 @@ main: { sta.z utoa16w.dst+1 // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -1184,7 +1184,7 @@ main: { sta.z utoa16w.dst+1 // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1199,7 +1199,7 @@ main: { sta.z utoa16w.dst+1 // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1214,7 +1214,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1229,7 +1229,7 @@ main: { sta.z utoa16w.dst+1 // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1296,7 +1296,7 @@ utoa16w: { // [40] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [23] utoa16n::return#0 = utoa16n::return#4 @@ -1313,7 +1313,7 @@ utoa16w: { // [28] call utoa16n // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [29] utoa16n::return#1 = utoa16n::return#4 @@ -1333,7 +1333,7 @@ utoa16w: { // [34] call utoa16n // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -1346,7 +1346,7 @@ utoa16w: { // [40] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 42d4de639..458bec309 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -1415,7 +1415,7 @@ main: { // asm { sei } sei // [1] call cls - // [31] phi from main to cls [phi:main->cls] -- call_phi_near + // [31] phi from main to cls [phi:main->cls] cls_from_main: jsr cls jmp __b1 @@ -1450,7 +1450,7 @@ main: { // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value lda #>0 @@ -1469,7 +1469,7 @@ main: { // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1488,7 +1488,7 @@ main: { // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] utoa16w_from___b6: - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1507,7 +1507,7 @@ main: { // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] utoa16w_from___b7: - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1526,7 +1526,7 @@ main: { // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] utoa16w_from___b8: - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1549,7 +1549,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] utoa10w_from___b9: jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] @@ -1638,7 +1638,7 @@ utoa16w: { utoa16n_from_utoa16w: // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // [41] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -1654,7 +1654,7 @@ utoa16w: { // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // [47] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -1673,7 +1673,7 @@ utoa16w: { // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n jmp __b3 // utoa16w::@3 @@ -1687,7 +1687,7 @@ utoa16w: { utoa16n_from___b3: // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n jmp __b4 // utoa16w::@4 @@ -2138,7 +2138,7 @@ main: { sei // cls() // [1] call cls - // [31] phi from main to cls [phi:main->cls] -- call_phi_near + // [31] phi from main to cls [phi:main->cls] jsr cls // main::@1 __b1: @@ -2175,7 +2175,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -2192,7 +2192,7 @@ main: { sta.z utoa16w.dst+1 // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -2210,7 +2210,7 @@ main: { sta.z utoa16w.dst+1 // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -2228,7 +2228,7 @@ main: { sta.z utoa16w.dst+1 // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -2246,7 +2246,7 @@ main: { sta.z utoa16w.dst+1 // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -2271,7 +2271,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] // [27] phi main::i#2 = 0 [phi:main::@9->main::@3#0] -- vbuxx=vbuc1 @@ -2357,7 +2357,7 @@ utoa16w: { // [78] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [41] utoa16n::return#0 = utoa16n::return#4 @@ -2374,7 +2374,7 @@ utoa16w: { // [46] call utoa16n // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [47] utoa16n::return#1 = utoa16n::return#4 @@ -2394,7 +2394,7 @@ utoa16w: { // [52] call utoa16n // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -2407,7 +2407,7 @@ utoa16w: { // [78] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index df198b8fa..e7e0c5e28 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -778,7 +778,7 @@ main: { // main::@1 __b1: // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] print_str_from___b1: jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -787,7 +787,7 @@ main: { // main::@2 __b2: // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __b3 @@ -823,7 +823,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [26] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -863,7 +863,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char -- call_phi_near + // [19] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -1101,7 +1101,7 @@ Score: 9880 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -1120,13 +1120,13 @@ main: { __b1: // print_str(txt) // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print_ln() // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] jsr print_ln // main::@3 // txt[1]++; @@ -1160,7 +1160,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [26] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1197,7 +1197,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char -- call_phi_near + // [19] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/init-value-npe.log b/src/test/ref/init-value-npe.log index 605953a1e..0934bf1d1 100644 --- a/src/test/ref/init-value-npe.log +++ b/src/test/ref/init-value-npe.log @@ -238,7 +238,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memset -- call_phi_near + // [1] call memset jsr memset jmp __breturn // main::@return @@ -302,7 +302,7 @@ Score: 24 // main main: { // memset(myscreen) - // [1] call memset -- call_phi_near + // [1] call memset jsr memset // main::@return // } diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 28a4e887d..479f85898 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -154,7 +154,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log index 321189d27..87605b4e1 100644 --- a/src/test/ref/inline-asm-ref-scoped.log +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -106,7 +106,7 @@ main: { // asm { lda#'c' stasub.ll+1 } lda #'c' sta sub.ll+1 - // [1] call sub -- call_phi_near + // [1] call sub jsr sub jmp __breturn // main::@return @@ -165,7 +165,7 @@ main: { lda #'c' sta sub.ll+1 // sub() - // [1] call sub -- call_phi_near + // [1] call sub jsr sub // main::@return // } diff --git a/src/test/ref/inline-asm-uses-1.log b/src/test/ref/inline-asm-uses-1.log index 746828cb6..f1456dbff 100644 --- a/src/test/ref/inline-asm-uses-1.log +++ b/src/test/ref/inline-asm-uses-1.log @@ -201,7 +201,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc -- call_phi_near + // [1] call fgetc jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 jmp __b1 @@ -301,7 +301,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc -- call_phi_near + // [1] call fgetc jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 // main::@1 diff --git a/src/test/ref/inline-kickasm-uses-problem.log b/src/test/ref/inline-kickasm-uses-problem.log index 66bedbc96..e583b0c27 100644 --- a/src/test/ref/inline-kickasm-uses-problem.log +++ b/src/test/ref/inline-kickasm-uses-problem.log @@ -187,7 +187,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call foo -- call_phi_near + // [1] call foo jsr foo jmp __breturn // main::@return @@ -291,7 +291,7 @@ Score: 320 // main main: { // foo(a, b) - // [1] call foo -- call_phi_near + // [1] call foo jsr foo // main::@return // } diff --git a/src/test/ref/inline-pointer-1.log b/src/test/ref/inline-pointer-1.log index 04e35a32f..edca90a05 100644 --- a/src/test/ref/inline-pointer-1.log +++ b/src/test/ref/inline-pointer-1.log @@ -194,7 +194,7 @@ main: { puta_from_main: // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -207,7 +207,7 @@ main: { puta_from___b1: // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 ldx #5 jsr puta jmp __breturn @@ -287,7 +287,7 @@ main: { // [5] phi from main to puta [phi:main->puta] // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -297,7 +297,7 @@ main: { // [5] phi from main::@1 to puta [phi:main::@1->puta] // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 ldx #5 jsr puta // main::@return diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index 1eaae4ccd..cd5c7f730 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -379,7 +379,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -391,7 +391,7 @@ main: { // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] print_msg_from___b1: // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 ldx #2 jsr print_msg jmp __breturn @@ -432,7 +432,7 @@ print_msg: { __b2: // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] print_from___b2: jsr print jmp __breturn @@ -570,7 +570,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -579,7 +579,7 @@ main: { // [3] call print_msg // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 ldx #2 jsr print_msg // main::@return @@ -616,7 +616,7 @@ print_msg: { // print(msg) // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] jsr print // print_msg::@return // } diff --git a/src/test/ref/inline-string-4.log b/src/test/ref/inline-string-4.log index 4880aa4b8..e46adc6d2 100644 --- a/src/test/ref/inline-string-4.log +++ b/src/test/ref/inline-string-4.log @@ -122,7 +122,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label dw = msg - // [1] call output -- call_phi_near + // [1] call output jsr output jmp __breturn // main::@return @@ -193,7 +193,7 @@ Score: 42 main: { .label dw = msg // output(dw) - // [1] call output -- call_phi_near + // [1] call output jsr output // main::@return // } diff --git a/src/test/ref/inline-string.log b/src/test/ref/inline-string.log index 6c4793398..5662d1b07 100644 --- a/src/test/ref/inline-string.log +++ b/src/test/ref/inline-string.log @@ -274,7 +274,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -289,7 +289,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -304,7 +304,7 @@ main: { // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 lda #msg @@ -438,7 +438,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -450,7 +450,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -462,7 +462,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 lda #msg diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index 9bc0b5d39..cd6b3338f 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -1663,7 +1663,7 @@ main: { // main::@3 __b3: // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] testUnaryOperator_from___b3: jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1672,7 +1672,7 @@ main: { // main::@4 __b4: // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] testBinaryOperator_from___b4: jsr testBinaryOperator jmp __breturn @@ -1707,7 +1707,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -1722,7 +1722,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -1737,7 +1737,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -1752,7 +1752,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -1767,7 +1767,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -1782,7 +1782,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -1802,7 +1802,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -1817,7 +1817,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -1832,7 +1832,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -1847,7 +1847,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -1862,7 +1862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -1877,7 +1877,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __b6 @@ -1893,7 +1893,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -1908,7 +1908,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -1923,7 +1923,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -1938,7 +1938,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -1953,7 +1953,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -1968,7 +1968,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __b12 @@ -1984,7 +1984,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -1999,7 +1999,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2014,7 +2014,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -2029,7 +2029,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -2044,7 +2044,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -2059,7 +2059,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -2076,7 +2076,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -2091,7 +2091,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -2106,7 +2106,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -2121,7 +2121,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -2136,7 +2136,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -2151,7 +2151,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __b24 @@ -2167,7 +2167,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -2182,7 +2182,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -2197,7 +2197,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -2212,7 +2212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -2227,7 +2227,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -2242,7 +2242,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType jmp __b30 @@ -2258,7 +2258,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -2273,7 +2273,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -2288,7 +2288,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -2303,7 +2303,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -2318,7 +2318,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -2333,7 +2333,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2695,13 +2695,13 @@ main: { // main::@3 // testUnaryOperator() // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testBinaryOperator() // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] jsr testBinaryOperator // main::@return // } @@ -2735,7 +2735,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -2747,7 +2747,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -2759,7 +2759,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -2771,7 +2771,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -2783,7 +2783,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -2795,7 +2795,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testUnaryOperator::@return @@ -2814,7 +2814,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -2826,7 +2826,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -2838,7 +2838,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -2850,7 +2850,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -2862,7 +2862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -2874,7 +2874,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@6 @@ -2889,7 +2889,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -2901,7 +2901,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -2913,7 +2913,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -2925,7 +2925,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -2937,7 +2937,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -2949,7 +2949,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@12 @@ -2964,7 +2964,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -2976,7 +2976,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2988,7 +2988,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -3000,7 +3000,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -3012,7 +3012,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -3024,7 +3024,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -3038,7 +3038,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -3050,7 +3050,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -3062,7 +3062,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -3074,7 +3074,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -3086,7 +3086,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -3098,7 +3098,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@24 @@ -3113,7 +3113,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -3125,7 +3125,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -3137,7 +3137,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -3149,7 +3149,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -3161,7 +3161,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -3173,7 +3173,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@30 @@ -3188,7 +3188,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -3200,7 +3200,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -3212,7 +3212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -3224,7 +3224,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -3236,7 +3236,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -3248,7 +3248,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@return diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index 21f38a123..7e001ef35 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -836,7 +836,7 @@ main: { // main::@3 __b3: // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] testSimpleTypes_from___b3: jsr testSimpleTypes jmp __breturn @@ -871,7 +871,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -885,7 +885,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -899,7 +899,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -913,7 +913,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -927,7 +927,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -941,7 +941,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -955,7 +955,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -969,7 +969,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -983,7 +983,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -997,7 +997,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1011,7 +1011,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1025,7 +1025,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1039,7 +1039,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1053,7 +1053,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1067,7 +1067,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1081,7 +1081,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType jmp __breturn @@ -1296,7 +1296,7 @@ main: { // main::@3 // testSimpleTypes() // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] jsr testSimpleTypes // main::@return // } @@ -1330,7 +1330,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -1341,7 +1341,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -1352,7 +1352,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -1363,7 +1363,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -1374,7 +1374,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -1385,7 +1385,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -1396,7 +1396,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -1407,7 +1407,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -1418,7 +1418,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -1429,7 +1429,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1440,7 +1440,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1451,7 +1451,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1462,7 +1462,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1473,7 +1473,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1484,7 +1484,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1495,7 +1495,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // testSimpleTypes::@return diff --git a/src/test/ref/intermediates-simple.log b/src/test/ref/intermediates-simple.log index e7f494d08..e1c27b801 100644 --- a/src/test/ref/intermediates-simple.log +++ b/src/test/ref/intermediates-simple.log @@ -427,7 +427,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum -- call_phi_near + // [12] call sum jsr sum // [13] sum::return#0 = sum::return#1 jmp __b5 @@ -593,7 +593,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum -- call_phi_near + // [12] call sum jsr sum // [13] sum::return#0 = sum::return#1 // main::@5 diff --git a/src/test/ref/intermediates-struct.log b/src/test/ref/intermediates-struct.log index 87e4ff885..e5d380194 100644 --- a/src/test/ref/intermediates-struct.log +++ b/src/test/ref/intermediates-struct.log @@ -322,7 +322,7 @@ main: { sum_from_main: // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 lda #1 jsr sum jmp __b1 @@ -343,7 +343,7 @@ main: { sum_from___b1: // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 lda #3 jsr sum jmp __b2 @@ -461,7 +461,7 @@ main: { // [8] phi from main to sum [phi:main->sum] // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 lda #1 jsr sum // main::@1 @@ -482,7 +482,7 @@ main: { // [8] phi from main::@1 to sum [phi:main::@1->sum] // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 lda #3 jsr sum // main::@2 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 8888465a9..60e6229f4 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -184,7 +184,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -289,7 +289,7 @@ __start: { sta.z col2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 02cc05904..3922bcedf 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -360,7 +360,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -567,7 +567,7 @@ __start: { sta.z col1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index 879ac1b96..c4418d11e 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -271,7 +271,7 @@ ASSEMBLER BEFORE OPTIMIZATION irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 - // [1] call do_irq -- call_phi_near + // [1] call do_irq jsr do_irq jmp __breturn // irq::@return @@ -455,7 +455,7 @@ irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 // do_irq() - // [1] call do_irq -- call_phi_near + // [1] call do_irq jsr do_irq // irq::@return // } diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index b1e8a310d..2b82b1652 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -407,7 +407,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -649,7 +649,7 @@ __start: { sta.z irq_idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index d373a75d5..e6cb4199f 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -977,7 +977,7 @@ irq: { // [6] *FGCOL = irq::$3 -- _deref_pbuc1=vbuaa sta FGCOL // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] sub_irq_from___b3: jsr sub_irq jmp __b7 @@ -1096,7 +1096,7 @@ main: { // [29] *FGCOL = main::$1 -- _deref_pbuc1=vbuaa sta FGCOL // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] sub_main_from___b3: jsr sub_main jmp __b6 @@ -1554,7 +1554,7 @@ irq: { sta FGCOL // sub_irq() // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] jsr sub_irq // irq::@7 // for( byte k: 0..10 ) @@ -1667,7 +1667,7 @@ main: { sta FGCOL // sub_main() // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] jsr sub_main // main::@6 // for( byte k: 0..10 ) diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 81329ce03..4d3548707 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -670,7 +670,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] menu_from___b1: jsr menu jmp __b1_from___b1 @@ -686,7 +686,7 @@ menu: { // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_C jsr keyboard_key_pressed // [6] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -702,7 +702,7 @@ menu: { jmp __b5 // menu::@5 __b5: - // [10] call pressed -- call_phi_near + // [10] call pressed jsr pressed jmp __breturn // menu::@return @@ -717,7 +717,7 @@ menu: { // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] keyboard_key_pressed_from___b2: - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_I jsr keyboard_key_pressed // [14] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 @@ -745,7 +745,7 @@ menu: { // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] keyboard_key_pressed_from___b3: - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_E jsr keyboard_key_pressed // [21] keyboard_key_pressed::return#4 = keyboard_key_pressed::return#0 @@ -789,7 +789,7 @@ keyboard_key_pressed: { lsr // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read -- call_phi_near + // [31] call keyboard_matrix_read jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -817,7 +817,7 @@ pressed: { // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_SPACE jsr keyboard_key_pressed // [39] keyboard_key_pressed::return#10 = keyboard_key_pressed::return#0 @@ -1043,7 +1043,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] jsr menu jmp __b1 } @@ -1055,7 +1055,7 @@ menu: { // keyboard_key_pressed(KEY_C) // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_C jsr keyboard_key_pressed // keyboard_key_pressed(KEY_C) @@ -1069,7 +1069,7 @@ menu: { // [9] phi from menu::@8 to menu::@5 [phi:menu::@8->menu::@5] // menu::@5 // pressed() - // [10] call pressed -- call_phi_near + // [10] call pressed jsr pressed // menu::@return // } @@ -1081,7 +1081,7 @@ menu: { // keyboard_key_pressed(KEY_I) // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_I jsr keyboard_key_pressed // keyboard_key_pressed(KEY_I) @@ -1107,7 +1107,7 @@ menu: { // keyboard_key_pressed(KEY_E) // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_E jsr keyboard_key_pressed // keyboard_key_pressed(KEY_E) @@ -1155,7 +1155,7 @@ keyboard_key_pressed: { // keyboard_matrix_read(rowidx) // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read -- call_phi_near + // [31] call keyboard_matrix_read jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 @@ -1179,7 +1179,7 @@ pressed: { // keyboard_key_pressed(KEY_SPACE) // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_SPACE jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) diff --git a/src/test/ref/library-constructor-1.log b/src/test/ref/library-constructor-1.log index 4b87ac3cb..0b755e7a0 100644 --- a/src/test/ref/library-constructor-1.log +++ b/src/test/ref/library-constructor-1.log @@ -177,7 +177,7 @@ __start: { // [1] my_value = 0 -- vbuz1=vbuc1 lda #0 sta.z my_value - // [2] call my_init -- call_phi_near + // [2] call my_init jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -185,7 +185,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -207,7 +207,7 @@ my_init: { } // main main: { - // [9] call print -- call_phi_near + // [9] call print jsr print jmp __breturn // main::@return @@ -285,12 +285,12 @@ __start: { lda #0 sta.z my_value // #pragma constructor_for(my_init, print) - // [2] call my_init -- call_phi_near + // [2] call my_init jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return @@ -310,7 +310,7 @@ my_init: { // main main: { // print() - // [9] call print -- call_phi_near + // [9] call print jsr print // main::@return // } diff --git a/src/test/ref/library-constructor-3.log b/src/test/ref/library-constructor-3.log index 9319d815b..9e70da966 100644 --- a/src/test/ref/library-constructor-3.log +++ b/src/test/ref/library-constructor-3.log @@ -220,14 +220,14 @@ __start: { sta.z SCREEN lda #>0 sta.z SCREEN+1 - // [3] call init_1 -- call_phi_near + // [3] call init_1 jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] __b2_from___init1: jmp __b2 // __start::@2 __b2: - // [5] call init_2 -- call_phi_near + // [5] call init_2 jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] __b1_from___b2: @@ -235,7 +235,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [13] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -270,7 +270,7 @@ init_1: { } // main main: { - // [14] call print -- call_phi_near + // [14] call print jsr print jmp __breturn // main::@return @@ -363,17 +363,17 @@ __start: { sta.z SCREEN sta.z SCREEN+1 // #pragma constructor_for(init_1, print) - // [3] call init_1 -- call_phi_near + // [3] call init_1 jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] // __start::@2 // #pragma constructor_for(init_2, print) - // [5] call init_2 -- call_phi_near + // [5] call init_2 jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] // __start::@1 // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [13] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -406,7 +406,7 @@ init_1: { // main main: { // print() - // [14] call print -- call_phi_near + // [14] call print jsr print // main::@return // } diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index 3862c529e..a5ce9bad7 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -2465,7 +2465,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -2489,7 +2489,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -2513,7 +2513,7 @@ main: { sta.z lin16u_gen.min lda #>0 sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -2525,7 +2525,7 @@ main: { // main::@6 __b6: // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] print_cls_from___b6: jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2541,7 +2541,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2555,7 +2555,7 @@ main: { // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] print_uint_from___b8: - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 lda #<$22d sta.z print_uint.w lda #>$22d @@ -2570,7 +2570,7 @@ main: { // [81] phi from main::@9 to print_str [phi:main::@9->print_str] print_str_from___b9: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2584,7 +2584,7 @@ main: { // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] print_uint_from___b10: - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -2599,7 +2599,7 @@ main: { // [81] phi from main::@11 to print_str [phi:main::@11->print_str] print_str_from___b11: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2613,7 +2613,7 @@ main: { // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] print_uint_from___b12: - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 lda #<0 sta.z print_uint.w lda #>0 @@ -2627,7 +2627,7 @@ main: { // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] print_ln_from___b13: - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -2657,7 +2657,7 @@ main: { // [81] phi from main::@3 to print_str [phi:main::@3->print_str] print_str_from___b3: // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2671,7 +2671,7 @@ main: { // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] print_uint_from___b22: - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -2686,7 +2686,7 @@ main: { // [81] phi from main::@23 to print_str [phi:main::@23->print_str] print_str_from___b23: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2700,7 +2700,7 @@ main: { // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] print_uint_from___b24: - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -2715,7 +2715,7 @@ main: { // [81] phi from main::@25 to print_str [phi:main::@25->print_str] print_str_from___b25: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2729,7 +2729,7 @@ main: { // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] print_uint_from___b26: - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -2743,7 +2743,7 @@ main: { // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] print_ln_from___b27: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln jmp __breturn // main::@return @@ -2763,7 +2763,7 @@ main: { // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] __b14_from___b2: @@ -2774,7 +2774,7 @@ main: { // [81] phi from main::@14 to print_str [phi:main::@14->print_str] print_str_from___b14: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2796,7 +2796,7 @@ main: { // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] print_uint_from___b15: - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -2807,7 +2807,7 @@ main: { // [81] phi from main::@16 to print_str [phi:main::@16->print_str] print_str_from___b16: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2825,7 +2825,7 @@ main: { // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] print_uint_from___b17: - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -2836,7 +2836,7 @@ main: { // [81] phi from main::@18 to print_str [phi:main::@18->print_str] print_str_from___b18: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2854,7 +2854,7 @@ main: { // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] print_uint_from___b19: - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] __b20_from___b19: @@ -2864,7 +2864,7 @@ main: { // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] print_ln_from___b20: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy jsr print_ln jmp __b21 // main::@21 @@ -2914,7 +2914,7 @@ lin16u_gen: { // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] divr16u_from_lin16u_gen: // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 @@ -2938,7 +2938,7 @@ lin16u_gen: { sta.z divr16u.dividend lda #>0 sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy jsr divr16u // [66] divr16u::return#3 = divr16u::return#0 jmp __b4 @@ -3039,7 +3039,7 @@ lin16u_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [125] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -3080,7 +3080,7 @@ print_str: { // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3103,7 +3103,7 @@ print_uint: { // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -3114,7 +3114,7 @@ print_uint: { // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -3173,7 +3173,7 @@ print_uchar: { // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -3187,7 +3187,7 @@ print_uchar: { // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3755,7 +3755,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -3776,7 +3776,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -3796,7 +3796,7 @@ main: { lda #<0 sta.z lin16u_gen.min sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -3806,7 +3806,7 @@ main: { // main::@6 // print_cls() // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3818,7 +3818,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3829,7 +3829,7 @@ main: { // print_uint(557) // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 lda #<$22d sta.z print_uint.w lda #>$22d @@ -3841,7 +3841,7 @@ main: { // [13] call print_str // [81] phi from main::@9 to print_str [phi:main::@9->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3852,7 +3852,7 @@ main: { // print_uint(31179) // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -3864,7 +3864,7 @@ main: { // [17] call print_str // [81] phi from main::@11 to print_str [phi:main::@11->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3875,7 +3875,7 @@ main: { // print_uint(0) // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 lda #<0 sta.z print_uint.w sta.z print_uint.w+1 @@ -3885,7 +3885,7 @@ main: { // print_ln() // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -3912,7 +3912,7 @@ main: { // [25] call print_str // [81] phi from main::@3 to print_str [phi:main::@3->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3923,7 +3923,7 @@ main: { // print_uint(29793) // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -3935,7 +3935,7 @@ main: { // [29] call print_str // [81] phi from main::@23 to print_str [phi:main::@23->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3946,7 +3946,7 @@ main: { // print_uint(63361) // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -3958,7 +3958,7 @@ main: { // [33] call print_str // [81] phi from main::@25 to print_str [phi:main::@25->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3969,7 +3969,7 @@ main: { // print_uint($6488) // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -3980,7 +3980,7 @@ main: { // print_ln() // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln // main::@return // } @@ -4000,7 +4000,7 @@ main: { // [41] call print_uchar // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] // main::@14 @@ -4008,7 +4008,7 @@ main: { // [43] call print_str // [81] phi from main::@14 to print_str [phi:main::@14->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4028,7 +4028,7 @@ main: { sta.z print_uint.w+1 // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -4036,7 +4036,7 @@ main: { // [48] call print_str // [81] phi from main::@16 to print_str [phi:main::@16->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4052,7 +4052,7 @@ main: { sta.z print_uint.w+1 // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -4060,7 +4060,7 @@ main: { // [52] call print_str // [81] phi from main::@18 to print_str [phi:main::@18->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4076,14 +4076,14 @@ main: { sta.z print_uint.w+1 // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] // main::@20 // print_ln() // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy jsr print_ln // main::@21 // for(byte i=0; i<20; i++) @@ -4132,7 +4132,7 @@ lin16u_gen: { // [61] call divr16u // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4153,7 +4153,7 @@ lin16u_gen: { lda #<0 sta.z divr16u.dividend sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy jsr divr16u // word stepf = divr16u(0, length-1, rem16u) // [66] divr16u::return#3 = divr16u::return#0 @@ -4255,7 +4255,7 @@ lin16u_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [125] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -4291,7 +4291,7 @@ print_str: { // [86] call print_char // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4313,7 +4313,7 @@ print_uint: { // [90] call print_uchar // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4322,7 +4322,7 @@ print_uint: { // [92] call print_uchar // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4379,7 +4379,7 @@ print_uchar: { // Table of hexadecimal digits // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4392,7 +4392,7 @@ print_uchar: { // [105] call print_char // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/literal-word-pointer-0.log b/src/test/ref/literal-word-pointer-0.log index f4f8a8669..cf77457ea 100644 --- a/src/test/ref/literal-word-pointer-0.log +++ b/src/test/ref/literal-word-pointer-0.log @@ -119,7 +119,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -182,7 +182,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/literal-word-pointer-1.log b/src/test/ref/literal-word-pointer-1.log index d5311dfc3..1cbc5c0cf 100644 --- a/src/test/ref/literal-word-pointer-1.log +++ b/src/test/ref/literal-word-pointer-1.log @@ -120,7 +120,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -183,7 +183,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/liverange-1.log b/src/test/ref/liverange-1.log index d04ec4df2..cf178a468 100644 --- a/src/test/ref/liverange-1.log +++ b/src/test/ref/liverange-1.log @@ -208,7 +208,7 @@ main: { out_from_main: // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -220,7 +220,7 @@ main: { // [5] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 lda #'m' jsr out jmp __breturn @@ -297,7 +297,7 @@ main: { // [5] phi from main to out [phi:main->out] // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -306,7 +306,7 @@ main: { // [3] call out // [5] phi from main::@1 to out [phi:main::@1->out] // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 lda #'m' jsr out // main::@return diff --git a/src/test/ref/liverange-10.log b/src/test/ref/liverange-10.log index f43be339a..9d8e362be 100644 --- a/src/test/ref/liverange-10.log +++ b/src/test/ref/liverange-10.log @@ -678,7 +678,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw -- call_phi_near + // [3] call outsw jsr outsw jmp __b3 // main::@3 @@ -714,7 +714,7 @@ main: { // [20] phi from main::@2 to outw [phi:main::@2->outw] outw_from___b2: // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy jsr outw jmp __b4 // main::@4 @@ -753,7 +753,7 @@ outsw: { out_from___b2: // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy jsr out jmp __b3 // outsw::@3 @@ -779,7 +779,7 @@ outsw: { // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] outw_from___b1: // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy jsr outw jmp __breturn // outsw::@return @@ -805,7 +805,7 @@ outw: { // [38] phi from outw to out [phi:outw->out] out_from_outw: // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy jsr out jmp __b1 // outw::@1 @@ -821,7 +821,7 @@ outw: { // [38] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy jsr out jmp __b2 // outw::@2 @@ -840,7 +840,7 @@ outw: { // [38] phi from outw::@2 to out [phi:outw::@2->out] out_from___b2: // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy jsr out jmp __b3 // outw::@3 @@ -856,7 +856,7 @@ outw: { // [38] phi from outw::@3 to out [phi:outw::@3->out] out_from___b3: // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy jsr out jmp __breturn // outw::@return @@ -1033,7 +1033,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw -- call_phi_near + // [3] call outsw jsr outsw // main::@3 // for(signed int sw: -20..19 ) @@ -1063,7 +1063,7 @@ main: { // [8] call outw // [20] phi from main::@2 to outw [phi:main::@2->outw] // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy jsr outw // main::@4 // for(unsigned int w: 0..39 ) @@ -1098,7 +1098,7 @@ outsw: { // [38] phi from outsw::@2 to out [phi:outsw::@2->out] // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy jsr out // outsw::@3 // sw = -sw @@ -1120,7 +1120,7 @@ outsw: { // [18] call outw // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy jsr outw // outsw::@return // } @@ -1147,7 +1147,7 @@ outw: { // [24] call out // [38] phi from outw to out [phi:outw->out] // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy jsr out // outw::@1 // BYTE1(w) @@ -1163,7 +1163,7 @@ outw: { // [28] call out // [38] phi from outw::@1 to out [phi:outw::@1->out] // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy jsr out // outw::@2 // BYTE0(w) @@ -1182,7 +1182,7 @@ outw: { // [32] call out // [38] phi from outw::@2 to out [phi:outw::@2->out] // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy jsr out // outw::@3 // BYTE0(w) @@ -1198,7 +1198,7 @@ outw: { // [36] call out // [38] phi from outw::@3 to out [phi:outw::@3->out] // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy jsr out // outw::@return // } diff --git a/src/test/ref/liverange-2.log b/src/test/ref/liverange-2.log index 87bd1b501..5c92c0723 100644 --- a/src/test/ref/liverange-2.log +++ b/src/test/ref/liverange-2.log @@ -343,7 +343,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -499,7 +499,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-3.log b/src/test/ref/liverange-3.log index d434831cd..ba653de71 100644 --- a/src/test/ref/liverange-3.log +++ b/src/test/ref/liverange-3.log @@ -350,7 +350,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -508,7 +508,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-4.log b/src/test/ref/liverange-4.log index 8b05758c7..1a9b9083e 100644 --- a/src/test/ref/liverange-4.log +++ b/src/test/ref/liverange-4.log @@ -394,7 +394,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -432,7 +432,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out jmp __breturn // print::@return @@ -572,7 +572,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) @@ -607,7 +607,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out // print::@return // } diff --git a/src/test/ref/liverange-5.log b/src/test/ref/liverange-5.log index ff19a3bcd..1fd2e49e2 100644 --- a/src/test/ref/liverange-5.log +++ b/src/test/ref/liverange-5.log @@ -401,7 +401,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -439,7 +439,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out jmp __breturn // print::@return @@ -581,7 +581,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) @@ -616,7 +616,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out // print::@return // } diff --git a/src/test/ref/liverange-6.log b/src/test/ref/liverange-6.log index 5e9a05aed..74a12a553 100644 --- a/src/test/ref/liverange-6.log +++ b/src/test/ref/liverange-6.log @@ -245,7 +245,7 @@ main: { __b1: // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out -- call_phi_near + // [3] call out jsr out jmp __b2 // main::@2 @@ -348,7 +348,7 @@ main: { // out(msg[i]) // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out -- call_phi_near + // [3] call out jsr out // main::@2 // for( byte i: 0..11) diff --git a/src/test/ref/liverange-7.log b/src/test/ref/liverange-7.log index 5b899a517..674748c62 100644 --- a/src/test/ref/liverange-7.log +++ b/src/test/ref/liverange-7.log @@ -294,7 +294,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 jmp __b2 // main::@2 @@ -315,7 +315,7 @@ main: { // void out2(__register(A) char c) out2: { // [7] out::c#0 = out2::c#0 - // [8] call out -- call_phi_near + // [8] call out jsr out jmp __breturn // out2::@return @@ -412,7 +412,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 // main::@2 // for(char c: 0..39 ) @@ -432,7 +432,7 @@ main: { out2: { // out(c) // [7] out::c#0 = out2::c#0 - // [8] call out -- call_phi_near + // [8] call out jsr out // out2::@return // } diff --git a/src/test/ref/liverange-8.log b/src/test/ref/liverange-8.log index fc882b20b..860335293 100644 --- a/src/test/ref/liverange-8.log +++ b/src/test/ref/liverange-8.log @@ -319,7 +319,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 jmp __b2 // main::@2 @@ -344,7 +344,7 @@ out2: { // [12] phi from out2 to out [phi:out2->out] out_from_out2: // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy jsr out jmp __b1 // out2::@1 @@ -354,7 +354,7 @@ out2: { // [12] phi from out2::@1 to out [phi:out2::@1->out] out_from___b1: // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy jsr out jmp __breturn // out2::@return @@ -458,7 +458,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 // main::@2 // for(char c: 0..39 ) @@ -481,7 +481,7 @@ out2: { // [8] call out // [12] phi from out2 to out [phi:out2->out] // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy jsr out // out2::@1 // out(c) @@ -489,7 +489,7 @@ out2: { // [10] call out // [12] phi from out2::@1 to out [phi:out2::@1->out] // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy jsr out // out2::@return // } diff --git a/src/test/ref/liverange-9.log b/src/test/ref/liverange-9.log index fd8477728..090151016 100644 --- a/src/test/ref/liverange-9.log +++ b/src/test/ref/liverange-9.log @@ -417,7 +417,7 @@ main: { __b1: // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] outsw_from___b1: jsr outsw jmp __b2 @@ -442,13 +442,13 @@ outsw: { out_from_outsw: // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy jsr out jmp __b1 // outsw::@1 __b1: // [9] outw::c#0 = outsw::c#0 - // [10] call outw -- call_phi_near + // [10] call outw jsr outw jmp __breturn // outsw::@return @@ -482,7 +482,7 @@ outw: { // [12] phi from outw to out [phi:outw->out] out_from_outw: // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy jsr out jmp __b1 // outw::@1 @@ -494,7 +494,7 @@ outw: { // [12] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy jsr out jmp __breturn // outw::@return @@ -595,7 +595,7 @@ main: { // outsw(c) // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] jsr outsw // main::@2 // for(char c: 0..39 ) @@ -617,12 +617,12 @@ outsw: { // [12] phi from outsw to out [phi:outsw->out] // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy jsr out // outsw::@1 // outw(c) // [9] outw::c#0 = outsw::c#0 - // [10] call outw -- call_phi_near + // [10] call outw jsr outw // outsw::@return // } @@ -656,7 +656,7 @@ outw: { // [17] call out // [12] phi from outw to out [phi:outw->out] // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy jsr out // outw::@1 // out(c&0x0f) @@ -666,7 +666,7 @@ outw: { // [19] call out // [12] phi from outw::@1 to out [phi:outw::@1->out] // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy jsr out // outw::@return // } diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index 87040feb9..e61f1eb79 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -325,7 +325,7 @@ main: { // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] incw1_from_main: - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 lda #>0 @@ -339,7 +339,7 @@ main: { // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from___b1: - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 lda #>0 @@ -353,7 +353,7 @@ main: { // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] incw1_from___b2: - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -363,7 +363,7 @@ main: { // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] incw2_from___b3: - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy jsr incw2 jmp __b4 // main::@4 @@ -484,7 +484,7 @@ main: { // incw1() // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 sta.z w1+1 @@ -494,7 +494,7 @@ main: { // incw2() // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 sta.z w2+1 @@ -504,14 +504,14 @@ main: { // incw1() // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // incw2() // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy jsr incw2 // main::@4 // SCREEN[0] = w1 diff --git a/src/test/ref/liverange-problem-0.log b/src/test/ref/liverange-problem-0.log index 53d595e94..914eb6461 100644 --- a/src/test/ref/liverange-problem-0.log +++ b/src/test/ref/liverange-problem-0.log @@ -305,7 +305,7 @@ __start: { // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 lda #<$400 sta.z MEM lda #>$400 @@ -323,7 +323,7 @@ __start: { // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] malloc_from___b2: - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy jsr malloc // [6] malloc::return#3 = malloc::return#0 jmp __b3 @@ -335,7 +335,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [9] call main -- call_phi_near + // [9] call main jsr main jmp __breturn // __start::@return @@ -458,7 +458,7 @@ __start: { // byte* SCREEN_1 = malloc() // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 lda #<$400 sta.z MEM lda #>$400 @@ -475,7 +475,7 @@ __start: { // byte* SCREEN_2 = malloc() // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy jsr malloc // byte* SCREEN_2 = malloc() // [6] malloc::return#3 = malloc::return#0 @@ -483,7 +483,7 @@ __start: { // [7] SCREEN_2#0 = malloc::return#3 // [8] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1] // __start::@1 - // [9] call main -- call_phi_near + // [9] call main jsr main // __start::@return // [10] return diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index 928b6882c..458f3370d 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -300,7 +300,7 @@ main: { // [1] call inci // [12] phi from main to inci [phi:main->inci] inci_from_main: - // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near + // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 ldy #0 jsr inci // [2] inci::return#0 = inci::return#2 @@ -315,7 +315,7 @@ main: { // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] inci_from___b1: - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy jsr inci // [6] inci::return#1 = inci::return#2 jmp __b2 @@ -415,7 +415,7 @@ main: { // inci() // [1] call inci // [12] phi from main to inci [phi:main->inci] - // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near + // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 ldy #0 jsr inci // inci() @@ -430,7 +430,7 @@ main: { // inci() // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy jsr inci // inci() // [6] inci::return#1 = inci::return#2 diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index 1333b4a9d..c8bb0b78d 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -221,7 +221,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -338,7 +338,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/longjump2.log b/src/test/ref/longjump2.log index 28d9a1199..124820e22 100644 --- a/src/test/ref/longjump2.log +++ b/src/test/ref/longjump2.log @@ -225,7 +225,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] -- call_phi_near + // [5] phi from main to long1 [phi:main->long1] long1_from_main: jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -234,7 +234,7 @@ main: { // main::@1 __b1: // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near + // [12] phi from main::@1 to long2 [phi:main::@1->long2] long2_from___b1: jsr long2 jmp __breturn @@ -881,13 +881,13 @@ Score: 10640 main: { // long1() // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] -- call_phi_near + // [5] phi from main to long1 [phi:main->long1] jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // long2() // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near + // [12] phi from main::@1 to long2 [phi:main::@1->long2] jsr long2 // main::@return // } diff --git a/src/test/ref/loop-memset-min.log b/src/test/ref/loop-memset-min.log index 050eaf119..58b097890 100644 --- a/src/test/ref/loop-memset-min.log +++ b/src/test/ref/loop-memset-min.log @@ -276,7 +276,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memset - // [3] phi from main to memset [phi:main->memset] -- call_phi_near + // [3] phi from main to memset [phi:main->memset] memset_from_main: jsr memset jmp __breturn @@ -387,7 +387,7 @@ Score: 523 main: { // memset(SCREEN, 'c', 1000) // [1] call memset - // [3] phi from main to memset [phi:main->memset] -- call_phi_near + // [3] phi from main to memset [phi:main->memset] jsr memset // main::@return // } diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index 4a4be12eb..ea713553e 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -200,7 +200,7 @@ main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 lda #'0' sta SCREEN - // [1] call d -- call_phi_near + // [1] call d jsr d // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -208,7 +208,7 @@ main: { // main::@1 __b1: // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near + // [7] phi from main::@1 to b [phi:main::@1->b] b_from___b1: jsr b jmp __breturn @@ -240,7 +240,7 @@ b: { jmp __b1 // b::@1 __b1: - // [9] call d -- call_phi_near + // [9] call d jsr d jmp __b2 // b::@2 @@ -317,13 +317,13 @@ main: { lda #'0' sta SCREEN // d() - // [1] call d -- call_phi_near + // [1] call d jsr d // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // b() // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near + // [7] phi from main::@1 to b [phi:main::@1->b] jsr b // main::@return // } @@ -350,7 +350,7 @@ b: { // b::@1 __b1: // d() - // [9] call d -- call_phi_near + // [9] call d jsr d // b::@2 // for( byte i: 0..3) diff --git a/src/test/ref/loop-problem2.log b/src/test/ref/loop-problem2.log index 100d011b9..7a74d1625 100644 --- a/src/test/ref/loop-problem2.log +++ b/src/test/ref/loop-problem2.log @@ -243,7 +243,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [5] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -252,7 +252,7 @@ main: { // main::@1 __b1: // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] mode_ctrl_from___b1: jsr mode_ctrl jmp __breturn @@ -385,13 +385,13 @@ Score: 794 main: { // print_cls() // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [5] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mode_ctrl() // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] jsr mode_ctrl // main::@return // } diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index c9022a575..290ef02b1 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -371,7 +371,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label screen = $400 // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] scan_for_lowest_from_main: jsr scan_for_lowest // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 @@ -552,7 +552,7 @@ main: { .label screen = $400 // char hit_check=scan_for_lowest() // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] jsr scan_for_lowest // char hit_check=scan_for_lowest() // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index bf1dd5e41..637540734 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -384,7 +384,7 @@ main: { .label result = 2 .label kaputt = $a // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near + // [10] phi from main to mul16u [phi:main->mul16u] mul16u_from_main: jsr mul16u // [2] mul16u::return#2 = mul16u::res#2 @@ -591,7 +591,7 @@ main: { .label kaputt = $a // dword result = mul16u(4,123) // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near + // [10] phi from main to mul16u [phi:main->mul16u] jsr mul16u // dword result = mul16u(4,123) // [2] mul16u::return#2 = mul16u::res#2 diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 20bd0994d..47c442d02 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -248,7 +248,7 @@ main: { lda #'a' sta screen+$28 // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near + // [4] phi from main to popup_selector [phi:main->popup_selector] popup_selector_from_main: jsr popup_selector jmp __b1 @@ -356,7 +356,7 @@ main: { sta screen+$28 // popup_selector() // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near + // [4] phi from main to popup_selector [phi:main->popup_selector] jsr popup_selector // main::@1 // screen[41] = opcode diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index deb69c6c0..7e7d6ce10 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -204,7 +204,7 @@ main: { // main::@1 __b1: // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near + // [6] phi from main::@1 to nest [phi:main::@1->nest] nest_from___b1: jsr nest jmp __b2 @@ -314,7 +314,7 @@ main: { __b1: // nest() // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near + // [6] phi from main::@1 to nest [phi:main::@1->nest] jsr nest // main::@2 // while (--i>0) diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index d661e5dd3..56e80a72b 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -430,7 +430,7 @@ main: { // main::@2 __b2: // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] nest1_from___b2: jsr nest1 jmp __b4 @@ -482,7 +482,7 @@ nest1: { // nest1::@2 __b2: // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] nest2_from___b2: jsr nest2 jmp __b4 @@ -679,7 +679,7 @@ main: { __b2: // nest1() // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] jsr nest1 // main::@4 // while (--j>0) @@ -720,7 +720,7 @@ nest1: { __b2: // nest2() // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] jsr nest2 // nest1::@4 // while (--j>0) diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index 24dc49f7e..71ea05214 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -257,7 +257,7 @@ main: { // main::@1 __b1: // [2] b::i#0 = main::i#2 - // [3] call b -- call_phi_near + // [3] call b jsr b jmp __b2 // main::@2 @@ -279,7 +279,7 @@ main: { b: { // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] -- call_phi_near + // [10] phi from b to c [phi:b->c] c_from_b: jsr c jmp __breturn @@ -391,7 +391,7 @@ main: { __b1: // b(i) // [2] b::i#0 = main::i#2 - // [3] call b -- call_phi_near + // [3] call b jsr b // main::@2 // for(byte i:0..100) @@ -412,7 +412,7 @@ b: { // c(i) // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] -- call_phi_near + // [10] phi from b to c [phi:b->c] jsr c // b::@return // } diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 408edd611..0925f45ce 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -298,7 +298,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -434,12 +434,12 @@ __start: { // __start::__init1 // byte* BYTES = malloc(0x100) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return diff --git a/src/test/ref/malloc-1.log b/src/test/ref/malloc-1.log index 310f06395..72f6b7643 100644 --- a/src/test/ref/malloc-1.log +++ b/src/test/ref/malloc-1.log @@ -325,7 +325,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -334,7 +334,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -486,12 +486,12 @@ __start: { // __start::__init1 // word* WORDS = malloc(0x200) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index ea377248e..3a6c0f1db 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -496,7 +496,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 lda #SCREEN @@ -523,7 +523,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 lda #CHARGEN @@ -722,7 +722,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 lda #SCREEN @@ -749,7 +749,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 lda #CHARGEN diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index 65e8f759a..ff7dcf584 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -622,7 +622,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 lda #CAMELOT @@ -646,7 +646,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 lda #<__5 sta.z memcpy.source lda #>__5 @@ -940,7 +940,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 lda #CAMELOT @@ -961,7 +961,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 lda #<__5 sta.z memcpy.source lda #>__5 diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index b46ea16fc..a27fca8c9 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -451,7 +451,7 @@ main: { // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -468,7 +468,7 @@ main: { // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] malloc_from___b2: - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy jsr malloc jmp __b3 // main::@3 @@ -629,7 +629,7 @@ main: { // unsigned char* buf1 = malloc(100) // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -645,7 +645,7 @@ main: { // unsigned char* buf2 = malloc(100) // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy jsr malloc // main::@3 // unsigned char* buf2 = malloc(100) diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 8e9709be8..88b764718 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -1515,7 +1515,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1528,7 +1528,7 @@ __start: { main: { .label __5 = 6 .label i = $a - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1575,7 +1575,7 @@ main: { __b2: // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] prepend_from___b2: jsr prepend jmp __b5 @@ -1598,7 +1598,7 @@ main: { jmp __b3 // main::@3 __b3: - // [14] call sum -- call_phi_near + // [14] call sum jsr sum // [15] sum::return#2 = sum::s#3 jmp __b6 @@ -1611,7 +1611,7 @@ main: { // [40] phi from main::@6 to print_char [phi:main::@6->print_char] print_char_from___b6: // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy jsr print_char jmp __b7 // main::@7 @@ -1626,7 +1626,7 @@ main: { jmp __b4 // main::@4 __b4: - // [22] call end -- call_phi_near + // [22] call end jsr end jmp __breturn // main::@return @@ -1652,7 +1652,7 @@ start: { prepend: { .label new = 4 .label x = $a - // [27] call alloc -- call_phi_near + // [27] call alloc jsr alloc // [28] alloc::return#2 = alloc::return#0 jmp __b1 @@ -1765,7 +1765,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [45] call start -- call_phi_near + // [45] call start jsr start jmp __b1 // end::@1 @@ -1784,7 +1784,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint -- call_phi_near + // [49] call print_uint jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1792,7 +1792,7 @@ end: { // end::@2 __b2: // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn @@ -1843,7 +1843,7 @@ print_uint: { // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1853,7 +1853,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1919,7 +1919,7 @@ print_uchar: { // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1933,7 +1933,7 @@ print_uchar: { // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2169,7 +2169,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -2180,7 +2180,7 @@ main: { .label __5 = 6 .label i = $a // start() - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi main::c#7 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -2215,7 +2215,7 @@ main: { // prepend(i) // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] jsr prepend // main::@5 // for(unsigned int i : 0..2999) @@ -2234,7 +2234,7 @@ main: { // [13] phi from main::@5 to main::@3 [phi:main::@5->main::@3] // main::@3 // sum() - // [14] call sum -- call_phi_near + // [14] call sum jsr sum // [15] sum::return#2 = sum::s#3 // main::@6 @@ -2245,7 +2245,7 @@ main: { // [18] call print_char // [40] phi from main::@6 to print_char [phi:main::@6->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy jsr print_char // main::@7 // for(unsigned char c : 0..4) @@ -2257,7 +2257,7 @@ main: { // [21] phi from main::@7 to main::@4 [phi:main::@7->main::@4] // main::@4 // end() - // [22] call end -- call_phi_near + // [22] call end jsr end // main::@return // } @@ -2283,7 +2283,7 @@ prepend: { .label new = 4 .label x = $a // alloc() - // [27] call alloc -- call_phi_near + // [27] call alloc jsr alloc // [28] alloc::return#2 = alloc::return#0 // prepend::@1 @@ -2399,7 +2399,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [45] call start -- call_phi_near + // [45] call start jsr start // end::@1 // last_time -= Ticks @@ -2419,13 +2419,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint -- call_phi_near + // [49] call print_uint jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } @@ -2475,7 +2475,7 @@ print_uint: { ldx.z w+1 // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2483,7 +2483,7 @@ print_uint: { ldx.z w // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2546,7 +2546,7 @@ print_uchar: { // Table of hexadecimal digits // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2559,7 +2559,7 @@ print_uchar: { // [73] call print_char // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index 717ae4bad..6498dc65b 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -2315,7 +2315,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2330,7 +2330,7 @@ main: { .label v = $19 .label count = 2 // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near + // [25] phi from main to makechar [phi:main->makechar] makechar_from_main: jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] @@ -2338,7 +2338,7 @@ main: { jmp __b4 // main::@4 __b4: - // [8] call start -- call_phi_near + // [8] call start jsr start jmp __b5 // main::@5 @@ -2378,7 +2378,7 @@ main: { // [16] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 lda.z block sta CIA2 - // [17] call end -- call_phi_near + // [17] call end /* Reset screen colors */ jsr end jmp __breturn @@ -2395,7 +2395,7 @@ main: { /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] doplasma_from___b2: - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -2411,7 +2411,7 @@ main: { /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] doplasma_from___b6: - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -2565,7 +2565,7 @@ makechar: { jmp __b6 // makechar::@6 __b6: - // [42] call rand -- call_phi_near + // [42] call rand jsr rand // [43] rand::return#2 = rand::return#0 jmp __b10 @@ -2623,7 +2623,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [53] call start -- call_phi_near + // [53] call start jsr start jmp __b1 // end::@1 @@ -2642,7 +2642,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint -- call_phi_near + // [57] call print_uint jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2650,7 +2650,7 @@ end: { // end::@2 __b2: // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn @@ -2897,7 +2897,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2908,7 +2908,7 @@ print_uint: { // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2974,7 +2974,7 @@ print_uchar: { // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2988,7 +2988,7 @@ print_uchar: { // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3361,7 +3361,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -3374,12 +3374,12 @@ main: { .label count = 2 // makechar() // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near + // [25] phi from main to makechar [phi:main->makechar] jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] // main::@4 // start() - // [8] call start -- call_phi_near + // [8] call start jsr start // main::@5 // block = CIA2->PORT_A @@ -3421,7 +3421,7 @@ main: { lda.z block sta CIA2 // end() - // [17] call end -- call_phi_near + // [17] call end /* Reset screen colors */ jsr end // main::@return @@ -3435,7 +3435,7 @@ main: { // [20] call doplasma /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -3450,7 +3450,7 @@ main: { // [22] call doplasma /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -3597,7 +3597,7 @@ makechar: { // makechar::@6 __b6: // rand() - // [42] call rand -- call_phi_near + // [42] call rand jsr rand // [43] rand::return#2 = rand::return#0 // makechar::@10 @@ -3653,7 +3653,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [53] call start -- call_phi_near + // [53] call start jsr start // end::@1 // last_time -= Ticks @@ -3673,13 +3673,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint -- call_phi_near + // [57] call print_uint jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } @@ -3932,7 +3932,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3941,7 +3941,7 @@ print_uint: { // [97] call print_uchar // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4004,7 +4004,7 @@ print_uchar: { // Table of hexadecimal digits // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4017,7 +4017,7 @@ print_uchar: { // [110] call print_char // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index f2b536ec9..a29fd50cf 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -2079,7 +2079,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2091,7 +2091,7 @@ __start: { // main main: { .label i = $d - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -2125,7 +2125,7 @@ main: { jmp __b3 // main::@3 __b3: - // [10] call end -- call_phi_near + // [10] call end jsr end jmp __breturn // main::@return @@ -2138,7 +2138,7 @@ main: { // main::@2 __b2: // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near + // [32] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: jsr sum // [14] sum::return#2 = sum::s#3 @@ -2146,7 +2146,7 @@ main: { // main::@4 __b4: // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal -- call_phi_near + // [16] call print_uint_decimal jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2156,7 +2156,7 @@ main: { // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln jmp __b6 // main::@6 @@ -2198,7 +2198,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [24] call start -- call_phi_near + // [24] call start jsr start jmp __b1 // end::@1 @@ -2217,7 +2217,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint -- call_phi_near + // [28] call print_uint jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2227,7 +2227,7 @@ end: { // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy jsr print_ln jmp __breturn // end::@return @@ -2320,7 +2320,7 @@ print_uint_decimal: { .label w = 2 // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] utoa_from_print_uint_decimal: jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2329,7 +2329,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] print_str_from___b1: jsr print_str jmp __breturn @@ -2382,7 +2382,7 @@ print_uint: { // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2393,7 +2393,7 @@ print_uint: { // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2506,7 +2506,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [76] utoa_append::return#0 = utoa_append::value#2 @@ -2562,7 +2562,7 @@ print_str: { // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2596,7 +2596,7 @@ print_uchar: { // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2610,7 +2610,7 @@ print_uchar: { // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3007,7 +3007,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -3017,7 +3017,7 @@ __start: { main: { .label i = $d // start() - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi print_line_cursor#22 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3047,7 +3047,7 @@ main: { // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // end() - // [10] call end -- call_phi_near + // [10] call end jsr end // main::@return // } @@ -3058,21 +3058,21 @@ main: { __b2: // sum() // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near + // [32] phi from main::@2 to sum [phi:main::@2->sum] jsr sum // sum() // [14] sum::return#2 = sum::s#3 // main::@4 // print_uint_decimal(sum()) // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal -- call_phi_near + // [16] call print_uint_decimal jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_ln() // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln // main::@6 // for(i=0;i<6;i++) @@ -3114,7 +3114,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [24] call start -- call_phi_near + // [24] call start jsr start // end::@1 // last_time -= Ticks @@ -3134,14 +3134,14 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint -- call_phi_near + // [28] call print_uint jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy jsr print_ln // end::@return // } @@ -3231,13 +3231,13 @@ print_uint_decimal: { // utoa(w, decimal_digits, DECIMAL) // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] jsr print_str // print_uint_decimal::@return // } @@ -3286,7 +3286,7 @@ print_uint: { // [54] call print_uchar // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3295,7 +3295,7 @@ print_uint: { // [56] call print_uchar // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -3404,7 +3404,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [76] utoa_append::return#0 = utoa_append::value#2 @@ -3457,7 +3457,7 @@ print_str: { // [84] call print_char // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3490,7 +3490,7 @@ print_uchar: { // Table of hexadecimal digits // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3503,7 +3503,7 @@ print_uchar: { // [92] call print_char // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index c022d9e19..2d2c4c18b 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1162,7 +1162,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1173,7 +1173,7 @@ __start: { } // main main: { - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1181,7 +1181,7 @@ main: { // main::@1 __b1: // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near + // [32] phi from main::@1 to round [phi:main::@1->round] round_from___b1: jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1190,7 +1190,7 @@ main: { // main::@2 __b2: // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near + // [32] phi from main::@2 to round [phi:main::@2->round] round_from___b2: jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1199,7 +1199,7 @@ main: { // main::@3 __b3: // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near + // [32] phi from main::@3 to round [phi:main::@3->round] round_from___b3: jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1208,7 +1208,7 @@ main: { // main::@4 __b4: // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near + // [32] phi from main::@4 to round [phi:main::@4->round] round_from___b4: jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1217,7 +1217,7 @@ main: { // main::@5 __b5: // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near + // [32] phi from main::@5 to round [phi:main::@5->round] round_from___b5: jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1226,7 +1226,7 @@ main: { // main::@6 __b6: // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near + // [32] phi from main::@6 to round [phi:main::@6->round] round_from___b6: jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1235,7 +1235,7 @@ main: { // main::@7 __b7: // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near + // [32] phi from main::@7 to round [phi:main::@7->round] round_from___b7: jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1244,7 +1244,7 @@ main: { // main::@8 __b8: // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near + // [32] phi from main::@8 to round [phi:main::@8->round] round_from___b8: jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1253,7 +1253,7 @@ main: { // main::@9 __b9: // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near + // [32] phi from main::@9 to round [phi:main::@9->round] round_from___b9: jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1262,7 +1262,7 @@ main: { // main::@10 __b10: // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near + // [32] phi from main::@10 to round [phi:main::@10->round] round_from___b10: jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1270,7 +1270,7 @@ main: { jmp __b11 // main::@11 __b11: - // [28] call end -- call_phi_near + // [28] call end jsr end jmp __breturn // main::@return @@ -1411,7 +1411,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [49] call start -- call_phi_near + // [49] call start jsr start jmp __b1 // end::@1 @@ -1430,7 +1430,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint -- call_phi_near + // [53] call print_uint jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1438,7 +1438,7 @@ end: { // end::@2 __b2: // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn @@ -1462,7 +1462,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1473,7 +1473,7 @@ print_uint: { // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1539,7 +1539,7 @@ print_uchar: { // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1553,7 +1553,7 @@ print_uchar: { // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1802,7 +1802,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -1811,72 +1811,72 @@ __start: { // main main: { // start() - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // main::@1 // round() // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near + // [32] phi from main::@1 to round [phi:main::@1->round] jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // round() // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near + // [32] phi from main::@2 to round [phi:main::@2->round] jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // round() // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near + // [32] phi from main::@3 to round [phi:main::@3->round] jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // round() // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near + // [32] phi from main::@4 to round [phi:main::@4->round] jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // round() // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near + // [32] phi from main::@5 to round [phi:main::@5->round] jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // round() // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near + // [32] phi from main::@6 to round [phi:main::@6->round] jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // round() // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near + // [32] phi from main::@7 to round [phi:main::@7->round] jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // round() // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near + // [32] phi from main::@8 to round [phi:main::@8->round] jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // round() // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near + // [32] phi from main::@9 to round [phi:main::@9->round] jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // round() // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near + // [32] phi from main::@10 to round [phi:main::@10->round] jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // end() - // [28] call end -- call_phi_near + // [28] call end jsr end // main::@return // } @@ -2016,7 +2016,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [49] call start -- call_phi_near + // [49] call start jsr start // end::@1 // last_time -= Ticks @@ -2036,13 +2036,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint -- call_phi_near + // [53] call print_uint jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } @@ -2064,7 +2064,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2073,7 +2073,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2136,7 +2136,7 @@ print_uchar: { // Table of hexadecimal digits // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2149,7 +2149,7 @@ print_uchar: { // [73] call print_char // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index c77e7eb9b..a5d1cdb6c 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -1304,7 +1304,7 @@ main: { .label b = $929 .label r = $a // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [12] phi from main to mulf_init [phi:main->mulf_init] mulf_init_from_main: jsr mulf_init jmp __b4 @@ -1334,7 +1334,7 @@ main: { __b3: // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR - // [6] call mulf16u -- call_phi_near + // [6] call mulf16u jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 jmp __b5 @@ -1344,7 +1344,7 @@ main: { // [9] *BORDER_COLOR = -- *BORDER_COLOR -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDER_COLOR // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong -- call_phi_near + // [11] call print_ulong jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: @@ -1702,7 +1702,7 @@ print_ulong: { // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 @@ -1716,7 +1716,7 @@ print_ulong: { // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return @@ -1735,7 +1735,7 @@ print_uint: { // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1746,7 +1746,7 @@ print_uint: { // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2039,7 +2039,7 @@ main: { .label r = $a // mulf_init() // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [12] phi from main to mulf_init [phi:main->mulf_init] jsr mulf_init // main::@4 // asm @@ -2064,7 +2064,7 @@ main: { // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // dword r = mulf16u(a, b) - // [6] call mulf16u -- call_phi_near + // [6] call mulf16u jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 // main::@5 @@ -2074,7 +2074,7 @@ main: { dec BORDER_COLOR // print_ulong(r) // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong -- call_phi_near + // [11] call print_ulong jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [3] phi print_char_cursor#15 = SCREEN [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -2431,7 +2431,7 @@ print_ulong: { // [47] call print_uint // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2443,7 +2443,7 @@ print_ulong: { // [49] call print_uint // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } @@ -2461,7 +2461,7 @@ print_uint: { // [53] call print_uchar // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2470,7 +2470,7 @@ print_uint: { // [55] call print_uchar // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2496,7 +2496,7 @@ print_uchar: { // Table of hexadecimal digits // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2509,7 +2509,7 @@ print_uchar: { // [63] call print_char // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/missing-band.log b/src/test/ref/missing-band.log index f452c37cb..344b3707d 100644 --- a/src/test/ref/missing-band.log +++ b/src/test/ref/missing-band.log @@ -198,7 +198,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label a = 2 - // [1] call foo -- call_phi_near + // [1] call foo jsr foo // [2] foo::return#0 = foo::return#1 jmp __b1 @@ -287,7 +287,7 @@ Score: 39 main: { .label a = 2 // foo(1) - // [1] call foo -- call_phi_near + // [1] call foo jsr foo // [2] foo::return#0 = foo::return#1 // main::@1 diff --git a/src/test/ref/modglobal.log b/src/test/ref/modglobal.log index c76028bca..955b0c772 100644 --- a/src/test/ref/modglobal.log +++ b/src/test/ref/modglobal.log @@ -394,7 +394,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 lda #0 jsr inccnt // [2] inccnt::return#0 = inccnt::return#2 @@ -413,7 +413,7 @@ main: { inccnt_from___b1: // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy jsr inccnt // [7] inccnt::return#1 = inccnt::return#2 jmp __b2 @@ -527,7 +527,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 txa jsr inccnt // inccnt() @@ -547,7 +547,7 @@ main: { // [13] phi from main::@1 to inccnt [phi:main::@1->inccnt] // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy jsr inccnt // inccnt() // [7] inccnt::return#1 = inccnt::return#2 diff --git a/src/test/ref/modglobalmin.log b/src/test/ref/modglobalmin.log index 1868da3ec..be74abc80 100644 --- a/src/test/ref/modglobalmin.log +++ b/src/test/ref/modglobalmin.log @@ -215,7 +215,7 @@ main: { // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] inccnt_from_main: - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 ldx #0 jsr inccnt jmp __b1 @@ -228,7 +228,7 @@ main: { // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] inccnt_from___b1: - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt jmp __b2 // main::@2 @@ -305,7 +305,7 @@ main: { // inccnt() // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 ldx #0 jsr inccnt // main::@1 @@ -318,7 +318,7 @@ main: { // inccnt() // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt // main::@2 // SCREEN[1]=++cnt; diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index 7fc828d4b..200b2bb19 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -516,7 +516,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u -- call_phi_near + // [5] call mul8u jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 jmp __b4 @@ -757,7 +757,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u -- call_phi_near + // [5] call mul8u jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 // main::@4 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index 4028e59da..ba50c3453 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1759,7 +1759,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [8] call main -- call_phi_near + // [8] call main jsr main jmp __breturn // __start::@return @@ -1782,7 +1782,7 @@ plex_irq: { jmp __b3 // plex_irq::@3 __b3: - // [13] call plexShowSprite -- call_phi_near + // [13] call plexShowSprite jsr plexShowSprite jmp plexFreeNextYpos1 // plex_irq::plexFreeNextYpos1 @@ -1851,7 +1851,7 @@ plex_irq: { main: { // asm { sei } sei - // [27] call init -- call_phi_near + // [27] call init jsr init // [28] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1859,7 +1859,7 @@ main: { // main::@1 __b1: // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [79] phi from main::@1 to loop [phi:main::@1->loop] loop_from___b1: jsr loop jmp __breturn @@ -1981,7 +1981,7 @@ init: { sta D011 // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [94] phi from init to plexInit [phi:init->plexInit] plexInit_from_init: jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] @@ -2147,7 +2147,7 @@ loop: { // [90] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] plexSort_from___b5: jsr plexSort jmp __b6 @@ -2756,7 +2756,7 @@ __start: { sta.z framedone // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [8] call main -- call_phi_near + // [8] call main jsr main // __start::@return // [9] return @@ -2777,7 +2777,7 @@ plex_irq: { // plex_irq::@3 __b3: // plexShowSprite() - // [13] call plexShowSprite -- call_phi_near + // [13] call plexShowSprite jsr plexShowSprite // plex_irq::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; @@ -2847,13 +2847,13 @@ main: { // asm { sei } sei // init() - // [27] call init -- call_phi_near + // [27] call init jsr init // [28] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [79] phi from main::@1 to loop [phi:main::@1->loop] jsr loop // main::@return // } @@ -2989,7 +2989,7 @@ init: { // plexInit(SCREEN) // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [94] phi from init to plexInit [phi:init->plexInit] jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] // [58] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -3153,7 +3153,7 @@ loop: { inc BORDER_COLOR // plexSort() // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] jsr plexSort // loop::@6 // *BORDER_COLOR = GREEN diff --git a/src/test/ref/multiply-16bit-const.log b/src/test/ref/multiply-16bit-const.log index a2bb26f85..d043c37d7 100644 --- a/src/test/ref/multiply-16bit-const.log +++ b/src/test/ref/multiply-16bit-const.log @@ -1638,7 +1638,7 @@ main: { .label __10 = 2 .label __11 = 2 // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1793,7 +1793,7 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal -- call_phi_near + // [13] call print_ulong_decimal jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1801,7 +1801,7 @@ main: { // main::@3 __b3: // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: jsr print_ln jmp __b4 @@ -1837,7 +1837,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [32] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1853,7 +1853,7 @@ print_ulong_decimal: { .label w = 2 // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] ultoa_from_print_ulong_decimal: jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] @@ -1861,7 +1861,7 @@ print_ulong_decimal: { jmp __b1 // print_ulong_decimal::@1 __b1: - // [24] call print_str -- call_phi_near + // [24] call print_str jsr print_str jmp __breturn // print_ulong_decimal::@return @@ -2076,7 +2076,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2133,7 +2133,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char -- call_phi_near + // [64] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -2473,7 +2473,7 @@ main: { .label __11 = 2 // print_cls() // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#13 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2625,13 +2625,13 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal -- call_phi_near + // [13] call print_ulong_decimal jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] jsr print_ln // main::@4 // i+=333 @@ -2665,7 +2665,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [32] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2680,12 +2680,12 @@ print_ulong_decimal: { // ultoa(w, decimal_digits_long, DECIMAL) // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] // print_ulong_decimal::@1 // print_str(decimal_digits_long) - // [24] call print_str -- call_phi_near + // [24] call print_str jsr print_str // print_ulong_decimal::@return // } @@ -2893,7 +2893,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2948,7 +2948,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char -- call_phi_near + // [64] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index 7aef83712..9730630ef 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -318,7 +318,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 ldx #1 jsr foo // [3] foo::return#2 = foo::return#0 @@ -339,7 +339,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 ldx #2 jsr foo // [7] foo::return#3 = foo::return#0 @@ -476,7 +476,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 ldx #1 jsr foo // foo(1, &y1) @@ -497,7 +497,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 ldx #2 jsr foo // foo(2, &y2) diff --git a/src/test/ref/nomodify-3.log b/src/test/ref/nomodify-3.log index c417d2987..54e25b59f 100644 --- a/src/test/ref/nomodify-3.log +++ b/src/test/ref/nomodify-3.log @@ -133,7 +133,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -204,7 +204,7 @@ __start: { sta.z i // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/nomodify-4.log b/src/test/ref/nomodify-4.log index 2967bc6f7..7acfaf501 100644 --- a/src/test/ref/nomodify-4.log +++ b/src/test/ref/nomodify-4.log @@ -140,7 +140,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -151,7 +151,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 lda #'b' jsr print jmp __breturn @@ -219,7 +219,7 @@ main: { // print('a') // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -227,7 +227,7 @@ main: { // print('b') // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 lda #'b' jsr print // main::@return diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index 9004c2050..d4b232a12 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -606,7 +606,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] gen_char3_from___b2: jsr gen_char3 jmp __b4 @@ -868,7 +868,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] jsr gen_char3 // main::@4 // charset = charset+8 diff --git a/src/test/ref/null-constant-1.log b/src/test/ref/null-constant-1.log index 5927f14f1..1c2cc9f25 100644 --- a/src/test/ref/null-constant-1.log +++ b/src/test/ref/null-constant-1.log @@ -249,7 +249,7 @@ main: { // [1] call get // [10] phi from main to get [phi:main->get] get_from_main: - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 lda #SCREEN @@ -265,7 +265,7 @@ main: { // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 lda #<0 sta.z get.ptr lda #>0 @@ -379,7 +379,7 @@ main: { // get(SCREEN) // [1] call get // [10] phi from main to get [phi:main->get] - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 lda #SCREEN @@ -395,7 +395,7 @@ main: { // get(NULL) // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 lda #<0 sta.z get.ptr sta.z get.ptr+1 diff --git a/src/test/ref/number-conversion.log b/src/test/ref/number-conversion.log index 7c834dd71..db482258b 100644 --- a/src/test/ref/number-conversion.log +++ b/src/test/ref/number-conversion.log @@ -1393,7 +1393,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1408,7 +1408,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1423,7 +1423,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1438,7 +1438,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1453,7 +1453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1468,7 +1468,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1483,7 +1483,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1498,7 +1498,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1513,7 +1513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1529,7 +1529,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1544,7 +1544,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1559,7 +1559,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -1574,7 +1574,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -1589,7 +1589,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1604,7 +1604,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -1619,7 +1619,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -1634,7 +1634,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -1649,7 +1649,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -1664,7 +1664,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -1679,7 +1679,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -1694,7 +1694,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -1710,7 +1710,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -1725,7 +1725,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -1740,7 +1740,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -1755,7 +1755,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -1770,7 +1770,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -1785,7 +1785,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -1800,7 +1800,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -1815,7 +1815,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -1830,7 +1830,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -1845,7 +1845,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -1860,7 +1860,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -1875,7 +1875,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -1890,7 +1890,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -1905,7 +1905,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2199,7 +2199,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2211,7 +2211,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2223,7 +2223,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2235,7 +2235,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -2247,7 +2247,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2259,7 +2259,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2271,7 +2271,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2283,7 +2283,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2295,7 +2295,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2308,7 +2308,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2320,7 +2320,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2332,7 +2332,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2344,7 +2344,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2356,7 +2356,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2368,7 +2368,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2380,7 +2380,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2392,7 +2392,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2404,7 +2404,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2416,7 +2416,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2428,7 +2428,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2440,7 +2440,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2453,7 +2453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2465,7 +2465,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2477,7 +2477,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2489,7 +2489,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2501,7 +2501,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2513,7 +2513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -2525,7 +2525,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -2537,7 +2537,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -2549,7 +2549,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -2561,7 +2561,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -2573,7 +2573,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -2585,7 +2585,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -2597,7 +2597,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -2609,7 +2609,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // main::@return diff --git a/src/test/ref/number-ternary-fail-2.log b/src/test/ref/number-ternary-fail-2.log index da320d2ee..99ddb8acf 100644 --- a/src/test/ref/number-ternary-fail-2.log +++ b/src/test/ref/number-ternary-fail-2.log @@ -560,7 +560,7 @@ main: { .label height = 6*2+3 .label maze = malloc.return // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near + // [6] phi from main to malloc [phi:main->malloc] malloc_from_main: jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] @@ -569,7 +569,7 @@ main: { // main::@1 __b1: // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] SolveMaze_from___b1: jsr SolveMaze jmp __b2 @@ -742,13 +742,13 @@ main: { .label maze = malloc.return // malloc(width * height) // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near + // [6] phi from main to malloc [phi:main->malloc] jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // SolveMaze(maze, width, height) // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] jsr SolveMaze // main::@2 // asm diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index 78c5c6e98..88a159a46 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -609,14 +609,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testBytes -- call_phi_near + // [1] call testBytes jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testSBytes -- call_phi_near + // [3] call testSBytes jsr testSBytes jmp __breturn // main::@return @@ -765,12 +765,12 @@ Score: 180 // main main: { // testBytes() - // [1] call testBytes -- call_phi_near + // [1] call testBytes jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testSBytes() - // [3] call testSBytes -- call_phi_near + // [3] call testSBytes jsr testSBytes // main::@return // } diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 349d1069a..3eeee67ea 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -318,7 +318,7 @@ main: { // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] line_from___b1: - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy jsr line jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] line_from___b2: - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy jsr line jmp __b4 // main::@4 @@ -368,7 +368,7 @@ line: { // [14] call plot // [18] phi from line to plot [phi:line->plot] plot_from_line: - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy jsr plot jmp __b1 // line::@1 @@ -379,7 +379,7 @@ line: { // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] plot_from___b1: - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy jsr plot jmp __breturn // line::@return @@ -491,7 +491,7 @@ main: { tax // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy jsr line // main::@3 // for(byte i : 0..8) @@ -513,7 +513,7 @@ main: { tax // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy jsr line // main::@4 // for(byte j : 10..18) @@ -534,7 +534,7 @@ line: { // [13] plot::x#0 = line::l#2 // [14] call plot // [18] phi from line to plot [phi:line->plot] - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy jsr plot // line::@1 // plot(l+20) @@ -543,7 +543,7 @@ line: { axs #-[$14] // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy jsr plot // line::@return // } diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index 7fa4b33d3..52b2b1b17 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -308,7 +308,7 @@ main: { // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] plot_from___b1: - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy jsr plot jmp __b4 // main::@4 @@ -333,7 +333,7 @@ main: { // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] plot_from___b2: - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy jsr plot jmp __b5 // main::@5 @@ -358,7 +358,7 @@ main: { // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] plot_from___b3: - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy jsr plot jmp __b6 // main::@6 @@ -478,7 +478,7 @@ main: { // [2] plot::x#0 = main::i#2 // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy jsr plot // main::@4 // for(byte i : 0..10) @@ -498,7 +498,7 @@ main: { // [7] plot::x#1 = main::j#2 // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy jsr plot // main::@5 // for(byte j : 0..10) @@ -518,7 +518,7 @@ main: { // [12] plot::x#2 = main::k#2 // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy jsr plot // main::@6 // for(byte k : 0..10) diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 896fa94b1..3b95a5fc5 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -369,7 +369,7 @@ main: { fill_from_main: // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 lda #<$400 sta.z fill.screen lda #>$400 @@ -385,7 +385,7 @@ main: { fill_from___b1: // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 lda #<$2000 sta.z fill.screen lda #>$2000 @@ -537,7 +537,7 @@ main: { // [5] phi from main to fill [phi:main->fill] // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 lda #<$400 sta.z fill.screen lda #>$400 @@ -550,7 +550,7 @@ main: { // [5] phi from main::@1 to fill [phi:main::@1->fill] // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 lda #<$2000 sta.z fill.screen lda #>$2000 diff --git a/src/test/ref/plus4-kbhit.log b/src/test/ref/plus4-kbhit.log index 8fdc1fc16..88c782d0d 100644 --- a/src/test/ref/plus4-kbhit.log +++ b/src/test/ref/plus4-kbhit.log @@ -226,7 +226,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call kbhit -- call_phi_near + // [2] call kbhit jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 jmp __b2 @@ -338,7 +338,7 @@ main: { // main::@1 __b1: // kbhit() - // [2] call kbhit -- call_phi_near + // [2] call kbhit jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 // main::@2 diff --git a/src/test/ref/plus4-keyboard-test.log b/src/test/ref/plus4-keyboard-test.log index 0fa8a6a96..3e88ecc22 100644 --- a/src/test/ref/plus4-keyboard-test.log +++ b/src/test/ref/plus4-keyboard-test.log @@ -573,7 +573,7 @@ main: { // asm { sei } sei // [1] call memset - // [18] phi from main to memset [phi:main->memset] -- call_phi_near + // [18] phi from main to memset [phi:main->memset] memset_from_main: jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] @@ -830,7 +830,7 @@ main: { sei // memset(DEFAULT_SCREEN, ' ', 0x0400) // [1] call memset - // [18] phi from main to memset [phi:main->memset] -- call_phi_near + // [18] phi from main to memset [phi:main->memset] jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] __b5: diff --git a/src/test/ref/pointer-plus-0.log b/src/test/ref/pointer-plus-0.log index 8240d1a2b..359e48e62 100644 --- a/src/test/ref/pointer-plus-0.log +++ b/src/test/ref/pointer-plus-0.log @@ -241,7 +241,7 @@ main: { // [1] call first // [10] phi from main to first [phi:main->first] first_from_main: - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 lda #msg1 @@ -259,7 +259,7 @@ main: { // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] first_from___b1: - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 lda #msg2 @@ -352,7 +352,7 @@ main: { // first(msg1) // [1] call first // [10] phi from main to first [phi:main->first] - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 lda #msg1 @@ -370,7 +370,7 @@ main: { // first(msg2) // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 618e61fe6..ddb2effb8 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -394,7 +394,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call nexttext -- call_phi_near + // [2] call nexttext jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: @@ -584,7 +584,7 @@ main: { // main::@1 __b1: // nexttext(&text) - // [2] call nexttext -- call_phi_near + // [2] call nexttext jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] // [3] phi main::screen#2 = main::screen#4 [phi:main::@1/main::@3->main::@2#0] -- register_copy diff --git a/src/test/ref/pointer-pointer-3.log b/src/test/ref/pointer-pointer-3.log index 78e4ba2e4..45197a30d 100644 --- a/src/test/ref/pointer-pointer-3.log +++ b/src/test/ref/pointer-pointer-3.log @@ -224,7 +224,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -238,7 +238,7 @@ main: { // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] setscreen_from_main: - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 lda #screen1 @@ -254,7 +254,7 @@ main: { // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] setscreen_from___b1: - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 lda #screen2 @@ -359,7 +359,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -370,7 +370,7 @@ main: { // setscreen(&screen, screen1) // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 lda #screen1 @@ -385,7 +385,7 @@ main: { // setscreen(&screen, screen2) // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 lda #screen2 diff --git a/src/test/ref/pointer-swap.log b/src/test/ref/pointer-swap.log index 25a014563..3044bc33c 100644 --- a/src/test/ref/pointer-swap.log +++ b/src/test/ref/pointer-swap.log @@ -611,7 +611,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 lda #<0 sta.z tempbuffer_1 lda #>0 @@ -630,7 +630,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 lda #buffer1 @@ -653,7 +653,7 @@ main: { // [23] phi from main::@2 to swap [phi:main::@2->swap] swap_from___b2: // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy jsr swap jmp __b3 // main::@3 @@ -672,7 +672,7 @@ main: { // [23] phi from main::@3 to swap [phi:main::@3->swap] swap_from___b3: // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy jsr swap jmp __breturn // main::@return @@ -746,7 +746,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy jsr print jmp __breturn // swap::@return @@ -872,7 +872,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 lda #<0 sta.z tempbuffer_1 sta.z tempbuffer_1+1 @@ -887,7 +887,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 lda #buffer1 @@ -908,7 +908,7 @@ main: { // [6] call swap // [23] phi from main::@2 to swap [phi:main::@2->swap] // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy jsr swap // main::@3 // [7] tempbuffer#23 = newbuffer#0 -- pbuz1=pbuz2 @@ -925,7 +925,7 @@ main: { // [9] call swap // [23] phi from main::@3 to swap [phi:main::@3->swap] // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy jsr swap // main::@return // } @@ -1004,7 +1004,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy jsr print // swap::@return // } diff --git a/src/test/ref/pointer-void-1.log b/src/test/ref/pointer-void-1.log index 1910db674..d8e90126b 100644 --- a/src/test/ref/pointer-void-1.log +++ b/src/test/ref/pointer-void-1.log @@ -290,7 +290,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 lda #vb @@ -305,7 +305,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #vw @@ -320,7 +320,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #vd @@ -441,7 +441,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 lda #vb @@ -453,7 +453,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #vw @@ -465,7 +465,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #vd diff --git a/src/test/ref/pointer-void-2.log b/src/test/ref/pointer-void-2.log index 36f96bc13..1ddbf6b8f 100644 --- a/src/test/ref/pointer-void-2.log +++ b/src/test/ref/pointer-void-2.log @@ -284,7 +284,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 lda #b @@ -299,7 +299,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #w @@ -314,7 +314,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #d @@ -429,7 +429,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 lda #b @@ -441,7 +441,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #w @@ -453,7 +453,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #d diff --git a/src/test/ref/pointer-void-3.log b/src/test/ref/pointer-void-3.log index 8c1aced57..e6393cae6 100644 --- a/src/test/ref/pointer-void-3.log +++ b/src/test/ref/pointer-void-3.log @@ -284,7 +284,7 @@ main: { // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 lda #<$c000 sta.z heap_head lda #>$c000 @@ -302,7 +302,7 @@ main: { // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] malloc_from___b1: - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy jsr malloc // [5] malloc::return#1 = malloc::return#2 jmp __b2 @@ -418,7 +418,7 @@ main: { // byte* buf1 = malloc() // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 lda #<$c000 sta.z heap_head lda #>$c000 @@ -435,7 +435,7 @@ main: { // byte* buf2 = malloc() // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy jsr malloc // byte* buf2 = malloc() // [5] malloc::return#1 = malloc::return#2 diff --git a/src/test/ref/post-increment-problem-2.log b/src/test/ref/post-increment-problem-2.log index fb71a2f3d..0b912585f 100644 --- a/src/test/ref/post-increment-problem-2.log +++ b/src/test/ref/post-increment-problem-2.log @@ -245,7 +245,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call incscreen -- call_phi_near + // [5] call incscreen jsr incscreen jmp __b3 // main::@3 @@ -342,7 +342,7 @@ main: { // main::@2 __b2: // incscreen(offset) - // [5] call incscreen -- call_phi_near + // [5] call incscreen jsr incscreen // main::@3 // for (char x=0;x<254;x++) diff --git a/src/test/ref/pragma-noparam-noparen.log b/src/test/ref/pragma-noparam-noparen.log index 68ccb3b9d..ec255c1a4 100644 --- a/src/test/ref/pragma-noparam-noparen.log +++ b/src/test/ref/pragma-noparam-noparen.log @@ -1,4 +1,3 @@ -Warning! Unknown #pragma nobank CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/pragma-noparenthesis.log b/src/test/ref/pragma-noparenthesis.log index 7632e3d44..c12b0e992 100644 --- a/src/test/ref/pragma-noparenthesis.log +++ b/src/test/ref/pragma-noparenthesis.log @@ -150,14 +150,14 @@ __start: { jmp __init1 // __start::__init1 __init1: - // [2] call init -- call_phi_near + // [2] call init jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -235,11 +235,11 @@ Score: 42 __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] // __start::__init1 - // [2] call init -- call_phi_near + // [2] call init jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return diff --git a/src/test/ref/primes-1000-2.log b/src/test/ref/primes-1000-2.log index c6f05a9b7..178959548 100644 --- a/src/test/ref/primes-1000-2.log +++ b/src/test/ref/primes-1000-2.log @@ -2572,7 +2572,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u -- call_phi_near + // [7] call mul8u jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 jmp __b8 @@ -2630,7 +2630,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u -- call_phi_near + // [18] call div16u8u jsr div16u8u jmp __b9 // main::@9 @@ -2700,7 +2700,7 @@ main: { lda.z potential+1 sta (__15),y // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal -- call_phi_near + // [29] call print_uint_decimal jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] __b10_from___b6: @@ -2710,7 +2710,7 @@ main: { // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] print_char_from___b10: - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b11 @@ -2818,7 +2818,7 @@ div16u8u: { divr8u_from_div16u8u: // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 ldy #0 jsr divr8u jmp __b1 @@ -2834,7 +2834,7 @@ div16u8u: { divr8u_from___b1: // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy jsr divr8u jmp __breturn // div16u8u::@return @@ -2853,7 +2853,7 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] utoa_from_print_uint_decimal: jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2862,7 +2862,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] print_str_from___b1: jsr print_str jmp __breturn @@ -3088,7 +3088,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [96] utoa_append::return#0 = utoa_append::value#2 @@ -3143,7 +3143,7 @@ print_str: { // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3628,7 +3628,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u -- call_phi_near + // [7] call mul8u jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 // main::@8 @@ -3679,7 +3679,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u -- call_phi_near + // [18] call div16u8u jsr div16u8u // main::@9 // div16u8u(potential, (char)PRIMES[test_idx++]); @@ -3746,14 +3746,14 @@ main: { sta (__15),y // print_uint_decimal(potential) // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal -- call_phi_near + // [29] call print_uint_decimal jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] // main::@10 // print_char(' ') // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@11 @@ -3859,7 +3859,7 @@ div16u8u: { // [61] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 ldy #0 jsr divr8u // div16u8u::@1 @@ -3873,7 +3873,7 @@ div16u8u: { // [61] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy jsr divr8u // div16u8u::@return // } @@ -3892,13 +3892,13 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] jsr print_str // print_uint_decimal::@return // } @@ -4114,7 +4114,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [96] utoa_append::return#0 = utoa_append::value#2 @@ -4166,7 +4166,7 @@ print_str: { lda (str),y // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/print-problem.log b/src/test/ref/print-problem.log index f20359e65..660c6d482 100644 --- a/src/test/ref/print-problem.log +++ b/src/test/ref/print-problem.log @@ -273,7 +273,7 @@ main: { // [1] call ln // [9] phi from main to ln [phi:main->ln] ln_from_main: - // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near + // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -284,7 +284,7 @@ main: { // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] ln_from___b1: - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -294,7 +294,7 @@ main: { // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] ln_from___b2: - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy jsr ln jmp __b3 // main::@3 @@ -375,7 +375,7 @@ main: { // ln() // [1] call ln // [9] phi from main to ln [phi:main->ln] - // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near + // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -383,14 +383,14 @@ main: { // ln() // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // ln() // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy jsr ln // main::@3 // *SCREEN = ch diff --git a/src/test/ref/printf-1.log b/src/test/ref/printf-1.log index 17ab790c4..697639266 100644 --- a/src/test/ref/printf-1.log +++ b/src/test/ref/printf-1.log @@ -2496,7 +2496,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2504,7 +2504,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2540,7 +2540,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2581,7 +2581,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2593,14 +2593,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [64] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -2616,7 +2616,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2625,7 +2625,7 @@ main: { jmp __b2 // main::@2 __b2: - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -2640,7 +2640,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2649,7 +2649,7 @@ main: { jmp __b4 // main::@4 __b4: - // [36] call cputln -- call_phi_near + // [36] call cputln jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2664,7 +2664,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2673,7 +2673,7 @@ main: { jmp __b6 // main::@6 __b6: - // [40] call cputln -- call_phi_near + // [40] call cputln jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2827,7 +2827,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2954,7 +2954,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] strlen_from___b3: jsr strlen // [83] strlen::return#2 = strlen::len#2 @@ -3012,14 +3012,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy jsr printf_padding jmp __b2 // printf_string::@2 __b2: // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] printf_str_from___b2: jsr printf_str jmp __b7 @@ -3047,7 +3047,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy jsr printf_padding jmp __breturn // printf_string::@return @@ -3075,7 +3075,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3094,7 +3094,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3110,7 +3110,7 @@ cscroll: { memset_from___b3: // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3126,7 +3126,7 @@ cscroll: { memset_from___b4: // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3782,12 +3782,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -3816,7 +3816,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -3855,7 +3855,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -3866,7 +3866,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -3874,7 +3874,7 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [64] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -3886,14 +3886,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string // [31] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // cputln() - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -3905,14 +3905,14 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string // [35] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputln() - // [36] call cputln -- call_phi_near + // [36] call cputln jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3924,14 +3924,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string // [39] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // cputln() - // [40] call cputln -- call_phi_near + // [40] call cputln jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3943,7 +3943,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -4084,7 +4084,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll // cputln::@return // } @@ -4210,7 +4210,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] jsr strlen // strlen(str) // [83] strlen::return#2 = strlen::len#2 @@ -4260,14 +4260,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy jsr printf_padding // printf_string::@2 __b2: // printf_str(putc, str) // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] jsr printf_str // printf_string::@7 // if(format.justify_left && padding) @@ -4291,7 +4291,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy jsr printf_padding // printf_string::@return __breturn: @@ -4317,7 +4317,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4333,7 +4333,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4346,7 +4346,7 @@ cscroll: { // [147] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4359,7 +4359,7 @@ cscroll: { // [147] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-10.log b/src/test/ref/printf-10.log index dc91acd48..d9c32976a 100644 --- a/src/test/ref/printf-10.log +++ b/src/test/ref/printf-10.log @@ -394,7 +394,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -406,7 +406,7 @@ main: { // main::@1 __b1: // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] printf_string_from___b1: jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -418,7 +418,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 @@ -488,7 +488,7 @@ printf_string: { // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] printf_str_from_printf_string: // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 lda #main.name @@ -585,7 +585,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -595,7 +595,7 @@ main: { // main::@1 // printf("Hello, I am %s. who are you?", name) // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -603,7 +603,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 @@ -670,7 +670,7 @@ printf_string: { // [15] call printf_str // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 lda #main.name diff --git a/src/test/ref/printf-11.log b/src/test/ref/printf-11.log index 7ebcbc0f7..9aa0d1b12 100644 --- a/src/test/ref/printf-11.log +++ b/src/test/ref/printf-11.log @@ -521,7 +521,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -532,7 +532,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call printf_uint -- call_phi_near + // [3] call printf_uint jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -543,7 +543,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 @@ -748,7 +748,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -757,7 +757,7 @@ main: { // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Commodore is %x cool", pct) - // [3] call printf_uint -- call_phi_near + // [3] call printf_uint jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -765,7 +765,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 diff --git a/src/test/ref/printf-12.log b/src/test/ref/printf-12.log index d8bb5d234..b25c502ae 100644 --- a/src/test/ref/printf-12.log +++ b/src/test/ref/printf-12.log @@ -7801,7 +7801,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -7809,7 +7809,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -7845,7 +7845,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -7886,7 +7886,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -7898,7 +7898,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -7912,7 +7912,7 @@ main: { .label ul = $8aa52 .label c = $2c // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [104] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr jmp __b1 @@ -7929,7 +7929,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7972,7 +7972,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7988,7 +7988,7 @@ main: { printf_uint_from___b4: // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 lda #c @@ -8007,7 +8007,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8026,7 +8026,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -8050,7 +8050,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8069,7 +8069,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -8080,7 +8080,7 @@ main: { jmp __b9 // main::@9 __b9: - // [50] call printf_schar -- call_phi_near + // [50] call printf_schar jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -8095,7 +8095,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8114,7 +8114,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s8 @@ -8126,7 +8126,7 @@ main: { // main::@12 __b12: // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] printf_uchar_from___b12: jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -8142,7 +8142,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8161,7 +8161,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 lda #s10 @@ -8172,7 +8172,7 @@ main: { jmp __b15 // main::@15 __b15: - // [62] call printf_sint -- call_phi_near + // [62] call printf_sint jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -8187,7 +8187,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8206,7 +8206,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 lda #s12 @@ -8222,7 +8222,7 @@ main: { printf_uint_from___b18: // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 lda #ui @@ -8241,7 +8241,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8260,7 +8260,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 lda #s14 @@ -8271,7 +8271,7 @@ main: { jmp __b21 // main::@21 __b21: - // [74] call printf_slong -- call_phi_near + // [74] call printf_slong jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] __b22_from___b21: @@ -8286,7 +8286,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8305,7 +8305,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 lda #s16 @@ -8317,7 +8317,7 @@ main: { // main::@24 __b24: // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] printf_ulong_from___b24: jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -8333,7 +8333,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8490,7 +8490,7 @@ cputln: { sta.z conio_cursor_x // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [102] call cscroll -- call_phi_near + // [102] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -8660,7 +8660,7 @@ printf_uint: { // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy jsr utoa jmp __b2 // printf_uint::@2 @@ -8687,7 +8687,7 @@ printf_uint: { // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #0 jsr printf_number_buffer jmp __breturn @@ -8726,7 +8726,7 @@ printf_schar: { // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] uctoa_from___b2: - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 ldx #uvalue jsr uctoa jmp __b3 @@ -8754,7 +8754,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8783,7 +8783,7 @@ printf_uchar: { // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 ldx #main.uc jsr uctoa jmp __b2 @@ -8811,7 +8811,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8855,7 +8855,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b3 @@ -8883,7 +8883,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8922,7 +8922,7 @@ printf_slong: { // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] ultoa_from___b2: - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 lda #uvalue @@ -8957,7 +8957,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8986,7 +8986,7 @@ printf_ulong: { // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] ultoa_from___b1: - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 lda #main.ul @@ -9021,7 +9021,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -9050,7 +9050,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -9069,7 +9069,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -9085,7 +9085,7 @@ cscroll: { memset_from___b3: // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -9101,7 +9101,7 @@ cscroll: { memset_from___b4: // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -9330,7 +9330,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append // [211] utoa_append::return#0 = utoa_append::value#2 @@ -9372,7 +9372,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen // [218] strlen::return#2 = strlen::len#2 @@ -9456,7 +9456,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -9501,7 +9501,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -9515,7 +9515,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 @@ -9526,7 +9526,7 @@ printf_number_buffer: { // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -9565,7 +9565,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -9668,7 +9668,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -9808,7 +9808,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -10129,7 +10129,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper -- call_phi_near + // [339] call toupper jsr toupper // [340] toupper::return#3 = toupper::return#2 jmp __b3 @@ -11291,12 +11291,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -11325,7 +11325,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -11364,7 +11364,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -11375,7 +11375,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -11390,7 +11390,7 @@ main: { .label c = $2c // clrscr() // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [104] phi from main to clrscr [phi:main->clrscr] jsr clrscr // main::@1 // char c = 'x' @@ -11405,7 +11405,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -11427,7 +11427,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11443,7 +11443,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -11456,7 +11456,7 @@ main: { // [129] phi from main::@4 to printf_uint [phi:main::@4->printf_uint] // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 lda #c @@ -11472,7 +11472,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11488,7 +11488,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -11510,7 +11510,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11526,7 +11526,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -11535,7 +11535,7 @@ main: { // [49] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // printf("A signed char: %hhd\n", sc) - // [50] call printf_schar -- call_phi_near + // [50] call printf_schar jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 @@ -11547,7 +11547,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11563,7 +11563,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s8 @@ -11573,7 +11573,7 @@ main: { // main::@12 // printf("An unsigned char: %hhu\n", uc) // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -11585,7 +11585,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11601,7 +11601,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 lda #s10 @@ -11610,7 +11610,7 @@ main: { // [61] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // printf("A signed int: %d\n", si) - // [62] call printf_sint -- call_phi_near + // [62] call printf_sint jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -11622,7 +11622,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11638,7 +11638,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 lda #s12 @@ -11651,7 +11651,7 @@ main: { // [129] phi from main::@18 to printf_uint [phi:main::@18->printf_uint] // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 lda #ui @@ -11667,7 +11667,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11683,7 +11683,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 lda #s14 @@ -11692,7 +11692,7 @@ main: { // [73] phi from main::@20 to main::@21 [phi:main::@20->main::@21] // main::@21 // printf("A signed long: %ld\n", sl) - // [74] call printf_slong -- call_phi_near + // [74] call printf_slong jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] // main::@22 @@ -11704,7 +11704,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11720,7 +11720,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 lda #s16 @@ -11730,7 +11730,7 @@ main: { // main::@24 // printf("An unsigned long: %lu\n", ul) // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] // main::@25 @@ -11742,7 +11742,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11901,7 +11901,7 @@ cputln: { // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [102] call cscroll -- call_phi_near + // [102] call cscroll jsr cscroll // cputln::@return // } @@ -12068,7 +12068,7 @@ printf_uint: { // Format number into buffer // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -12092,7 +12092,7 @@ printf_uint: { sta.z printf_number_buffer.format_zero_padding // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 tax jsr printf_number_buffer // printf_uint::@return @@ -12127,7 +12127,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 ldx #uvalue jsr uctoa // printf_schar::@3 @@ -12153,7 +12153,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_schar::@return @@ -12180,7 +12180,7 @@ printf_uchar: { // [146] call uctoa // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 ldx #main.uc jsr uctoa // printf_uchar::@2 @@ -12206,7 +12206,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uchar::@return @@ -12246,7 +12246,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -12272,7 +12272,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -12307,7 +12307,7 @@ printf_slong: { // ultoa(uvalue, printf_buffer.digits, format.radix) // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 lda #uvalue @@ -12340,7 +12340,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -12367,7 +12367,7 @@ printf_ulong: { // [166] call ultoa // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 lda #main.ul @@ -12400,7 +12400,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_ulong::@return @@ -12426,7 +12426,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -12442,7 +12442,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -12455,7 +12455,7 @@ cscroll: { // [305] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12468,7 +12468,7 @@ cscroll: { // [305] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -12693,7 +12693,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [211] utoa_append::return#0 = utoa_append::value#2 @@ -12733,7 +12733,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) // [218] strlen::return#2 = strlen::len#2 @@ -12804,7 +12804,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: @@ -12845,7 +12845,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: @@ -12857,7 +12857,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: @@ -12866,7 +12866,7 @@ printf_number_buffer: { // [247] call printf_str // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -12900,7 +12900,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: @@ -13000,7 +13000,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -13137,7 +13137,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -13446,7 +13446,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper -- call_phi_near + // [339] call toupper jsr toupper // [340] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-14.log b/src/test/ref/printf-14.log index 4a61c0595..8ab5f163e 100644 --- a/src/test/ref/printf-14.log +++ b/src/test/ref/printf-14.log @@ -3645,7 +3645,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3653,7 +3653,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -3689,7 +3689,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3730,7 +3730,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -3742,7 +3742,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -3750,7 +3750,7 @@ cputc: { main: { .label c = 7 // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [52] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3759,7 +3759,7 @@ main: { // main::@1 __b1: // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] printf_uchar_from___b1: jsr printf_uchar jmp __breturn @@ -3891,7 +3891,7 @@ cputln: { sta.z conio_cursor_x // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [50] call cscroll -- call_phi_near + // [50] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4013,7 +4013,7 @@ printf_uchar: { sta printf_buffer // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 @@ -4023,7 +4023,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4052,7 +4052,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4071,7 +4071,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4087,7 +4087,7 @@ cscroll: { memset_from___b3: // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4103,7 +4103,7 @@ cscroll: { memset_from___b4: // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4230,7 +4230,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -4280,7 +4280,7 @@ printf_number_buffer: { // printf_number_buffer::@2 __b2: // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] printf_str_from___b2: jsr printf_str jmp __breturn @@ -4903,12 +4903,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -4937,7 +4937,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -4976,7 +4976,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -4987,7 +4987,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -4996,13 +4996,13 @@ main: { .label c = 7 // clrscr() // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [52] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("%u", c) // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] jsr printf_uchar // main::@return // } @@ -5135,7 +5135,7 @@ cputln: { // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [50] call cscroll -- call_phi_near + // [50] call cscroll jsr cscroll // cputln::@return // } @@ -5257,7 +5257,7 @@ printf_uchar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5265,7 +5265,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] jsr printf_number_buffer // printf_uchar::@return // } @@ -5290,7 +5290,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5306,7 +5306,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5319,7 +5319,7 @@ cscroll: { // [124] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5332,7 +5332,7 @@ cscroll: { // [124] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5457,7 +5457,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -5502,7 +5502,7 @@ printf_number_buffer: { __b2: // printf_str(putc, buffer.digits) // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] jsr printf_str // printf_number_buffer::@return // } diff --git a/src/test/ref/printf-15.log b/src/test/ref/printf-15.log index dcca7d5bb..1717f7db4 100644 --- a/src/test/ref/printf-15.log +++ b/src/test/ref/printf-15.log @@ -1683,7 +1683,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1691,7 +1691,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1727,7 +1727,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1768,7 +1768,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1780,14 +1780,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [54] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -1798,7 +1798,7 @@ main: { // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -1812,7 +1812,7 @@ main: { // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #s1 @@ -1953,7 +1953,7 @@ cputln: { sta.z conio_cursor_x // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [52] call cscroll -- call_phi_near + // [52] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2120,7 +2120,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2139,7 +2139,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2155,7 +2155,7 @@ cscroll: { memset_from___b3: // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2171,7 +2171,7 @@ cscroll: { memset_from___b4: // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2604,12 +2604,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2638,7 +2638,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -2677,7 +2677,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -2688,7 +2688,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -2696,14 +2696,14 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [54] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Lone 1\n") // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -2714,7 +2714,7 @@ main: { // printf("Lone 2\n") // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #s1 @@ -2857,7 +2857,7 @@ cputln: { // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [52] call cscroll -- call_phi_near + // [52] call cscroll jsr cscroll // cputln::@return // } @@ -3020,7 +3020,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3036,7 +3036,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3049,7 +3049,7 @@ cscroll: { // [102] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3062,7 +3062,7 @@ cscroll: { // [102] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-17.log b/src/test/ref/printf-17.log index dbf187967..234dffab6 100644 --- a/src/test/ref/printf-17.log +++ b/src/test/ref/printf-17.log @@ -4498,7 +4498,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -4579,7 +4579,7 @@ main: { // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4598,7 +4598,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4617,7 +4617,7 @@ main: { // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -4631,7 +4631,7 @@ main: { // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] snprintf_init_from___b3: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4662,7 +4662,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] printf_string_from___b5: jsr printf_string jmp __b6 @@ -4683,7 +4683,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4702,7 +4702,7 @@ main: { // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -4712,7 +4712,7 @@ main: { // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] snprintf_init_from___b8: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4731,7 +4731,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4745,7 +4745,7 @@ main: { // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] printf_sint_from___b10: - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 lda #<3 sta.z printf_sint.value lda #>3 @@ -4764,7 +4764,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -4776,7 +4776,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -4792,7 +4792,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -4811,7 +4811,7 @@ main: { // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -4821,7 +4821,7 @@ main: { // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] snprintf_init_from___b15: - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 lda #<6 sta.z snprintf_init.n lda #>6 @@ -4840,7 +4840,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -4854,7 +4854,7 @@ main: { // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] printf_sint_from___b17: - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -4873,7 +4873,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -4892,7 +4892,7 @@ main: { // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -5051,7 +5051,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -5101,7 +5101,7 @@ printf_sint: { // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b3 @@ -5129,7 +5129,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #0 jsr printf_number_buffer jmp __breturn @@ -5164,7 +5164,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -5192,7 +5192,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -5397,7 +5397,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -5439,7 +5439,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -5523,7 +5523,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -5568,7 +5568,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -5582,7 +5582,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 @@ -5593,7 +5593,7 @@ printf_number_buffer: { // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -5632,7 +5632,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -5833,7 +5833,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper -- call_phi_near + // [207] call toupper jsr toupper // [208] toupper::return#3 = toupper::return#2 jmp __b3 @@ -6471,7 +6471,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [6] return @@ -6546,7 +6546,7 @@ main: { // snprintf(BUF, 20, "hello world! ") // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6562,7 +6562,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -6580,7 +6580,7 @@ main: { // print(BUF) // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -6591,7 +6591,7 @@ main: { // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6607,7 +6607,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -6617,7 +6617,7 @@ main: { // main::@5 // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] jsr printf_string // main::@6 // snprintf(BUF, 20, "hello %s%c ", "world", '!') @@ -6635,7 +6635,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -6653,14 +6653,14 @@ main: { // print(BUF) // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6676,7 +6676,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -6687,7 +6687,7 @@ main: { // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 lda #<3 sta.z printf_sint.value lda #>3 @@ -6703,7 +6703,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -6713,7 +6713,7 @@ main: { // main::@12 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -6725,7 +6725,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -6743,14 +6743,14 @@ main: { // print(BUF) // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // snprintf(BUF, 6, "hi %d! ", 22222) // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 lda #<6 sta.z snprintf_init.n lda #>6 @@ -6766,7 +6766,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -6777,7 +6777,7 @@ main: { // snprintf(BUF, 6, "hi %d! ", 22222) // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -6793,7 +6793,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -6811,7 +6811,7 @@ main: { // print(BUF) // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print // main::@return // } @@ -6963,7 +6963,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -7013,7 +7013,7 @@ printf_sint: { // [99] call utoa // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -7038,7 +7038,7 @@ printf_sint: { sta.z printf_number_buffer.format_zero_padding // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 tax jsr printf_number_buffer // printf_sint::@return @@ -7071,7 +7071,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -7097,7 +7097,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -7296,7 +7296,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -7336,7 +7336,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -7407,7 +7407,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7448,7 +7448,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: @@ -7460,7 +7460,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: @@ -7469,7 +7469,7 @@ printf_number_buffer: { // [173] call printf_str // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -7503,7 +7503,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: @@ -7696,7 +7696,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper -- call_phi_near + // [207] call toupper jsr toupper // [208] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-18.log b/src/test/ref/printf-18.log index 03e8f0b22..ef837a417 100644 --- a/src/test/ref/printf-18.log +++ b/src/test/ref/printf-18.log @@ -2389,7 +2389,7 @@ __start: { sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2397,7 +2397,7 @@ __start: { // __start::@1 __b1: // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [39] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2500,7 +2500,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy -- call_phi_near + // [26] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2541,7 +2541,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [35] call cputln -- call_phi_near + // [35] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2553,7 +2553,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [38] call cputln -- call_phi_near + // [38] call cputln jsr cputln jmp __breturn } @@ -2562,7 +2562,7 @@ main: { // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF1 @@ -2581,7 +2581,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -2600,7 +2600,7 @@ main: { // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] snprintf_init_from___b2: - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF2 @@ -2619,7 +2619,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -2638,7 +2638,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 lda #str @@ -2669,7 +2669,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 lda #BUF1 @@ -2707,7 +2707,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -2726,7 +2726,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 lda #BUF2 @@ -2745,7 +2745,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -2892,7 +2892,7 @@ cputln: { sta.z conio_cursor_x // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [85] call cscroll -- call_phi_near + // [85] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2984,7 +2984,7 @@ printf_string: { // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return @@ -3012,7 +3012,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3031,7 +3031,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3047,7 +3047,7 @@ cscroll: { memset_from___b3: // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3063,7 +3063,7 @@ cscroll: { memset_from___b4: // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3577,12 +3577,12 @@ __start: { sta.z __snprintf_buffer sta.z __snprintf_buffer+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [39] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [11] return @@ -3675,7 +3675,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy -- call_phi_near + // [26] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -3714,7 +3714,7 @@ cputc: { // [34] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [35] call cputln -- call_phi_near + // [35] call cputln jsr cputln // cputc::@return __breturn: @@ -3725,7 +3725,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [38] call cputln -- call_phi_near + // [38] call cputln jsr cputln rts } @@ -3734,7 +3734,7 @@ main: { // snprintf(BUF1, 20, "hello world!") // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF1 @@ -3750,7 +3750,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -3768,7 +3768,7 @@ main: { // snprintf(BUF2, 20, "hello %s%c", "world", '!') // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF2 @@ -3784,7 +3784,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -3800,7 +3800,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 lda #str @@ -3830,7 +3830,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -3846,7 +3846,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 lda #BUF1 @@ -3862,7 +3862,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -3878,7 +3878,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 lda #BUF2 @@ -3894,7 +3894,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4043,7 +4043,7 @@ cputln: { // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [85] call cscroll -- call_phi_near + // [85] call cscroll jsr cscroll // cputln::@return // } @@ -4131,7 +4131,7 @@ printf_string: { // [104] call printf_str // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } @@ -4156,7 +4156,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4172,7 +4172,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4185,7 +4185,7 @@ cscroll: { // [129] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4198,7 +4198,7 @@ cscroll: { // [129] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-19.log b/src/test/ref/printf-19.log index df40a64fe..a8ac45c87 100644 --- a/src/test/ref/printf-19.log +++ b/src/test/ref/printf-19.log @@ -5428,7 +5428,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -5506,7 +5506,7 @@ snputc: { } // main main: { - // [17] call snprintf_init -- call_phi_near + // [17] call snprintf_init jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -5521,7 +5521,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5540,7 +5540,7 @@ main: { // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -5551,7 +5551,7 @@ main: { jmp __b3 // main::@3 __b3: - // [25] call snprintf_init -- call_phi_near + // [25] call snprintf_init jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -5566,7 +5566,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -5578,7 +5578,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] printf_string_from___b5: jsr printf_string jmp __b6 @@ -5599,7 +5599,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -5618,14 +5618,14 @@ main: { // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [39] call snprintf_init -- call_phi_near + // [39] call snprintf_init jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -5640,7 +5640,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -5651,7 +5651,7 @@ main: { jmp __b10 // main::@10 __b10: - // [43] call printf_sint -- call_phi_near + // [43] call printf_sint jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -5666,7 +5666,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -5678,7 +5678,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -5694,7 +5694,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -5713,14 +5713,14 @@ main: { // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [55] call snprintf_init -- call_phi_near + // [55] call snprintf_init jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -5735,7 +5735,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -5746,7 +5746,7 @@ main: { jmp __b17 // main::@17 __b17: - // [59] call printf_slong -- call_phi_near + // [59] call printf_slong jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -5780,7 +5780,7 @@ main: { // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -5938,7 +5938,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -5979,7 +5979,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b2 @@ -6007,7 +6007,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6042,7 +6042,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -6070,7 +6070,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6101,7 +6101,7 @@ printf_slong: { // printf_slong::@1 __b1: // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] ultoa_from___b1: jsr ultoa jmp __b2 @@ -6129,7 +6129,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6334,7 +6334,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -6376,7 +6376,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -6460,7 +6460,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -6505,7 +6505,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -6519,7 +6519,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 @@ -6530,7 +6530,7 @@ printf_number_buffer: { // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -6569,7 +6569,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -6707,7 +6707,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -6918,7 +6918,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper -- call_phi_near + // [228] call toupper jsr toupper // [229] toupper::return#3 = toupper::return#2 jmp __b3 @@ -7723,7 +7723,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [6] return @@ -7796,7 +7796,7 @@ snputc: { // main main: { // sprintf(BUF, "hello world! ") - // [17] call snprintf_init -- call_phi_near + // [17] call snprintf_init jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -7808,7 +7808,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7826,7 +7826,7 @@ main: { // print(BUF) // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -7835,7 +7835,7 @@ main: { // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // sprintf(BUF, "hello %s%c ", "world", '!') - // [25] call snprintf_init -- call_phi_near + // [25] call snprintf_init jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -7847,7 +7847,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7857,7 +7857,7 @@ main: { // main::@5 // sprintf(BUF, "hello %s%c ", "world", '!') // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] jsr printf_string // main::@6 // sprintf(BUF, "hello %s%c ", "world", '!') @@ -7875,7 +7875,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7893,12 +7893,12 @@ main: { // print(BUF) // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [39] call snprintf_init -- call_phi_near + // [39] call snprintf_init jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -7910,7 +7910,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7919,7 +7919,7 @@ main: { // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [43] call printf_sint -- call_phi_near + // [43] call printf_sint jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -7931,7 +7931,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -7941,7 +7941,7 @@ main: { // main::@12 // sprintf(BUF, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -7971,12 +7971,12 @@ main: { // print(BUF) // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // sprintf(BUF, "hi %ld! ", 22222222l) - // [55] call snprintf_init -- call_phi_near + // [55] call snprintf_init jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -7988,7 +7988,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -7997,7 +7997,7 @@ main: { // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] // main::@17 // sprintf(BUF, "hi %ld! ", 22222222l) - // [59] call printf_slong -- call_phi_near + // [59] call printf_slong jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -8009,7 +8009,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -8027,7 +8027,7 @@ main: { // print(BUF) // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print // main::@return // } @@ -8178,7 +8178,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -8216,7 +8216,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@2 @@ -8242,7 +8242,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -8275,7 +8275,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -8301,7 +8301,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -8330,7 +8330,7 @@ printf_slong: { // printf_slong::@1 // ultoa(uvalue, printf_buffer.digits, format.radix) // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] jsr ultoa // printf_slong::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -8355,7 +8355,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -8554,7 +8554,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -8594,7 +8594,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -8665,7 +8665,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: @@ -8706,7 +8706,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: @@ -8718,7 +8718,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: @@ -8727,7 +8727,7 @@ printf_number_buffer: { // [173] call printf_str // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -8761,7 +8761,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: @@ -8897,7 +8897,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -9099,7 +9099,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper -- call_phi_near + // [228] call toupper jsr toupper // [229] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index abad22ec3..292681b07 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -531,7 +531,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 lda #msg @@ -545,7 +545,7 @@ main: { // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -563,7 +563,7 @@ main: { // [13] phi from main::@2 to print_str [phi:main::@2->print_str] print_str_from___b2: // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #msg2 @@ -577,7 +577,7 @@ main: { // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy jsr print_ln jmp __b4 // main::@4 @@ -591,7 +591,7 @@ main: { // [13] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #msg3 @@ -605,7 +605,7 @@ main: { // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln jmp __breturn // main::@return @@ -641,7 +641,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char -- call_phi_near + // [18] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -825,7 +825,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 lda #msg @@ -836,7 +836,7 @@ main: { // print_ln() // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -852,7 +852,7 @@ main: { // [5] call print_str // [13] phi from main::@2 to print_str [phi:main::@2->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #msg2 @@ -863,7 +863,7 @@ main: { // print_ln() // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy jsr print_ln // main::@4 // [8] print_char_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -875,7 +875,7 @@ main: { // [9] call print_str // [13] phi from main::@4 to print_str [phi:main::@4->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #msg3 @@ -886,7 +886,7 @@ main: { // print_ln() // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln // main::@return // } @@ -919,7 +919,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char -- call_phi_near + // [18] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/problem-ma-var-overwrite.log b/src/test/ref/problem-ma-var-overwrite.log index 5e3db2880..d18329c7a 100644 --- a/src/test/ref/problem-ma-var-overwrite.log +++ b/src/test/ref/problem-ma-var-overwrite.log @@ -252,7 +252,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test -- call_phi_near + // [6] call test jsr test jmp __breturn // main::@return @@ -396,7 +396,7 @@ __start: { sta.z h1+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -410,7 +410,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test -- call_phi_near + // [6] call test jsr test // main::@return // } diff --git a/src/test/ref/problem-negate-const.log b/src/test/ref/problem-negate-const.log index 95d7df45e..31fdf120c 100644 --- a/src/test/ref/problem-negate-const.log +++ b/src/test/ref/problem-negate-const.log @@ -145,7 +145,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call printneg -- call_phi_near + // [1] call printneg jsr printneg jmp __breturn // main::@return @@ -204,7 +204,7 @@ Score: 24 // main main: { // printneg(-4) - // [1] call printneg -- call_phi_near + // [1] call printneg jsr printneg // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter-1.log b/src/test/ref/problem-struct-inline-parameter-1.log index 083face16..288ce050f 100644 --- a/src/test/ref/problem-struct-inline-parameter-1.log +++ b/src/test/ref/problem-struct-inline-parameter-1.log @@ -224,7 +224,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -298,7 +298,7 @@ Score: 36 // main main: { // print('c', { '-', '-' } ) - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter.log b/src/test/ref/problem-struct-inline-parameter.log index 9c2be3a86..90545c237 100644 --- a/src/test/ref/problem-struct-inline-parameter.log +++ b/src/test/ref/problem-struct-inline-parameter.log @@ -223,7 +223,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -297,7 +297,7 @@ Score: 36 // main main: { // print('c', (struct format){ '-', '-' } ) - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/procedure-callingconvention-stack-4.log b/src/test/ref/procedure-callingconvention-stack-4.log index b45d2c468..b07b5e8a0 100644 --- a/src/test/ref/procedure-callingconvention-stack-4.log +++ b/src/test/ref/procedure-callingconvention-stack-4.log @@ -328,7 +328,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -503,7 +503,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-callingconvention-stack-5.log b/src/test/ref/procedure-callingconvention-stack-5.log index dd9548762..31ccc9f71 100644 --- a/src/test/ref/procedure-callingconvention-stack-5.log +++ b/src/test/ref/procedure-callingconvention-stack-5.log @@ -245,7 +245,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -387,7 +387,7 @@ __start: { sta.z current+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-declare-10.log b/src/test/ref/procedure-declare-10.log index 3218ad121..5f3d5ca17 100644 --- a/src/test/ref/procedure-declare-10.log +++ b/src/test/ref/procedure-declare-10.log @@ -263,7 +263,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near + // [3] phi from main to memcpy [phi:main->memcpy] memcpy_from_main: jsr memcpy jmp __breturn @@ -400,7 +400,7 @@ Score: 783 main: { // memcpy(SCREEN, STRING, sizeof(STRING)) // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near + // [3] phi from main to memcpy [phi:main->memcpy] jsr memcpy // main::@return // } diff --git a/src/test/ref/procedure-declare-2.log b/src/test/ref/procedure-declare-2.log index 47974ca58..21d1bd4ac 100644 --- a/src/test/ref/procedure-declare-2.log +++ b/src/test/ref/procedure-declare-2.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-3.log b/src/test/ref/procedure-declare-3.log index b5e6d9a40..bf558df5c 100644 --- a/src/test/ref/procedure-declare-3.log +++ b/src/test/ref/procedure-declare-3.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-4.log b/src/test/ref/procedure-declare-4.log index 91a28e0c1..15d26e0d7 100644 --- a/src/test/ref/procedure-declare-4.log +++ b/src/test/ref/procedure-declare-4.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -371,7 +371,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 1) @@ -386,7 +386,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-5.log b/src/test/ref/procedure-declare-5.log index cd4778497..b7f393e78 100644 --- a/src/test/ref/procedure-declare-5.log +++ b/src/test/ref/procedure-declare-5.log @@ -150,7 +150,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call f - // [4] phi from main to f [phi:main->f] -- call_phi_near + // [4] phi from main to f [phi:main->f] f_from_main: jsr f jmp __b1 @@ -217,7 +217,7 @@ main: { .label SCREEN = $400 // f() // [1] call f - // [4] phi from main to f [phi:main->f] -- call_phi_near + // [4] phi from main to f [phi:main->f] jsr f // main::@1 // SCREEN[0] = f() diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 5e5e887b4..77456ef24 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -2507,7 +2507,7 @@ main: { lda #$dd sta IO_RAM // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [64] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] @@ -2523,7 +2523,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2538,7 +2538,7 @@ main: { // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 lda #print_screen @@ -2558,7 +2558,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2575,7 +2575,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2592,7 +2592,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2609,7 +2609,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2626,7 +2626,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2643,7 +2643,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 ldx #0 jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2660,7 +2660,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2677,7 +2677,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2694,7 +2694,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2711,7 +2711,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2728,7 +2728,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2745,7 +2745,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2762,7 +2762,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2779,7 +2779,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2796,7 +2796,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2813,7 +2813,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2830,7 +2830,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2847,7 +2847,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2864,7 +2864,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2881,7 +2881,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2898,7 +2898,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2915,7 +2915,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2932,7 +2932,7 @@ main: { // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 lda #$17 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport jmp __b27 @@ -2963,7 +2963,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [120] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -3004,7 +3004,7 @@ print_str: { // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3077,7 +3077,7 @@ testProcport: { // [67] phi from testProcport to print_str [phi:testProcport->print_str] print_str_from_testProcport: // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3090,7 +3090,7 @@ testProcport: { // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] print_uchar_from___b1: - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] __b2_from___b1: @@ -3101,7 +3101,7 @@ testProcport: { // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] print_str_from___b2: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3115,7 +3115,7 @@ testProcport: { // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] print_uchar_from___b3: - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] __b4_from___b3: @@ -3126,7 +3126,7 @@ testProcport: { // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] print_str_from___b4: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3140,7 +3140,7 @@ testProcport: { // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] print_uchar_from___b5: - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] __b6_from___b5: @@ -3151,7 +3151,7 @@ testProcport: { // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] print_str_from___b6: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -3165,7 +3165,7 @@ testProcport: { // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] print_uchar_from___b7: - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] __b8_from___b7: @@ -3176,7 +3176,7 @@ testProcport: { // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] print_str_from___b8: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -3190,7 +3190,7 @@ testProcport: { // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] print_uchar_from___b9: - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] __b10_from___b9: @@ -3201,7 +3201,7 @@ testProcport: { // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] print_str_from___b10: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3215,7 +3215,7 @@ testProcport: { // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] print_uchar_from___b11: - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] __b12_from___b11: @@ -3226,7 +3226,7 @@ testProcport: { // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] print_str_from___b12: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3240,7 +3240,7 @@ testProcport: { // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] print_uchar_from___b13: - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] __b14_from___b13: @@ -3251,7 +3251,7 @@ testProcport: { // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] print_str_from___b14: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3265,7 +3265,7 @@ testProcport: { // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] print_uchar_from___b15: - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] __b16_from___b15: @@ -3276,7 +3276,7 @@ testProcport: { // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] print_ln_from___b16: // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy jsr print_ln jmp __breturn // testProcport::@return @@ -3377,7 +3377,7 @@ print_uchar: { // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -3391,7 +3391,7 @@ print_uchar: { // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3795,7 +3795,7 @@ main: { sta IO_RAM // print_cls() // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [64] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] // main::@2 @@ -3807,7 +3807,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3819,7 +3819,7 @@ main: { // [13] call print_ln // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 lda #print_screen @@ -3836,7 +3836,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -3850,7 +3850,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -3864,7 +3864,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -3878,7 +3878,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -3892,7 +3892,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -3905,7 +3905,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -3918,7 +3918,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -3932,7 +3932,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -3946,7 +3946,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -3960,7 +3960,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -3974,7 +3974,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -3987,7 +3987,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -4001,7 +4001,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -4014,7 +4014,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -4028,7 +4028,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -4042,7 +4042,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -4056,7 +4056,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -4069,7 +4069,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -4083,7 +4083,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -4096,7 +4096,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -4109,7 +4109,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -4123,7 +4123,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -4136,7 +4136,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // main::@27 @@ -4169,7 +4169,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [120] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -4205,7 +4205,7 @@ print_str: { // [72] call print_char // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4280,7 +4280,7 @@ testProcport: { // [86] call print_str // [67] phi from testProcport to print_str [phi:testProcport->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 lda #str @@ -4291,7 +4291,7 @@ testProcport: { // [87] print_uchar::b#0 = testProcport::ddr#23 // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] // testProcport::@2 @@ -4299,7 +4299,7 @@ testProcport: { // [90] call print_str // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4311,7 +4311,7 @@ testProcport: { ldx.z port // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] // testProcport::@4 @@ -4319,7 +4319,7 @@ testProcport: { // [94] call print_str // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4331,7 +4331,7 @@ testProcport: { ldx.z ddr2 // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] // testProcport::@6 @@ -4339,7 +4339,7 @@ testProcport: { // [98] call print_str // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -4351,7 +4351,7 @@ testProcport: { ldx.z PROCPORT_DDR // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] // testProcport::@8 @@ -4359,7 +4359,7 @@ testProcport: { // [102] call print_str // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -4371,7 +4371,7 @@ testProcport: { ldx.z PROCPORT // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] // testProcport::@10 @@ -4379,7 +4379,7 @@ testProcport: { // [106] call print_str // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -4391,7 +4391,7 @@ testProcport: { ldx BASIC_ROM // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] // testProcport::@12 @@ -4399,7 +4399,7 @@ testProcport: { // [110] call print_str // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -4411,7 +4411,7 @@ testProcport: { ldx IO_RAM // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] // testProcport::@14 @@ -4419,7 +4419,7 @@ testProcport: { // [114] call print_str // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -4431,7 +4431,7 @@ testProcport: { ldx KERNAL_ROM // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] // testProcport::@16 @@ -4439,7 +4439,7 @@ testProcport: { // [118] call print_ln // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy jsr print_ln // testProcport::@return // } @@ -4540,7 +4540,7 @@ print_uchar: { // Table of hexadecimal digits // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4553,7 +4553,7 @@ print_uchar: { // [136] call print_char // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/ptrptr-optimize-1.log b/src/test/ref/ptrptr-optimize-1.log index 467c93875..e4fffb39e 100644 --- a/src/test/ref/ptrptr-optimize-1.log +++ b/src/test/ref/ptrptr-optimize-1.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub jmp __breturn @@ -271,7 +271,7 @@ main: { // sub('a',pscreen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -279,7 +279,7 @@ main: { // sub('b',pscreen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrptr-optimize-2.log b/src/test/ref/ptrptr-optimize-2.log index 112d4cd77..f569b5aab 100644 --- a/src/test/ref/ptrptr-optimize-2.log +++ b/src/test/ref/ptrptr-optimize-2.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub jmp __breturn @@ -270,7 +270,7 @@ main: { // sub('a',&screen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -278,7 +278,7 @@ main: { // sub('b',&screen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 9a333a160..42e5fb047 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -519,14 +519,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call lvalue -- call_phi_near + // [1] call lvalue jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call rvalue -- call_phi_near + // [3] call rvalue jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -534,7 +534,7 @@ main: { // main::@2 __b2: // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] rvaluevar_from___b2: jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -543,7 +543,7 @@ main: { // main::@3 __b3: // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] lvaluevar_from___b3: jsr lvaluevar jmp __breturn @@ -837,24 +837,24 @@ Score: 1318 // main main: { // lvalue() - // [1] call lvalue -- call_phi_near + // [1] call lvalue jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // rvalue() - // [3] call rvalue -- call_phi_near + // [3] call rvalue jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // rvaluevar() // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // lvaluevar() // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] jsr lvaluevar // main::@return // } diff --git a/src/test/ref/register-0.log b/src/test/ref/register-0.log index 539c7ec51..7b7e77db1 100644 --- a/src/test/ref/register-0.log +++ b/src/test/ref/register-0.log @@ -183,7 +183,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -196,7 +196,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b1 // main::@1 @@ -204,7 +204,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print jmp __b2 // main::@2 @@ -212,7 +212,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print jmp __breturn // main::@return @@ -299,7 +299,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -311,21 +311,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print // main::@return // } diff --git a/src/test/ref/reserve-zp-global-range.log b/src/test/ref/reserve-zp-global-range.log index 8ca16bd1a..48726c166 100644 --- a/src/test/ref/reserve-zp-global-range.log +++ b/src/test/ref/reserve-zp-global-range.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index 6750f7002..1c39d5bee 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index a4705e225..8d61803a7 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index 6296a0655..869577f5f 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -298,7 +298,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -310,7 +310,7 @@ main: { sta SCREEN,y // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 -- call_phi_near + // [7] call sub2 jsr sub2 // [8] sub2::return#0 = sub2::return#1 jmp __b3 @@ -437,7 +437,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 @@ -449,7 +449,7 @@ main: { // sub2(i) // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 -- call_phi_near + // [7] call sub2 jsr sub2 // [8] sub2::return#0 = sub2::return#1 // main::@3 diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 25f767086..73b02ba54 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-4.log b/src/test/ref/reserve-zp-procedure-4.log index bd9d8b75a..2f13f19d0 100644 --- a/src/test/ref/reserve-zp-procedure-4.log +++ b/src/test/ref/reserve-zp-procedure-4.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index d9ac26394..74249a35f 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -509,7 +509,7 @@ main: { // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] mul8u_from___b1: - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy jsr mul8u // [4] mul8u::return#2 = mul8u::res#2 jmp __b2 @@ -528,7 +528,7 @@ main: { // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] mul8u_from___b2: - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy jsr mul8u // [9] mul8u::return#3 = mul8u::res#2 jmp __b3 @@ -751,7 +751,7 @@ main: { ldx.z y // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy jsr mul8u // word z1 = mul8u(y,40) // [4] mul8u::return#2 = mul8u::res#2 @@ -770,7 +770,7 @@ main: { ldx.z y // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy jsr mul8u // word z2 = mul8u(y,40) // [9] mul8u::return#3 = mul8u::res#2 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index d17638634..0e330842b 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -388,7 +388,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite -- call_phi_near + // [4] call position_sprite jsr position_sprite jmp __b2 // main::@2 @@ -575,7 +575,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite -- call_phi_near + // [4] call position_sprite jsr position_sprite // main::@2 // xpos += 10 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 618158d3f..1e41f8d2a 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1413,7 +1413,7 @@ main: { .label y = $14 .label x = $15 // [1] call init - // [15] phi from main to init [phi:main->init] -- call_phi_near + // [15] phi from main to init [phi:main->init] init_from_main: jsr init // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1469,7 +1469,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block -- call_phi_near + // [13] call draw_block jsr draw_block jmp __b6 // main::@6 @@ -1484,7 +1484,7 @@ main: { // init init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f - // [16] call init_sprites -- call_phi_near + // [16] call init_sprites jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] __b2_from_init: @@ -1496,7 +1496,7 @@ init: { memset_from___b2: // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 lda #screen @@ -1512,7 +1512,7 @@ init: { memset_from___b3: // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 lda #colors @@ -1589,7 +1589,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] mul8u_from_draw_block: jsr mul8u // [35] mul8u::return#2 = mul8u::res#2 @@ -2147,7 +2147,7 @@ main: { .label x = $15 // init() // [1] call init - // [15] phi from main to init [phi:main->init] -- call_phi_near + // [15] phi from main to init [phi:main->init] jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2199,7 +2199,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block -- call_phi_near + // [13] call draw_block jsr draw_block // main::@6 // for (byte y = 0; y < 9; y++) @@ -2213,7 +2213,7 @@ main: { init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f // init_sprites() - // [16] call init_sprites -- call_phi_near + // [16] call init_sprites jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] // init::@2 @@ -2222,7 +2222,7 @@ init: { // [66] phi from init::@2 to memset [phi:init::@2->memset] // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 lda #screen @@ -2235,7 +2235,7 @@ init: { // [66] phi from init::@3 to memset [phi:init::@3->memset] // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 lda #colors @@ -2316,7 +2316,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] jsr mul8u // word z = mul8u(y,40) // [35] mul8u::return#2 = mul8u::res#2 diff --git a/src/test/ref/scrollbig-clobber.log b/src/test/ref/scrollbig-clobber.log index 2b1e27aaa..dc0c56401 100644 --- a/src/test/ref/scrollbig-clobber.log +++ b/src/test/ref/scrollbig-clobber.log @@ -325,7 +325,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call next_char -- call_phi_near + // [2] call next_char jsr next_char // [3] next_char::return#0 = next_char::return#1 jmp __b2 @@ -481,7 +481,7 @@ main: { // main::@1 __b1: // next_char() - // [2] call next_char -- call_phi_near + // [2] call next_char jsr next_char // [3] next_char::return#0 = next_char::return#1 // main::@2 diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index cb6b90aba..68e2418bd 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -1524,7 +1524,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Initialize some points and print them main: { // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near + // [5] phi from main to init_points [phi:main->init_points] init_points_from_main: jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1533,7 +1533,7 @@ main: { // main::@1 __b1: // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] print_points_from___b1: jsr print_points jmp __breturn @@ -1624,7 +1624,7 @@ print_points: { .label point = 9 .label i = 8 // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near + // [37] phi from print_points to print_cls [phi:print_points->print_cls] print_cls_from_print_points: jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] @@ -1674,7 +1674,7 @@ print_points: { // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] print_uchar_from___b2: // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] __b4_from___b2: @@ -1682,7 +1682,7 @@ print_points: { // print_points::@4 __b4: // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] print_str_from___b4: jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] @@ -1701,7 +1701,7 @@ print_points: { // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] print_uchar_from___b3: // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] __b5_from___b3: @@ -1709,7 +1709,7 @@ print_points: { // print_points::@5 __b5: // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] print_ln_from___b5: jsr print_ln jmp __b6 @@ -1748,7 +1748,7 @@ print_points: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [60] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1775,7 +1775,7 @@ print_uchar: { // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1789,7 +1789,7 @@ print_uchar: { // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1831,7 +1831,7 @@ print_str: { // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2178,13 +2178,13 @@ Score: 10419 main: { // init_points() // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near + // [5] phi from main to init_points [phi:main->init_points] jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print_points() // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] jsr print_points // main::@return // } @@ -2264,7 +2264,7 @@ print_points: { .label i = 8 // print_cls() // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near + // [37] phi from print_points to print_cls [phi:print_points->print_cls] jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] // [20] phi print_line_cursor#26 = print_screen#0 [phi:print_points->print_points::@1#0] -- pbuz1=pbuc1 @@ -2306,13 +2306,13 @@ print_points: { // [25] call print_uchar // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] // print_points::@4 // print_str(" ") // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] // print_points::pointYpos1 @@ -2325,13 +2325,13 @@ print_points: { // [30] call print_uchar // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] // print_points::@5 // print_ln() // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] jsr print_ln // print_points::@6 // for(byte i: 0..NUM_POINTS-1) @@ -2367,7 +2367,7 @@ print_points: { print_cls: { // memset(print_screen, ' ', 1000) // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [60] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2393,7 +2393,7 @@ print_uchar: { // Table of hexadecimal digits // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2406,7 +2406,7 @@ print_uchar: { // [46] call print_char // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } @@ -2445,7 +2445,7 @@ print_str: { // [53] call print_char // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/sepa-optimize-problem-1.log b/src/test/ref/sepa-optimize-problem-1.log index 36fc38e6c..9af598909 100644 --- a/src/test/ref/sepa-optimize-problem-1.log +++ b/src/test/ref/sepa-optimize-problem-1.log @@ -408,7 +408,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [9] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -440,14 +440,14 @@ xputc: { } // main main: { - // [10] call _updatePotatoSprite -- call_phi_near + // [10] call _updatePotatoSprite jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [12] call _updateLupineSprite -- call_phi_near + // [12] call _updateLupineSprite jsr _updateLupineSprite jmp __breturn // main::@return @@ -474,7 +474,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite jmp __breturn // _updatePotatoSprite::@return @@ -501,7 +501,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite jmp __b1 // _updateLupineSprite::@1 @@ -516,7 +516,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite jmp __breturn // _updateLupineSprite::@return @@ -650,7 +650,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [9] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -681,12 +681,12 @@ xputc: { // main main: { // _updatePotatoSprite() - // [10] call _updatePotatoSprite -- call_phi_near + // [10] call _updatePotatoSprite jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // _updateLupineSprite() - // [12] call _updateLupineSprite -- call_phi_near + // [12] call _updateLupineSprite jsr _updateLupineSprite // main::@return // } @@ -713,7 +713,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite // _updatePotatoSprite::@return // } @@ -740,7 +740,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite // _updateLupineSprite::@1 // _copyDigitToAnySprite(SPR_LUPINE_UI, num2str[1]) @@ -753,7 +753,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite // _updateLupineSprite::@return // } diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 7101f227f..230bd0d2d 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1009,7 +1009,7 @@ main: { .label __16 = 4 // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] -- call_phi_near + // [25] phi from main to memset [phi:main->memset] memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1083,7 +1083,7 @@ main: { // main::@10 __b10: // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint -- call_phi_near + // [10] call print_uint jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] __b12_from___b10: @@ -1094,7 +1094,7 @@ main: { // [36] phi from main::@12 to print_char [phi:main::@12->print_char] print_char_from___b12: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1256,7 +1256,7 @@ print_uint: { // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1267,7 +1267,7 @@ print_uint: { // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1311,7 +1311,7 @@ print_uchar: { // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1325,7 +1325,7 @@ print_uchar: { // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1502,7 +1502,7 @@ main: { // memset(sieve, 0, COUNT) // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] -- call_phi_near + // [25] phi from main to memset [phi:main->memset] jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::sieve_i#2 = sieve+2 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -1573,7 +1573,7 @@ main: { // main::@10 // print_uint(i) // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint -- call_phi_near + // [10] call print_uint jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] // main::@12 @@ -1581,7 +1581,7 @@ main: { // [12] call print_char // [36] phi from main::@12 to print_char [phi:main::@12->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1741,7 +1741,7 @@ print_uint: { // [32] call print_uchar // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1750,7 +1750,7 @@ print_uint: { // [34] call print_uchar // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -1795,7 +1795,7 @@ print_uchar: { // Table of hexadecimal digits // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -1808,7 +1808,7 @@ print_uchar: { // [46] call print_char // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-char-comparison.log b/src/test/ref/signed-char-comparison.log index ed3c75220..ae96661aa 100644 --- a/src/test/ref/signed-char-comparison.log +++ b/src/test/ref/signed-char-comparison.log @@ -224,7 +224,7 @@ main: { // main::@1 __b1: // [2] debug::dy#0 = main::dy#2 - // [3] call debug -- call_phi_near + // [3] call debug jsr debug jmp __b2 // main::@2 @@ -328,7 +328,7 @@ main: { __b1: // debug(dy) // [2] debug::dy#0 = main::dy#2 - // [3] call debug -- call_phi_near + // [3] call debug jsr debug // main::@2 // for(signed char dy:-128..127) diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index b877c1b21..b7ebd34f7 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -1219,7 +1219,7 @@ main: { sub_from___b1: // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy jsr sub jmp __b4 // main::@4 @@ -1231,7 +1231,7 @@ main: { sub_from___b4: // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy jsr sub jmp __b5 // main::@5 @@ -1243,7 +1243,7 @@ main: { sub_from___b5: // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy jsr sub jmp __b6 // main::@6 @@ -1259,7 +1259,7 @@ main: { // main::@2 __b2: // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] print_cls_from___b2: jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1289,7 +1289,7 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint -- call_phi_near + // [15] call print_sint jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] __b7_from___b3: @@ -1297,7 +1297,7 @@ main: { // main::@7 __b7: // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] print_ln_from___b7: jsr print_ln jmp __b8 @@ -1353,7 +1353,7 @@ sub: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [44] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1379,7 +1379,7 @@ print_sint: { // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1390,7 +1390,7 @@ print_sint: { // print_sint::@2 __b2: // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint -- call_phi_near + // [34] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -1406,7 +1406,7 @@ print_sint: { // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -1530,7 +1530,7 @@ print_uint: { // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1540,7 +1540,7 @@ print_uint: { // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1566,7 +1566,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1580,7 +1580,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1797,7 +1797,7 @@ main: { // [22] phi from main::@1 to sub [phi:main::@1->sub] // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy jsr sub // main::@4 // sub(i, $40) @@ -1807,7 +1807,7 @@ main: { // [22] phi from main::@4 to sub [phi:main::@4->sub] // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy jsr sub // main::@5 // sub(i, $40) @@ -1817,7 +1817,7 @@ main: { // [22] phi from main::@5 to sub [phi:main::@5->sub] // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy jsr sub // main::@6 // for(byte i: 0..8) @@ -1830,7 +1830,7 @@ main: { // main::@2 // print_cls() // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // [12] phi print_line_cursor#21 = print_screen#0 [phi:main::@2->main::@3#0] -- pbuz1=pbuc1 @@ -1858,13 +1858,13 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint -- call_phi_near + // [15] call print_sint jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] // main::@7 // print_ln() // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] jsr print_ln // main::@8 // for(byte j: 0..8) @@ -1917,7 +1917,7 @@ sub: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [44] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1939,7 +1939,7 @@ print_sint: { // [31] call print_char // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1948,7 +1948,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint -- call_phi_near + // [34] call print_uint jsr print_uint // print_sint::@return // } @@ -1961,7 +1961,7 @@ print_sint: { // [37] call print_char // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -2082,7 +2082,7 @@ print_uint: { ldx.z w+1 // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2090,7 +2090,7 @@ print_uint: { ldx.z w // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2116,7 +2116,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2129,7 +2129,7 @@ print_uchar: { // [65] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 3657fb28c..400f1a240 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -961,7 +961,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call init -- call_phi_near + // [1] call init jsr init // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1011,7 +1011,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call anim -- call_phi_near + // [5] call anim jsr anim jmp __b1_from___b2 } @@ -1443,7 +1443,7 @@ Score: 6364 // main main: { // init() - // [1] call init -- call_phi_near + // [1] call init jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi yvel_init#15 = $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 @@ -1484,7 +1484,7 @@ main: { // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // anim() - // [5] call anim -- call_phi_near + // [5] call anim jsr anim jmp __b1 } diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index 5f8b3b043..a837a383f 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -1301,7 +1301,7 @@ main: { // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] setFAC_from_main: - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -1312,7 +1312,7 @@ main: { jmp __b2 // main::@2 __b2: - // [3] call divFACby10 -- call_phi_near + // [3] call divFACby10 jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1322,7 +1322,7 @@ main: { // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] setMEMtoFAC_from___b3: - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_127 @@ -1354,7 +1354,7 @@ main: { // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] setFAC_from___b1: - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] __b4_from___b1: @@ -1364,7 +1364,7 @@ main: { // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] mulFACbyMEM_from___b4: - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -1378,7 +1378,7 @@ main: { // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] setMEMtoFAC_from___b5: - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -1392,7 +1392,7 @@ main: { // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] setFAC_from___b6: - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -1404,7 +1404,7 @@ main: { // main::@7 __b7: // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] divMEMbyFAC_from___b7: jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1412,7 +1412,7 @@ main: { jmp __b8 // main::@8 __b8: - // [18] call sinFAC -- call_phi_near + // [18] call sinFAC jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1422,7 +1422,7 @@ main: { // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] mulFACbyMEM_from___b9: - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -1434,7 +1434,7 @@ main: { // main::@10 __b10: // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] addMEMtoFAC_from___b10: jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1442,14 +1442,14 @@ main: { jmp __b11 // main::@11 __b11: - // [24] call getFAC -- call_phi_near + // [24] call getFAC jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 jmp __b12 // main::@12 __b12: // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint -- call_phi_near + // [27] call print_uint jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1457,7 +1457,7 @@ main: { // main::@13 __b13: // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] print_ln_from___b13: jsr print_ln jmp __b14 @@ -1702,7 +1702,7 @@ print_uint: { // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1713,7 +1713,7 @@ print_uint: { // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2062,7 +2062,7 @@ main: { // setFAC(1275) // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -2071,14 +2071,14 @@ main: { // [2] phi from main to main::@2 [phi:main->main::@2] // main::@2 // divFACby10() - // [3] call divFACby10 -- call_phi_near + // [3] call divFACby10 jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // setMEMtoFAC(f_127) // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_127 @@ -2108,14 +2108,14 @@ main: { sta.z setFAC.w+1 // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] // main::@4 // mulFACbyMEM(f_2pi) // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -2126,7 +2126,7 @@ main: { // setMEMtoFAC(f_i) // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -2137,7 +2137,7 @@ main: { // setFAC(25) // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -2147,19 +2147,19 @@ main: { // main::@7 // divMEMbyFAC(f_i) // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sinFAC() - // [18] call sinFAC -- call_phi_near + // [18] call sinFAC jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // mulFACbyMEM(f_127) // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -2169,24 +2169,24 @@ main: { // main::@10 // addMEMtoFAC(f_127) // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // getFAC() - // [24] call getFAC -- call_phi_near + // [24] call getFAC jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 // main::@12 // print_uint(getFAC()) // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint -- call_phi_near + // [27] call print_uint jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_ln() // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] jsr print_ln // main::@14 // for(byte i : 1..25) @@ -2422,7 +2422,7 @@ print_uint: { // [73] call print_uchar // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2431,7 +2431,7 @@ print_uint: { // [75] call print_uchar // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2488,7 +2488,7 @@ print_uchar: { // Table of hexadecimal digits // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2501,7 +2501,7 @@ print_uchar: { // [88] call print_char // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 3136a40cd..03d6776c4 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -2907,7 +2907,7 @@ main: { .label sw = $1a .label st1 = $24 // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] sin16s_gen_from_main: jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2916,7 +2916,7 @@ main: { // main::@5 __b5: // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] print_cls_from___b5: jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2969,7 +2969,7 @@ main: { // [35] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2983,7 +2983,7 @@ main: { // main::@3 __b3: // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint -- call_phi_near + // [13] call print_sint jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -2994,7 +2994,7 @@ main: { // [35] phi from main::@6 to print_str [phi:main::@6->print_str] print_str_from___b6: // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3039,7 +3039,7 @@ sin16s_gen: { .label i = $12 // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] div32u16u_from_sin16s_gen: jsr div32u16u // [19] div32u16u::return#0 = div32u16u::return#1 @@ -3097,7 +3097,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s -- call_phi_near + // [25] call sin16s jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 jmp __b4 @@ -3149,7 +3149,7 @@ sin16s_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [102] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -3190,7 +3190,7 @@ print_str: { // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3219,7 +3219,7 @@ print_sint: { // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3230,7 +3230,7 @@ print_sint: { // print_sint::@2 __b2: // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint -- call_phi_near + // [47] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -3246,7 +3246,7 @@ print_sint: { // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -3278,7 +3278,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 @@ -3302,7 +3302,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // [58] divr16u::return#3 = divr16u::return#0 jmp __b2 @@ -3475,7 +3475,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // [73] mulu16_sel::return#0 = mulu16_sel::return#12 jmp __b7 @@ -3499,7 +3499,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3522,7 +3522,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // [82] mulu16_sel::return#2 = mulu16_sel::return#12 jmp __b9 @@ -3551,7 +3551,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3575,7 +3575,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // [93] mulu16_sel::return#11 = mulu16_sel::return#12 jmp __b11 @@ -3706,7 +3706,7 @@ print_uint: { // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -3716,7 +3716,7 @@ print_uint: { // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -3851,7 +3851,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u -- call_phi_near + // [138] call mul16u jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 jmp __b1 @@ -3898,7 +3898,7 @@ print_uchar: { // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -3912,7 +3912,7 @@ print_uchar: { // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -4468,13 +4468,13 @@ main: { .label st1 = $24 // sin16s_gen(sintab1, wavelength) // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // print_cls() // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [4] phi print_char_cursor#20 = print_screen#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -4522,7 +4522,7 @@ main: { // [10] call print_str // [35] phi from main::@4 to print_str [phi:main::@4->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4534,7 +4534,7 @@ main: { __b3: // print_sint(sw) // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint -- call_phi_near + // [13] call print_sint jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 @@ -4542,7 +4542,7 @@ main: { // [15] call print_str // [35] phi from main::@6 to print_str [phi:main::@6->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str @@ -4586,7 +4586,7 @@ sin16s_gen: { // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] jsr div32u16u // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [19] div32u16u::return#0 = div32u16u::return#1 @@ -4639,7 +4639,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s -- call_phi_near + // [25] call sin16s jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 // sin16s_gen::@4 @@ -4693,7 +4693,7 @@ sin16s_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [102] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -4729,7 +4729,7 @@ print_str: { // [40] call print_char // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4755,7 +4755,7 @@ print_sint: { // [44] call print_char // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4764,7 +4764,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint -- call_phi_near + // [47] call print_uint jsr print_uint // print_sint::@return // } @@ -4777,7 +4777,7 @@ print_sint: { // [50] call print_char // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -4808,7 +4808,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4830,7 +4830,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // unsigned int quotient_lo = divr16u(WORD0(dividend), divisor, rem16u) // [58] divr16u::return#3 = divr16u::return#0 @@ -4999,7 +4999,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x2 = mulu16_sel(x1, x1, 0) // [73] mulu16_sel::return#0 = mulu16_sel::return#12 @@ -5022,7 +5022,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x3 = mulu16_sel(x2, x1, 1) // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5044,7 +5044,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x3_6 = mulu16_sel(x3, $10000/6, 1) // [82] mulu16_sel::return#2 = mulu16_sel::return#12 @@ -5073,7 +5073,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x4 = mulu16_sel(x3, x1, 0) // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5096,7 +5096,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x5 = mulu16_sel(x4, x1, 0) // [93] mulu16_sel::return#11 = mulu16_sel::return#12 @@ -5222,7 +5222,7 @@ print_uint: { ldx.z w+1 // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -5230,7 +5230,7 @@ print_uint: { ldx.z w // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -5359,7 +5359,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u -- call_phi_near + // [138] call mul16u jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 // mulu16_sel::@1 @@ -5406,7 +5406,7 @@ print_uchar: { // Table of hexadecimal digits // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -5419,7 +5419,7 @@ print_uchar: { // [150] call print_char // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sqr-delta.log b/src/test/ref/sqr-delta.log index a1c585f80..8e9d5d606 100644 --- a/src/test/ref/sqr-delta.log +++ b/src/test/ref/sqr-delta.log @@ -307,7 +307,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = $a // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near + // [6] phi from main to ifunc [phi:main->ifunc] ifunc_from_main: jsr ifunc // [2] ifunc::return#2 = ifunc::return#0 @@ -517,7 +517,7 @@ main: { .label __0 = $a // ifunc(8) // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near + // [6] phi from main to ifunc [phi:main->ifunc] jsr ifunc // ifunc(8) // [2] ifunc::return#2 = ifunc::return#0 diff --git a/src/test/ref/stack-relative-addressing.log b/src/test/ref/stack-relative-addressing.log index 997b6394f..086bef0c7 100644 --- a/src/test/ref/stack-relative-addressing.log +++ b/src/test/ref/stack-relative-addressing.log @@ -123,7 +123,7 @@ main: { pha lda #'3' pha - // [1] call peek_stack -- call_phi_near + // [1] call peek_stack // Then call a function jsr peek_stack jmp __b1 @@ -209,7 +209,7 @@ main: { lda #'3' pha // peek_stack() - // [1] call peek_stack -- call_phi_near + // [1] call peek_stack // Then call a function jsr peek_stack // main::@1 diff --git a/src/test/ref/stars-2.log b/src/test/ref/stars-2.log index 41f56edd7..ef8de9f69 100644 --- a/src/test/ref/stars-2.log +++ b/src/test/ref/stars-2.log @@ -3903,7 +3903,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3911,7 +3911,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -3947,7 +3947,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3988,7 +3988,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -4000,7 +4000,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -4008,7 +4008,7 @@ cputc: { main: { .label i = $17 // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [61] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -4036,7 +4036,7 @@ main: { // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] printf_uchar_from___b2: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4051,7 +4051,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4066,7 +4066,7 @@ main: { // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] printf_uchar_from___b4: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4081,7 +4081,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4226,7 +4226,7 @@ cputln: { sta.z conio_cursor_x // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [59] call cscroll -- call_phi_near + // [59] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4349,7 +4349,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 @@ -4359,7 +4359,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4430,7 +4430,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4449,7 +4449,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4465,7 +4465,7 @@ cscroll: { memset_from___b3: // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4481,7 +4481,7 @@ cscroll: { memset_from___b4: // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4606,7 +4606,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -4664,7 +4664,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -5278,12 +5278,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -5312,7 +5312,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -5351,7 +5351,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -5362,7 +5362,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -5371,7 +5371,7 @@ main: { .label i = $17 // clrscr() // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [61] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -5396,7 +5396,7 @@ main: { ldx stars,y // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5408,7 +5408,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5421,7 +5421,7 @@ main: { ldx stars+5,y // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5433,7 +5433,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -5579,7 +5579,7 @@ cputln: { // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [59] call cscroll -- call_phi_near + // [59] call cscroll jsr cscroll // cputln::@return // } @@ -5702,7 +5702,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5710,7 +5710,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] jsr printf_number_buffer // printf_uchar::@return // } @@ -5775,7 +5775,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5791,7 +5791,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5804,7 +5804,7 @@ cscroll: { // [143] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5817,7 +5817,7 @@ cscroll: { // [143] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5940,7 +5940,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -5992,7 +5992,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/static-init-code-0.log b/src/test/ref/static-init-code-0.log index 1f7fcb3d1..30a96a03e 100644 --- a/src/test/ref/static-init-code-0.log +++ b/src/test/ref/static-init-code-0.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -246,7 +246,7 @@ __start: { sta.z c2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return diff --git a/src/test/ref/strcmp-0.log b/src/test/ref/strcmp-0.log index 9481ebe15..3f97576c7 100644 --- a/src/test/ref/strcmp-0.log +++ b/src/test/ref/strcmp-0.log @@ -6231,7 +6231,7 @@ __start: { // [5] conio_textcolor = LIGHT_BLUE -- vbuz1=vbuc1 lda #LIGHT_BLUE sta.z conio_textcolor - // [6] call conio_c64_init -- call_phi_near + // [6] call conio_c64_init jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -6239,7 +6239,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [28] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -6275,7 +6275,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy -- call_phi_near + // [15] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -6316,7 +6316,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [24] call cputln -- call_phi_near + // [24] call cputln jsr cputln jmp __breturn // cputc::@return @@ -6328,7 +6328,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [27] call cputln -- call_phi_near + // [27] call cputln jsr cputln jmp __breturn } @@ -6342,7 +6342,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 lda #str1 @@ -6364,7 +6364,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6381,7 +6381,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 lda #str11 @@ -6403,7 +6403,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6420,7 +6420,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 lda #str12 @@ -6442,7 +6442,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6459,7 +6459,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 lda #str13 @@ -6481,7 +6481,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6498,7 +6498,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 lda #str14 @@ -6520,7 +6520,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6537,7 +6537,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 lda #str15 @@ -6559,7 +6559,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6576,7 +6576,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -6598,7 +6598,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6615,7 +6615,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -6637,7 +6637,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6659,7 +6659,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 lda #str18 @@ -6681,7 +6681,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6703,7 +6703,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 lda #str19 @@ -6725,7 +6725,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6747,7 +6747,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 lda #str21 @@ -6769,7 +6769,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6791,7 +6791,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 lda #str111 @@ -6813,7 +6813,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6835,7 +6835,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 lda #str12 @@ -6857,7 +6857,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6879,7 +6879,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 lda #str12 @@ -6901,7 +6901,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6923,7 +6923,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 lda #str13 @@ -6945,7 +6945,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6967,7 +6967,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -6989,7 +6989,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -7011,7 +7011,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 lda #str14 @@ -7033,7 +7033,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -7250,7 +7250,7 @@ cputln: { sta.z conio_cursor_x // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [132] call cscroll -- call_phi_near + // [132] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -7401,7 +7401,7 @@ assert_cmp: { // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] textcolor_from___b8: - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -7417,7 +7417,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7431,7 +7431,7 @@ assert_cmp: { // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] printf_schar_from___b13: - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] __b14_from___b13: @@ -7446,7 +7446,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -7460,7 +7460,7 @@ assert_cmp: { // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] printf_schar_from___b15: - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] __b16_from___b15: @@ -7475,7 +7475,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -7488,7 +7488,7 @@ assert_cmp: { // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] printf_string_from___b17: - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] __b18_from___b17: @@ -7503,7 +7503,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7522,7 +7522,7 @@ assert_cmp: { // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] textcolor_from___b1: - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -7538,7 +7538,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7551,7 +7551,7 @@ assert_cmp: { // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] printf_string_from___b10: - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] __b11_from___b10: @@ -7566,7 +7566,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7819,7 +7819,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -7838,7 +7838,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -7854,7 +7854,7 @@ cscroll: { memset_from___b3: // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -7869,7 +7869,7 @@ cscroll: { // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -7988,7 +7988,7 @@ printf_schar: { __b2: // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] uctoa_from___b2: jsr uctoa jmp __b3 @@ -7998,7 +7998,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -8029,7 +8029,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return @@ -8239,7 +8239,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -8297,7 +8297,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -9187,12 +9187,12 @@ __start: { lda #LIGHT_BLUE sta.z conio_textcolor // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [6] call conio_c64_init -- call_phi_near + // [6] call conio_c64_init jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [28] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -9221,7 +9221,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy -- call_phi_near + // [15] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -9260,7 +9260,7 @@ cputc: { // [23] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [24] call cputln -- call_phi_near + // [24] call cputln jsr cputln // cputc::@return __breturn: @@ -9271,7 +9271,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [27] call cputln -- call_phi_near + // [27] call cputln jsr cputln rts } @@ -9285,7 +9285,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 lda #str1 @@ -9306,7 +9306,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9320,7 +9320,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 lda #str11 @@ -9341,7 +9341,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9355,7 +9355,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 lda #str12 @@ -9376,7 +9376,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9390,7 +9390,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 lda #str13 @@ -9411,7 +9411,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9425,7 +9425,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 lda #str14 @@ -9446,7 +9446,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9460,7 +9460,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 lda #str15 @@ -9481,7 +9481,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9495,7 +9495,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -9516,7 +9516,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9530,7 +9530,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -9551,7 +9551,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9570,7 +9570,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 lda #str18 @@ -9591,7 +9591,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9610,7 +9610,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 lda #str19 @@ -9631,7 +9631,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9650,7 +9650,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 lda #str21 @@ -9671,7 +9671,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9690,7 +9690,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 lda #str111 @@ -9711,7 +9711,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9730,7 +9730,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 lda #str12 @@ -9751,7 +9751,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9770,7 +9770,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 lda #str12 @@ -9791,7 +9791,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9810,7 +9810,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 lda #str13 @@ -9831,7 +9831,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9850,7 +9850,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -9871,7 +9871,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9890,7 +9890,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 lda #str14 @@ -9911,7 +9911,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -10128,7 +10128,7 @@ cputln: { // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [132] call cscroll -- call_phi_near + // [132] call cscroll jsr cscroll // cputln::@return // } @@ -10275,7 +10275,7 @@ assert_cmp: { // textcolor(RED) // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -10288,7 +10288,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -10300,7 +10300,7 @@ assert_cmp: { ldx.z expect // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] // assert_cmp::@14 @@ -10312,7 +10312,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -10324,7 +10324,7 @@ assert_cmp: { ldx.z actual // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] // assert_cmp::@16 @@ -10336,7 +10336,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -10347,7 +10347,7 @@ assert_cmp: { // [164] printf_string::str#1 = assert_cmp::message#17 // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] // assert_cmp::@18 @@ -10359,7 +10359,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -10375,7 +10375,7 @@ assert_cmp: { // textcolor(GREEN) // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -10388,7 +10388,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -10399,7 +10399,7 @@ assert_cmp: { // [173] printf_string::str#0 = assert_cmp::message#17 // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] // assert_cmp::@11 @@ -10411,7 +10411,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -10650,7 +10650,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -10666,7 +10666,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -10679,7 +10679,7 @@ cscroll: { // [256] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -10692,7 +10692,7 @@ cscroll: { // [214] call memset // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -10812,7 +10812,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] jsr uctoa // printf_schar::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -10820,7 +10820,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] jsr printf_number_buffer // printf_schar::@return // } @@ -10847,7 +10847,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } @@ -11050,7 +11050,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -11102,7 +11102,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/strcpy-0.log b/src/test/ref/strcpy-0.log index aaa3b83f8..9303adf6e 100644 --- a/src/test/ref/strcpy-0.log +++ b/src/test/ref/strcpy-0.log @@ -223,7 +223,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 lda #src @@ -242,7 +242,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 lda #src1 @@ -372,7 +372,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 lda #src @@ -388,7 +388,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 lda #src1 diff --git a/src/test/ref/string-const-consolidation-noroot.log b/src/test/ref/string-const-consolidation-noroot.log index 5c73a3a86..3595bcc09 100644 --- a/src/test/ref/string-const-consolidation-noroot.log +++ b/src/test/ref/string-const-consolidation-noroot.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -419,7 +419,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -430,14 +430,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/string-const-consolidation-root.log b/src/test/ref/string-const-consolidation-root.log index fde1b3fb2..6a83cad43 100644 --- a/src/test/ref/string-const-consolidation-root.log +++ b/src/test/ref/string-const-consolidation-root.log @@ -419,7 +419,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] -- call_phi_near + // [5] phi from main to print1 [phi:main->print1] print1_from_main: jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -428,7 +428,7 @@ main: { // main::@1 __b1: // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near + // [12] phi from main::@1 to print2 [phi:main::@1->print2] print2_from___b1: jsr print2 jmp __breturn @@ -447,7 +447,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -462,7 +462,7 @@ print1: { // [19] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -477,7 +477,7 @@ print1: { // [19] phi from print1::@2 to print [phi:print1::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 lda #s @@ -495,7 +495,7 @@ print2: { // [19] phi from print2 to print [phi:print2->print] print_from_print2: // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -510,7 +510,7 @@ print2: { // [19] phi from print2::@1 to print [phi:print2::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -525,7 +525,7 @@ print2: { // [19] phi from print2::@2 to print [phi:print2::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 lda #s1 @@ -674,13 +674,13 @@ Score: 677 main: { // print1() // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] -- call_phi_near + // [5] phi from main to print1 [phi:main->print1] jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print2() // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near + // [12] phi from main::@1 to print2 [phi:main::@1->print2] jsr print2 // main::@return // } @@ -697,7 +697,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -709,7 +709,7 @@ print1: { // [8] call print // [19] phi from print1::@1 to print [phi:print1::@1->print] // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -721,7 +721,7 @@ print1: { // [10] call print // [19] phi from print1::@2 to print [phi:print1::@2->print] // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 lda #s @@ -738,7 +738,7 @@ print2: { // [13] call print // [19] phi from print2 to print [phi:print2->print] // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -750,7 +750,7 @@ print2: { // [15] call print // [19] phi from print2::@1 to print [phi:print2::@1->print] // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -762,7 +762,7 @@ print2: { // [17] call print // [19] phi from print2::@2 to print [phi:print2::@2->print] // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 lda #s1 diff --git a/src/test/ref/string-const-consolidation.log b/src/test/ref/string-const-consolidation.log index 3a4a13034..6861b8596 100644 --- a/src/test/ref/string-const-consolidation.log +++ b/src/test/ref/string-const-consolidation.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -418,7 +418,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -429,14 +429,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 084de2ae1..7c799cfa5 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -206,7 +206,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout jmp __b3 // main::@3 @@ -311,7 +311,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout // main::@3 // chrout(MESSAGE[i++]); diff --git a/src/test/ref/string-escapes-4.log b/src/test/ref/string-escapes-4.log index 45c3b0f47..d3c3418c1 100644 --- a/src/test/ref/string-escapes-4.log +++ b/src/test/ref/string-escapes-4.log @@ -244,7 +244,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout -- call_phi_near + // [6] call chrout jsr chrout jmp __b4 // main::@4 @@ -366,7 +366,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout -- call_phi_near + // [6] call chrout jsr chrout // main::@4 // SCREEN1[i] = MSG2[i] diff --git a/src/test/ref/string-pointer-problem.log b/src/test/ref/string-pointer-problem.log index a696bea92..4d68344cc 100644 --- a/src/test/ref/string-pointer-problem.log +++ b/src/test/ref/string-pointer-problem.log @@ -199,7 +199,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near + // [3] phi from main to set_process_name [phi:main->set_process_name] set_process_name_from_main: jsr set_process_name jmp __breturn @@ -332,7 +332,7 @@ Score: 948 main: { // set_process_name("keyboard") // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near + // [3] phi from main to set_process_name [phi:main->set_process_name] jsr set_process_name // main::@return // } diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index 6e81e0dd7..5cea80c20 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -443,7 +443,7 @@ main: { strip_from_main: // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 lda #msg1 @@ -462,7 +462,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -478,7 +478,7 @@ main: { strip_from___b2: // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 lda #msg2 @@ -493,7 +493,7 @@ main: { // [20] phi from main::@3 to print [phi:main::@3->print] print_from___b3: // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -722,7 +722,7 @@ main: { // [9] phi from main to strip [phi:main->strip] // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 lda #msg1 @@ -738,7 +738,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -751,7 +751,7 @@ main: { // [9] phi from main::@2 to strip [phi:main::@2->strip] // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 lda #msg2 @@ -763,7 +763,7 @@ main: { // [7] call print // [20] phi from main::@3 to print [phi:main::@3->print] // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/strncat-0.log b/src/test/ref/strncat-0.log index 7b681effa..0e88b069b 100644 --- a/src/test/ref/strncat-0.log +++ b/src/test/ref/strncat-0.log @@ -446,7 +446,7 @@ main: { // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] strncat_from_main: - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 lda #hello @@ -460,7 +460,7 @@ main: { // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] strncat_from___b3: - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 lda #space @@ -474,7 +474,7 @@ main: { // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] strncat_from___b4: - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 lda #world @@ -709,7 +709,7 @@ main: { // strncat(build, hello, 5) // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 lda #hello @@ -720,7 +720,7 @@ main: { // strncat(build, space, 5) // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 lda #space @@ -731,7 +731,7 @@ main: { // strncat(build, world, 5) // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 lda #world diff --git a/src/test/ref/struct-11.log b/src/test/ref/struct-11.log index a13b51663..a876813e0 100644 --- a/src/test/ref/struct-11.log +++ b/src/test/ref/struct-11.log @@ -368,7 +368,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy jsr print_person jmp __b1 // main::@1 @@ -384,7 +384,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy jsr print_person jmp __breturn // main::@return @@ -548,7 +548,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy jsr print_person // main::@1 // print_person(henriette) @@ -562,7 +562,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy jsr print_person // main::@return // } diff --git a/src/test/ref/struct-11b.log b/src/test/ref/struct-11b.log index 4ab349f17..6f04d1233 100644 --- a/src/test/ref/struct-11b.log +++ b/src/test/ref/struct-11b.log @@ -306,7 +306,7 @@ main: { print_person_from_main: // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 lda #jesper_initials @@ -321,7 +321,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 lda #henry_initials @@ -452,7 +452,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 lda #jesper_initials @@ -464,7 +464,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 lda #henry_initials diff --git a/src/test/ref/struct-12.log b/src/test/ref/struct-12.log index 9f897fa31..7a8731e6a 100644 --- a/src/test/ref/struct-12.log +++ b/src/test/ref/struct-12.log @@ -378,7 +378,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person jmp __breturn @@ -575,7 +575,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person // main::@1 @@ -596,7 +596,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log index cd1a81ea7..d064fca8f 100644 --- a/src/test/ref/struct-22.log +++ b/src/test/ref/struct-22.log @@ -224,7 +224,7 @@ main: { // [9] phi from main to print [phi:main->print] print_from_main: // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy jsr print jmp __b1 // main::@1 @@ -237,7 +237,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy jsr print jmp __breturn // main::@return @@ -348,7 +348,7 @@ main: { // [4] call print // [9] phi from main to print [phi:main->print] // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy jsr print // main::@1 // print(point2) @@ -359,7 +359,7 @@ main: { // [7] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/struct-23.log b/src/test/ref/struct-23.log index 963dfa9ad..2dac27139 100644 --- a/src/test/ref/struct-23.log +++ b/src/test/ref/struct-23.log @@ -329,7 +329,7 @@ main: { getPoint_from_main: // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 ldx #2 jsr getPoint // [2] getPoint::return_x#0 = getPoint::return_x#2 @@ -352,7 +352,7 @@ main: { getPoint_from___b1: // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 ldx #4 jsr getPoint // [9] getPoint::return_x#1 = getPoint::return_x#2 @@ -461,7 +461,7 @@ main: { // [16] phi from main to getPoint [phi:main->getPoint] // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 ldx #2 jsr getPoint // __ma struct Point point1 = getPoint(2, 3) @@ -485,7 +485,7 @@ main: { // [16] phi from main::@1 to getPoint [phi:main::@1->getPoint] // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 ldx #4 jsr getPoint // __ma struct Point point2 = getPoint(4, 5) diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index 5918d9eca..c55db1bdc 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -286,7 +286,7 @@ main: { print_from_main: // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -298,7 +298,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 lda #2 jsr print jmp __breturn @@ -387,7 +387,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -396,7 +396,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 lda #2 jsr print // main::@return diff --git a/src/test/ref/struct-44.log b/src/test/ref/struct-44.log index f8aac3cdb..da5547970 100644 --- a/src/test/ref/struct-44.log +++ b/src/test/ref/struct-44.log @@ -1316,7 +1316,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1330,7 +1330,7 @@ main: { // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy jsr print_ln jmp __b2 // main::@2 @@ -1360,7 +1360,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy jsr print_circle jmp __breturn // main::@return @@ -1381,7 +1381,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 lda #str @@ -1394,7 +1394,7 @@ print_circle: { // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] print_uint_from___b1: - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] __b2_from___b1: @@ -1406,7 +1406,7 @@ print_circle: { print_str_from___b2: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 lda #str1 @@ -1423,7 +1423,7 @@ print_circle: { // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] print_uint_from___b3: - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] __b4_from___b3: @@ -1435,7 +1435,7 @@ print_circle: { print_str_from___b4: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 lda #str2 @@ -1452,7 +1452,7 @@ print_circle: { // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] print_uint_from___b5: - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] __b6_from___b5: @@ -1464,7 +1464,7 @@ print_circle: { print_str_from___b6: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 lda #str3 @@ -1474,7 +1474,7 @@ print_circle: { // print_circle::@7 __b7: // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar -- call_phi_near + // [28] call print_uchar jsr print_uchar jmp __breturn // print_circle::@return @@ -1541,7 +1541,7 @@ print_str: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -1572,7 +1572,7 @@ print_uint: { print_char_from_print_uint: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy jsr print_char jmp __b1 // print_uint::@1 @@ -1589,7 +1589,7 @@ print_uint: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy jsr print_char jmp __b2 // print_uint::@2 @@ -1609,7 +1609,7 @@ print_uint: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy jsr print_char jmp __b3 // print_uint::@3 @@ -1626,7 +1626,7 @@ print_uint: { print_char_from___b3: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy jsr print_char jmp __breturn // print_uint::@return @@ -1652,7 +1652,7 @@ print_uchar: { print_char_from_print_uchar: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1668,7 +1668,7 @@ print_uchar: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1696,7 +1696,7 @@ print_char: { // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] __breturn_from___b1: @@ -1957,7 +1957,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1968,7 +1968,7 @@ main: { // print_ln() // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy jsr print_ln // main::@2 // print_circle(c2) @@ -1996,7 +1996,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy jsr print_circle // main::@return // } @@ -2016,7 +2016,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 lda #str @@ -2027,7 +2027,7 @@ print_circle: { // [15] print_uint::i#0 = print_circle::c_radius#2 // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] // print_circle::@2 @@ -2036,7 +2036,7 @@ print_circle: { // [33] phi from print_circle::@2 to print_str [phi:print_circle::@2->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 lda #str1 @@ -2051,7 +2051,7 @@ print_circle: { sta.z print_uint.i+1 // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] // print_circle::@4 @@ -2060,7 +2060,7 @@ print_circle: { // [33] phi from print_circle::@4 to print_str [phi:print_circle::@4->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 lda #str2 @@ -2075,7 +2075,7 @@ print_circle: { sta.z print_uint.i+1 // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] // print_circle::@6 @@ -2084,7 +2084,7 @@ print_circle: { // [33] phi from print_circle::@6 to print_str [phi:print_circle::@6->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 lda #str3 @@ -2093,7 +2093,7 @@ print_circle: { // print_circle::@7 // print_uchar(c.color) // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar -- call_phi_near + // [28] call print_uchar jsr print_uchar // print_circle::@return // } @@ -2156,7 +2156,7 @@ print_str: { // [65] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -2188,7 +2188,7 @@ print_uint: { // [65] phi from print_uint to print_char [phi:print_uint->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy jsr print_char // print_uint::@1 // BYTE1(i) @@ -2205,7 +2205,7 @@ print_uint: { // [65] phi from print_uint::@1 to print_char [phi:print_uint::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy jsr print_char // print_uint::@2 // BYTE0(i) @@ -2225,7 +2225,7 @@ print_uint: { // [65] phi from print_uint::@2 to print_char [phi:print_uint::@2->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy jsr print_char // print_uint::@3 // BYTE0(i) @@ -2242,7 +2242,7 @@ print_uint: { // [65] phi from print_uint::@3 to print_char [phi:print_uint::@3->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy jsr print_char // print_uint::@return // } @@ -2268,7 +2268,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy jsr print_char // print_uchar::@1 // c&0x0f @@ -2283,7 +2283,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy jsr print_char // print_uchar::@return // } @@ -2310,7 +2310,7 @@ print_char: { // print_ln() // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] // [71] phi screen_line#24 = screen_line#25 [phi:print_char::@1->print_char::@return#0] -- register_copy diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 160d184c7..562daa3bc 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -205,7 +205,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call point - // [5] phi from main to point [phi:main->point] -- call_phi_near + // [5] phi from main to point [phi:main->point] point_from_main: jsr point jmp __b1 @@ -281,7 +281,7 @@ main: { .label SCREEN = $400 // point() // [1] call point - // [5] phi from main to point [phi:main->point] -- call_phi_near + // [5] phi from main to point [phi:main->point] jsr point // main::@1 // SCREEN[0] = q.x diff --git a/src/test/ref/struct-pointer-ints.log b/src/test/ref/struct-pointer-ints.log index 929f043f6..439c9747a 100644 --- a/src/test/ref/struct-pointer-ints.log +++ b/src/test/ref/struct-pointer-ints.log @@ -198,7 +198,7 @@ main: { dey sta s,y bne !- - // [1] call update -- call_phi_near + // [1] call update jsr update jmp __breturn // main::@return @@ -279,7 +279,7 @@ main: { sta s,y bne !- // update(&s, 1000) - // [1] call update -- call_phi_near + // [1] call update jsr update // main::@return // } diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index 62e3627d2..f3667e527 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -219,7 +219,7 @@ main: { sta p-1,y dey bne !- - // [1] call set -- call_phi_near + // [1] call set jsr set jmp __b1 // main::@1 @@ -311,7 +311,7 @@ main: { dey bne !- // set(q) - // [1] call set -- call_phi_near + // [1] call set jsr set // main::@1 // SCREEN[0] = q->x diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index ae180a3ec..efca071e2 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -510,7 +510,7 @@ main: { // [1] call get // [21] phi from main to get [phi:main->get] get_from_main: - // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near + // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // [2] get::return_x#0 = get::return_x#7 @@ -540,7 +540,7 @@ main: { // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // [11] get::return_x#1 = get::return_x#7 // [12] get::return_y#1 = get::return_y#7 @@ -731,7 +731,7 @@ main: { // get(0) // [1] call get // [21] phi from main to get [phi:main->get] - // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near + // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // get(0) @@ -757,7 +757,7 @@ main: { tya // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // get(i) // [11] get::return_x#1 = get::return_x#7 diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index 21ef57152..25a9edc1e 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -337,7 +337,7 @@ main: { // [1] call get // [17] phi from main to get [phi:main->get] get_from_main: - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // [2] get::return_x#0 = get::return_x#2 @@ -366,7 +366,7 @@ main: { // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // [9] get::return_x#1 = get::return_x#2 jmp __b3 @@ -483,7 +483,7 @@ main: { // get(0) // [1] call get // [17] phi from main to get [phi:main->get] - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // get(0) @@ -508,7 +508,7 @@ main: { tya // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // get(i) // [9] get::return_x#1 = get::return_x#2 diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index aef25a7ae..01cd484ed 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -366,7 +366,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b2 // main::@2 @@ -518,7 +518,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@2 // for ( char i: 0..1) diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 1ce20220d..7fedae1e8 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -302,7 +302,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy jsr print jmp __b1 // main::@1 @@ -316,7 +316,7 @@ main: { print_from___b1: // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy jsr print jmp __breturn // main::@return @@ -437,7 +437,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy jsr print // main::@1 // print(*ptr) @@ -449,7 +449,7 @@ main: { // [8] phi from main::@1 to print [phi:main::@1->print] // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index 4c11521d2..a2ca0c0e0 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1039,7 +1039,7 @@ main: { sta (__13),y // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] @@ -1055,7 +1055,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1069,7 +1069,7 @@ main: { // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1079,7 +1079,7 @@ main: { // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -1097,7 +1097,7 @@ main: { // [21] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -1111,7 +1111,7 @@ main: { // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] print_uchar_from___b5: - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: @@ -1121,7 +1121,7 @@ main: { // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] print_ln_from___b6: - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // main::@return @@ -1139,7 +1139,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [41] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1180,7 +1180,7 @@ print_str: { // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -1210,7 +1210,7 @@ print_uchar: { // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1224,7 +1224,7 @@ print_uchar: { // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1516,7 +1516,7 @@ main: { // print_cls() // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1528,7 +1528,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1540,14 +1540,14 @@ main: { ldx.z 0 // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -1563,7 +1563,7 @@ main: { // [12] call print_str // [21] phi from main::@4 to print_str [phi:main::@4->print_str] // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -1575,14 +1575,14 @@ main: { ldx $4004 // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // print_ln() // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy jsr print_ln // main::@return // } @@ -1600,7 +1600,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [41] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1636,7 +1636,7 @@ print_str: { // [26] call print_char // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -1666,7 +1666,7 @@ print_uchar: { // Table of hexadecimal digits // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -1679,7 +1679,7 @@ print_uchar: { // [34] call print_char // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index 670db72d5..cbf14967f 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -391,7 +391,7 @@ main: { print_person_from_main: // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -406,7 +406,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #person @@ -567,7 +567,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -579,7 +579,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #person diff --git a/src/test/ref/struct-ptr-24.log b/src/test/ref/struct-ptr-24.log index 86e8070b3..612b6a134 100644 --- a/src/test/ref/struct-ptr-24.log +++ b/src/test/ref/struct-ptr-24.log @@ -227,7 +227,7 @@ main: { // main::@2 __b2: // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName -- call_phi_near + // [5] call PrintName jsr PrintName jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { __b2: // PrintName(file) // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName -- call_phi_near + // [5] call PrintName jsr PrintName // main::@3 // ++file; diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index 00c214918..883b54c3a 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -501,7 +501,7 @@ main: { lda ($fe),y sta.z uSize+1 // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint -- call_phi_near + // [3] call print_uint jsr print_uint jmp __breturn // main::@return @@ -524,7 +524,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -535,7 +535,7 @@ print_uint: { // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -561,7 +561,7 @@ print_uchar: { // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -575,7 +575,7 @@ print_uchar: { // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -713,7 +713,7 @@ main: { sta.z uSize+1 // print_uint(uSize) // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint -- call_phi_near + // [3] call print_uint jsr print_uint // main::@return // } @@ -735,7 +735,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -744,7 +744,7 @@ print_uint: { // [8] call print_uchar // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -770,7 +770,7 @@ print_uchar: { // Table of hexadecimal digits // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -783,7 +783,7 @@ print_uchar: { // [16] call print_char // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-28.log b/src/test/ref/struct-ptr-28.log index b55726613..16f789147 100644 --- a/src/test/ref/struct-ptr-28.log +++ b/src/test/ref/struct-ptr-28.log @@ -406,7 +406,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 lda #jesper @@ -426,7 +426,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #henriette @@ -618,7 +618,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 lda #jesper @@ -637,7 +637,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #henriette diff --git a/src/test/ref/struct-ptr-29.log b/src/test/ref/struct-ptr-29.log index f5178c5fa..0851f3245 100644 --- a/src/test/ref/struct-ptr-29.log +++ b/src/test/ref/struct-ptr-29.log @@ -372,7 +372,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -387,7 +387,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON @@ -559,7 +559,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -571,7 +571,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index f5c1e15fd..ac2bddd57 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -375,7 +375,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b2 // main::@2 @@ -543,7 +543,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@2 // for ( char i: 0..3) diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index 40b5b2919..6a4043e79 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -378,7 +378,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -393,7 +393,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON @@ -570,7 +570,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -582,7 +582,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-34.log b/src/test/ref/struct-ptr-34.log index a40dc698b..7c8268e35 100644 --- a/src/test/ref/struct-ptr-34.log +++ b/src/test/ref/struct-ptr-34.log @@ -377,7 +377,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person jmp __b1 @@ -399,7 +399,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person jmp __breturn @@ -573,7 +573,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person // main::@1 @@ -594,7 +594,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-unwinding-2.log b/src/test/ref/struct-unwinding-2.log index bd3ca1afc..57b719231 100644 --- a/src/test/ref/struct-unwinding-2.log +++ b/src/test/ref/struct-unwinding-2.log @@ -391,7 +391,7 @@ main: { print1_from_main: // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 lda #0 jsr print1 jmp __b1 @@ -407,7 +407,7 @@ main: { print2_from___b1: // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -423,7 +423,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -439,7 +439,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 lda #6 jsr print2 jmp __breturn @@ -607,7 +607,7 @@ main: { // [12] phi from main to print1 [phi:main->print1] // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 lda #0 jsr print1 // main::@1 @@ -621,7 +621,7 @@ main: { // [17] phi from main::@1 to print2 [phi:main::@1->print2] // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -634,7 +634,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -647,7 +647,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 lda #6 jsr print2 // main::@return diff --git a/src/test/ref/summin.log b/src/test/ref/summin.log index fed3ac18d..72960af5a 100644 --- a/src/test/ref/summin.log +++ b/src/test/ref/summin.log @@ -344,7 +344,7 @@ main: { sum_from_main: // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 ldx #1 jsr sum // [2] sum::return#0 = sum::return#3 @@ -358,7 +358,7 @@ main: { sum_from___b1: // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #3 jsr sum // [5] sum::return#1 = sum::return#3 @@ -372,7 +372,7 @@ main: { sum_from___b2: // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 ldx #9 jsr sum // [8] sum::return#2 = sum::return#3 @@ -489,7 +489,7 @@ main: { // [14] phi from main to sum [phi:main->sum] // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 ldx #1 jsr sum // byte s1=sum(1,2) @@ -502,7 +502,7 @@ main: { // [14] phi from main::@1 to sum [phi:main::@1->sum] // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #3 jsr sum // byte s2=sum(3,4) @@ -515,7 +515,7 @@ main: { // [14] phi from main::@2 to sum [phi:main::@2->sum] // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 ldx #9 jsr sum // byte s3=sum(9,13) diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index 9d783e981..e59a43842 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -413,7 +413,7 @@ main: { __b1: // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond -- call_phi_near + // [3] call cond jsr cond // [4] cond::return#0 = cond::return#1 jmp __b5 @@ -428,7 +428,7 @@ main: { __b3: // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 -- call_phi_near + // [8] call m2 jsr m2 // [9] m2::return#0 = m2::return#1 jmp __b7 @@ -458,7 +458,7 @@ main: { __b2: // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 -- call_phi_near + // [17] call m1 jsr m1 // [18] m1::return#0 = m1::return#1 jmp __b6 @@ -610,7 +610,7 @@ main: { // cond(i) // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond -- call_phi_near + // [3] call cond jsr cond // [4] cond::return#0 = cond::return#1 // main::@5 @@ -623,7 +623,7 @@ main: { // m2(i) // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 -- call_phi_near + // [8] call m2 jsr m2 // [9] m2::return#0 = m2::return#1 // main::@7 @@ -651,7 +651,7 @@ main: { // m1(i) // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 -- call_phi_near + // [17] call m1 jsr m1 // [18] m1::return#0 = m1::return#1 // main::@6 diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index fdd1384b5..39b585c7f 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -268,7 +268,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -395,7 +395,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comments-global.log b/src/test/ref/test-comments-global.log index 593c45e1e..dd2286dbf 100644 --- a/src/test/ref/test-comments-global.log +++ b/src/test/ref/test-comments-global.log @@ -130,7 +130,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -215,7 +215,7 @@ __start: { sta.z screen+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 438b8bb10..991fbf8ef 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -267,7 +267,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -392,7 +392,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index c9e36d50b..8ca79b5a4 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -2186,7 +2186,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2279,7 +2279,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare jmp __b9 // main::@9 @@ -2296,7 +2296,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: jsr print_ln jmp __b10 @@ -2360,7 +2360,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [68] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -2467,14 +2467,14 @@ compare: { // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] print_sint_from___b6: // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy jsr print_sint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] print_str_from___b25: jsr print_str jmp __b26 @@ -2489,7 +2489,7 @@ compare: { // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] print_sint_from___b26: // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy jsr print_sint jmp __b27 // compare::@27 @@ -2500,7 +2500,7 @@ compare: { // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy jsr print_char jmp __breturn // compare::@return @@ -2812,7 +2812,7 @@ print_sint: { // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2823,7 +2823,7 @@ print_sint: { // print_sint::@2 __b2: // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint -- call_phi_near + // [80] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -2839,7 +2839,7 @@ print_sint: { // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -2886,7 +2886,7 @@ print_str: { // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2926,7 +2926,7 @@ print_uint: { // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2962,7 +2962,7 @@ print_uchar: { // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2976,7 +2976,7 @@ print_uchar: { // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3344,7 +3344,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3427,7 +3427,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare // main::@9 // if(++s==3) @@ -3441,7 +3441,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] jsr print_ln // main::@10 // [17] print_char_cursor#117 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3494,7 +3494,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [68] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -3592,13 +3592,13 @@ compare: { // [40] call print_sint // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy jsr print_sint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] jsr print_str // compare::@26 // print_sint(w2) @@ -3610,7 +3610,7 @@ compare: { // [44] call print_sint // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy jsr print_sint // compare::@27 // print_char(r) @@ -3619,7 +3619,7 @@ compare: { // [46] call print_char // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy jsr print_char // compare::@return // } @@ -3900,7 +3900,7 @@ print_sint: { // [77] call print_char // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3909,7 +3909,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint -- call_phi_near + // [80] call print_uint jsr print_uint // print_sint::@return // } @@ -3922,7 +3922,7 @@ print_sint: { // [83] call print_char // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -3965,7 +3965,7 @@ print_str: { // [90] call print_char // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4005,7 +4005,7 @@ print_uint: { ldx.z w+1 // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4013,7 +4013,7 @@ print_uint: { ldx.z w // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4039,7 +4039,7 @@ print_uchar: { // Table of hexadecimal digits // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4052,7 +4052,7 @@ print_uchar: { // [107] call print_char // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index fc913e3fb..993118abf 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -2072,7 +2072,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2165,7 +2165,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare jmp __b9 // main::@9 @@ -2182,7 +2182,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: jsr print_ln jmp __b10 @@ -2246,7 +2246,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [70] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -2353,14 +2353,14 @@ compare: { // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] print_uint_from___b6: // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy jsr print_uint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] print_str_from___b25: jsr print_str jmp __b26 @@ -2375,7 +2375,7 @@ compare: { // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] print_uint_from___b26: // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy jsr print_uint jmp __b27 // compare::@27 @@ -2386,7 +2386,7 @@ compare: { // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] __b28_from___b27: @@ -2397,7 +2397,7 @@ compare: { // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] print_char_from___b28: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __breturn @@ -2704,7 +2704,7 @@ print_uint: { // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2715,7 +2715,7 @@ print_uint: { // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2754,7 +2754,7 @@ print_str: { // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2802,7 +2802,7 @@ print_uchar: { // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2816,7 +2816,7 @@ print_uchar: { // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3161,7 +3161,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3244,7 +3244,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare // main::@9 // if(++s==3) @@ -3258,7 +3258,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] jsr print_ln // main::@10 // [17] print_char_cursor#108 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3311,7 +3311,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [70] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -3409,13 +3409,13 @@ compare: { // [40] call print_uint // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy jsr print_uint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] jsr print_str // compare::@26 // print_uint(w2) @@ -3427,7 +3427,7 @@ compare: { // [44] call print_uint // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy jsr print_uint // compare::@27 // print_char(r) @@ -3436,7 +3436,7 @@ compare: { // [46] call print_char // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] // compare::@28 @@ -3444,7 +3444,7 @@ compare: { // [48] call print_char // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // compare::@return @@ -3722,7 +3722,7 @@ print_uint: { // [78] call print_uchar // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3731,7 +3731,7 @@ print_uint: { // [80] call print_uchar // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -3766,7 +3766,7 @@ print_str: { // [87] call print_char // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3815,7 +3815,7 @@ print_uchar: { // Table of hexadecimal digits // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3828,7 +3828,7 @@ print_uchar: { // [99] call print_char // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index a984678bb..630c0dbb0 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -229,7 +229,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -356,7 +356,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index c651e9cbc..20611a737 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -166,7 +166,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -258,7 +258,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index 7fee032ec..d07a3e81f 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -421,7 +421,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call keyboard_init -- call_phi_near + // [1] call keyboard_init jsr keyboard_init jmp __b1 // main::@1 @@ -436,7 +436,7 @@ main: { // main::@2 __b2: // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] keyboard_key_pressed_from___b2: jsr keyboard_key_pressed // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -487,7 +487,7 @@ keyboard_init: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - // [14] call keyboard_matrix_read -- call_phi_near + // [14] call keyboard_matrix_read jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -641,7 +641,7 @@ Score: 1141 // main main: { // keyboard_init() - // [1] call keyboard_init -- call_phi_near + // [1] call keyboard_init jsr keyboard_init // main::@1 __b1: @@ -654,7 +654,7 @@ main: { // main::@2 // keyboard_key_pressed(KEY_SPACE) // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -706,7 +706,7 @@ keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 // keyboard_matrix_read(rowidx) - // [14] call keyboard_matrix_read -- call_phi_near + // [14] call keyboard_matrix_read jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index af2450073..8ac6f08aa 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1139,7 +1139,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call keyboard_init -- call_phi_near + // [4] call keyboard_init // Init keyboard jsr keyboard_init jmp __b4 @@ -1173,7 +1173,7 @@ main: { // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] keyboard_matrix_read_from___b5: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 jmp __b17 @@ -1264,7 +1264,7 @@ main: { __b12: // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode -- call_phi_near + // [24] call keyboard_get_keycode jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 jmp __b18 @@ -1279,7 +1279,7 @@ main: { __b14: // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed -- call_phi_near + // [29] call keyboard_key_pressed jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 jmp __b19 @@ -1426,7 +1426,7 @@ keyboard_key_pressed: { // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] keyboard_matrix_read_from_keyboard_key_pressed: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -1774,7 +1774,7 @@ main: { // [3] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // keyboard_init() - // [4] call keyboard_init -- call_phi_near + // [4] call keyboard_init // Init keyboard jsr keyboard_init // main::@4 @@ -1804,7 +1804,7 @@ main: { ldx.z row // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // byte row_pressed_bits = keyboard_matrix_read(row) // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 @@ -1887,7 +1887,7 @@ main: { // byte key = keyboard_get_keycode(ch) // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode -- call_phi_near + // [24] call keyboard_get_keycode jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 // main::@18 @@ -1900,7 +1900,7 @@ main: { // keyboard_key_pressed(key) // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed -- call_phi_near + // [29] call keyboard_key_pressed jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 // main::@19 @@ -2049,7 +2049,7 @@ keyboard_key_pressed: { tax // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // keyboard_matrix_read(rowidx) // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index a719270ef..3bbd8dc31 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -1373,7 +1373,7 @@ main: { .label dw2 = $a .label dw = $e // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [41] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1461,7 +1461,7 @@ main: { lda.z __29+1 sta.z dw2+1 // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong -- call_phi_near + // [12] call print_ulong // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1473,7 +1473,7 @@ main: { // [50] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b4 @@ -1488,7 +1488,7 @@ main: { // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] print_uint_from___b4: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -1500,7 +1500,7 @@ main: { // [50] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from___b5: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b6 @@ -1515,7 +1515,7 @@ main: { // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] print_uint_from___b6: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -1527,7 +1527,7 @@ main: { // [50] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from___b7: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b8 @@ -1539,7 +1539,7 @@ main: { // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] print_uchar_from___b8: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1551,7 +1551,7 @@ main: { // [50] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from___b9: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b10 @@ -1563,7 +1563,7 @@ main: { // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] print_uchar_from___b10: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -1575,7 +1575,7 @@ main: { // [50] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from___b11: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b12 @@ -1587,7 +1587,7 @@ main: { // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] print_uchar_from___b12: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1599,7 +1599,7 @@ main: { // [50] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from___b13: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b14 @@ -1611,7 +1611,7 @@ main: { // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] print_uchar_from___b14: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -1620,7 +1620,7 @@ main: { __b15: // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] print_ln_from___b15: jsr print_ln jmp __b16 @@ -1651,7 +1651,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1679,7 +1679,7 @@ print_ulong: { // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 @@ -1693,7 +1693,7 @@ print_ulong: { // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return @@ -1730,7 +1730,7 @@ print_uint: { // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1741,7 +1741,7 @@ print_uint: { // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1767,7 +1767,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1781,7 +1781,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2096,7 +2096,7 @@ main: { .label dw = $e // print_cls() // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [41] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2186,7 +2186,7 @@ main: { sta.z dw2+1 // print_ulong(dw2) // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong -- call_phi_near + // [12] call print_ulong // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2195,7 +2195,7 @@ main: { // [14] call print_char // [50] phi from main::@3 to print_char [phi:main::@3->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@4 @@ -2208,7 +2208,7 @@ main: { // [16] call print_uint // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -2217,7 +2217,7 @@ main: { // Test get high word of dword // [50] phi from main::@5 to print_char [phi:main::@5->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@6 @@ -2230,7 +2230,7 @@ main: { // [20] call print_uint // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -2239,7 +2239,7 @@ main: { // Test get low word of dword // [50] phi from main::@7 to print_char [phi:main::@7->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@8 @@ -2249,7 +2249,7 @@ main: { // [24] call print_uchar // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -2258,7 +2258,7 @@ main: { // Test get high high byte of dword // [50] phi from main::@9 to print_char [phi:main::@9->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@10 @@ -2268,7 +2268,7 @@ main: { // [28] call print_uchar // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -2277,7 +2277,7 @@ main: { // Test get low high byte of dword // [50] phi from main::@11 to print_char [phi:main::@11->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@12 @@ -2287,7 +2287,7 @@ main: { // [32] call print_uchar // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -2296,7 +2296,7 @@ main: { // Test get high low byte of dword // [50] phi from main::@13 to print_char [phi:main::@13->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@14 @@ -2306,14 +2306,14 @@ main: { // [36] call print_uchar // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) @@ -2342,7 +2342,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2369,7 +2369,7 @@ print_ulong: { // [46] call print_uint // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2381,7 +2381,7 @@ print_ulong: { // [48] call print_uint // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } @@ -2418,7 +2418,7 @@ print_uint: { // [56] call print_uchar // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2427,7 +2427,7 @@ print_uint: { // [58] call print_uchar // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2453,7 +2453,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2466,7 +2466,7 @@ print_uchar: { // [66] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index 59c9e835e..cbfe562da 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -650,7 +650,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near + // [7] phi from main to scrollup1 [phi:main->scrollup1] scrollup1_from_main: jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -659,7 +659,7 @@ main: { // main::@1 __b1: // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] scrollup2_from___b1: jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -668,7 +668,7 @@ main: { // main::@2 __b2: // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] scrollup3_from___b2: jsr scrollup3 jmp __breturn @@ -1081,19 +1081,19 @@ Score: 21407 main: { // scrollup1() // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near + // [7] phi from main to scrollup1 [phi:main->scrollup1] jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // scrollup2() // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // scrollup3() // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] jsr scrollup3 // main::@return // } diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index da47eae51..ae2da3cb4 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -1105,7 +1105,7 @@ main: { .label w1 = 8 .label i = $a // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [17] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1156,7 +1156,7 @@ main: { // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] print_sint_from___b1: // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -1167,7 +1167,7 @@ main: { // [31] phi from main::@2 to print_char [phi:main::@2->print_char] print_char_from___b2: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b3 @@ -1182,7 +1182,7 @@ main: { // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] print_sint_from___b3: // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -1190,7 +1190,7 @@ main: { // main::@4 __b4: // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] print_ln_from___b4: jsr print_ln jmp __b5 @@ -1226,7 +1226,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [40] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1252,7 +1252,7 @@ print_sint: { // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1263,7 +1263,7 @@ print_sint: { // print_sint::@2 __b2: // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint -- call_phi_near + // [26] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -1279,7 +1279,7 @@ print_sint: { // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -1403,7 +1403,7 @@ print_uint: { // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1413,7 +1413,7 @@ print_uint: { // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1439,7 +1439,7 @@ print_uchar: { // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1453,7 +1453,7 @@ print_uchar: { // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1638,7 +1638,7 @@ main: { .label i = $a // print_cls() // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [17] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -1688,7 +1688,7 @@ main: { // [6] call print_sint // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -1696,7 +1696,7 @@ main: { // [8] call print_char // [31] phi from main::@2 to print_char [phi:main::@2->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@3 @@ -1709,13 +1709,13 @@ main: { // [10] call print_sint // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // print_ln() // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] jsr print_ln // main::@5 // for( byte i: 0..10 ) @@ -1748,7 +1748,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [40] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1770,7 +1770,7 @@ print_sint: { // [23] call print_char // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1779,7 +1779,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint -- call_phi_near + // [26] call print_uint jsr print_uint // print_sint::@return // } @@ -1792,7 +1792,7 @@ print_sint: { // [29] call print_char // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -1913,7 +1913,7 @@ print_uint: { ldx.z w+1 // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1921,7 +1921,7 @@ print_uint: { ldx.z w // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -1947,7 +1947,7 @@ print_uchar: { // Table of hexadecimal digits // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -1960,7 +1960,7 @@ print_uchar: { // [57] call print_char // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index d41b4ed6f..2a06ad9f5 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -2127,14 +2127,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -2172,7 +2172,7 @@ conio_c64_init: { // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2192,7 +2192,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init -- call_phi_near + // [20] call tod_init jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] __b1_from_main: @@ -2203,7 +2203,7 @@ main: { // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2211,7 +2211,7 @@ main: { jmp __b2 // main::@2 __b2: - // [24] call tod_read -- call_phi_near + // [24] call tod_read jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -2230,7 +2230,7 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str -- call_phi_near + // [33] call tod_str jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -2238,7 +2238,7 @@ main: { // main::@4 __b4: // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] cputs_from___b4: jsr cputs jmp __b1_from___b4 @@ -2519,7 +2519,7 @@ cputs: { // cputs::@2 __b2: // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc -- call_phi_near + // [95] call cputc jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] __b1_from___b2: @@ -2555,7 +2555,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [102] call cputln -- call_phi_near + // [102] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2567,7 +2567,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [105] call cputln -- call_phi_near + // [105] call cputln jsr cputln jmp __breturn } @@ -2595,7 +2595,7 @@ cputln: { sta.z conio_cursor_x // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [110] call cscroll -- call_phi_near + // [110] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2623,7 +2623,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2642,7 +2642,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2658,7 +2658,7 @@ cscroll: { memset_from___b3: // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2674,7 +2674,7 @@ cscroll: { memset_from___b4: // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3197,11 +3197,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -3232,7 +3232,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy // conio_c64_init::@return // } @@ -3252,7 +3252,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init -- call_phi_near + // [20] call tod_init jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] // main::@1 @@ -3260,13 +3260,13 @@ main: { // gotoxy(0,0) // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // tod_read() - // [24] call tod_read -- call_phi_near + // [24] call tod_read jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -3284,13 +3284,13 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str -- call_phi_near + // [33] call tod_str jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputs(tod_str(tod_read())) // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] jsr cputs jmp __b1 } @@ -3598,7 +3598,7 @@ cputs: { __b2: // cputc(c) // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc -- call_phi_near + // [95] call cputc jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] // [89] phi cputs::s#2 = cputs::s#0 [phi:cputs::@2->cputs::@1#0] -- register_copy @@ -3632,7 +3632,7 @@ cputc: { // [101] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [102] call cputln -- call_phi_near + // [102] call cputln jsr cputln // cputc::@return __breturn: @@ -3643,7 +3643,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [105] call cputln -- call_phi_near + // [105] call cputln jsr cputln rts } @@ -3676,7 +3676,7 @@ cputln: { // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [110] call cscroll -- call_phi_near + // [110] call cscroll jsr cscroll // cputln::@return // } @@ -3701,7 +3701,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3717,7 +3717,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3730,7 +3730,7 @@ cscroll: { // [135] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3743,7 +3743,7 @@ cscroll: { // [135] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/toupper-1.log b/src/test/ref/toupper-1.log index cb5c3a047..a3c406731 100644 --- a/src/test/ref/toupper-1.log +++ b/src/test/ref/toupper-1.log @@ -1780,14 +1780,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -1825,7 +1825,7 @@ conio_c64_init: { // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1843,7 +1843,7 @@ main: { sta $d018 // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [50] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] @@ -1864,7 +1864,7 @@ main: { // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] cputc_from___b1: - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy jsr cputc jmp __b4 // main::@4 @@ -1888,7 +1888,7 @@ main: { // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] gotoxy_from___b3: - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] __b2_from___b3: @@ -1905,7 +1905,7 @@ main: { __b2: // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper -- call_phi_near + // [28] call toupper jsr toupper // [29] toupper::return#3 = toupper::return#2 jmp __b5 @@ -1915,7 +1915,7 @@ main: { // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] cputc_from___b5: - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy jsr cputc jmp __b6 // main::@6 @@ -2159,7 +2159,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [73] call cputln -- call_phi_near + // [73] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2171,7 +2171,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [76] call cputln -- call_phi_near + // [76] call cputln jsr cputln jmp __breturn } @@ -2231,7 +2231,7 @@ cputln: { sta.z conio_cursor_x // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [86] call cscroll -- call_phi_near + // [86] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2259,7 +2259,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2278,7 +2278,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2294,7 +2294,7 @@ cscroll: { memset_from___b3: // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2310,7 +2310,7 @@ cscroll: { memset_from___b4: // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2766,11 +2766,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -2801,7 +2801,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy // conio_c64_init::@return // } @@ -2820,7 +2820,7 @@ main: { // clrscr() // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [50] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] // [18] phi main::c#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2836,7 +2836,7 @@ main: { lda.z c // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy jsr cputc // main::@4 // for(char c:0..0xff) @@ -2856,7 +2856,7 @@ main: { inx // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] // [26] phi main::c1#2 = 0 [phi:main::@3->main::@2#0] -- vbuz1=vbuc1 @@ -2870,7 +2870,7 @@ main: { // toupper(c) // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper -- call_phi_near + // [28] call toupper jsr toupper // [29] toupper::return#3 = toupper::return#2 // main::@5 @@ -2878,7 +2878,7 @@ main: { // [30] cputc::c#1 = toupper::return#3 // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy jsr cputc // main::@6 // for(char c:0..0xff) @@ -3118,7 +3118,7 @@ cputc: { // [72] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [73] call cputln -- call_phi_near + // [73] call cputln jsr cputln // cputc::@return __breturn: @@ -3129,7 +3129,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [76] call cputln -- call_phi_near + // [76] call cputln jsr cputln rts } @@ -3191,7 +3191,7 @@ cputln: { // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [86] call cscroll -- call_phi_near + // [86] call cscroll jsr cscroll // cputln::@return // } @@ -3216,7 +3216,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3232,7 +3232,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3245,7 +3245,7 @@ cscroll: { // [111] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3258,7 +3258,7 @@ cscroll: { // [111] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 1d1caf5d6..3097d73f5 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -866,7 +866,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call game_ready -- call_phi_near + // [2] call game_ready jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 jmp __b4 @@ -889,7 +889,7 @@ main: { print_str_ln_from___b3: // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -954,7 +954,7 @@ game_ready: { print_str_ln_from___b1: // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -988,7 +988,7 @@ print_str_ln: { .label str = 4 // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] print_str_from_print_str_ln: jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] @@ -997,7 +997,7 @@ print_str_ln: { // print_str_ln::@1 __b1: // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] print_ln_from___b1: jsr print_ln jmp __breturn @@ -1034,7 +1034,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char -- call_phi_near + // [30] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -1253,7 +1253,7 @@ main: { // main::@1 __b1: // game_ready() - // [2] call game_ready -- call_phi_near + // [2] call game_ready jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 // main::@4 @@ -1275,7 +1275,7 @@ main: { // [19] phi from main::@3 to print_str_ln [phi:main::@3->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -1332,7 +1332,7 @@ game_ready: { // [19] phi from game_ready::@1 to print_str_ln [phi:game_ready::@1->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -1366,13 +1366,13 @@ print_str_ln: { // print_str(str) // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] // print_str_ln::@1 // print_ln() // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] jsr print_ln // print_str_ln::@return // } @@ -1405,7 +1405,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char -- call_phi_near + // [30] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/typedef-2.log b/src/test/ref/typedef-2.log index b687fafe3..b0794ff9f 100644 --- a/src/test/ref/typedef-2.log +++ b/src/test/ref/typedef-2.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -234,7 +234,7 @@ __start: { sta.z ptr+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/typedef-4.log b/src/test/ref/typedef-4.log index 6f11f1843..a7149e8a3 100644 --- a/src/test/ref/typedef-4.log +++ b/src/test/ref/typedef-4.log @@ -143,7 +143,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -219,7 +219,7 @@ __start: { sta.z v // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index e8c0b9553..178f9f3fd 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -1214,28 +1214,28 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testUnsigned -- call_phi_near + // [1] call testUnsigned jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testUnsignedVals -- call_phi_near + // [3] call testUnsignedVals jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [5] call testSigned -- call_phi_near + // [5] call testSigned jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testSignedVals -- call_phi_near + // [7] call testSignedVals jsr testSignedVals jmp __breturn // main::@return @@ -1547,22 +1547,22 @@ Score: 336 // main main: { // testUnsigned() - // [1] call testUnsigned -- call_phi_near + // [1] call testUnsigned jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testUnsignedVals() - // [3] call testUnsignedVals -- call_phi_near + // [3] call testUnsignedVals jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testSigned() - // [5] call testSigned -- call_phi_near + // [5] call testSigned jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testSignedVals() - // [7] call testSignedVals -- call_phi_near + // [7] call testSignedVals jsr testSignedVals // main::@return // } diff --git a/src/test/ref/union-7.log b/src/test/ref/union-7.log index 7c32c5599..03cd69c4e 100644 --- a/src/test/ref/union-7.log +++ b/src/test/ref/union-7.log @@ -264,7 +264,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print jmp __b1 @@ -280,7 +280,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -387,7 +387,7 @@ main: { bne !- // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print // main::@1 @@ -401,7 +401,7 @@ main: { bne !- // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/union-8.log b/src/test/ref/union-8.log index 719799d32..2293bd594 100644 --- a/src/test/ref/union-8.log +++ b/src/test/ref/union-8.log @@ -262,7 +262,7 @@ main: { // [1] call data // [8] phi from main to data [phi:main->data] data_from_main: - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 lda #<$1234 sta.z data.i lda #>$1234 @@ -284,7 +284,7 @@ main: { // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] data_from___b1: - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 lda #<$5678 sta.z data.i lda #>$5678 @@ -384,7 +384,7 @@ main: { // union Data d1 = data(0x1234) // [1] call data // [8] phi from main to data [phi:main->data] - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 lda #<$1234 sta.z data.i lda #>$1234 @@ -406,7 +406,7 @@ main: { // union Data d2 = data(0x5678) // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 lda #<$5678 sta.z data.i lda #>$5678 diff --git a/src/test/ref/var-register-zp-3.log b/src/test/ref/var-register-zp-3.log index 6d05b64b9..7515037a5 100644 --- a/src/test/ref/var-register-zp-3.log +++ b/src/test/ref/var-register-zp-3.log @@ -351,7 +351,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 lda #msg @@ -370,7 +370,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 lda #msg1 @@ -421,7 +421,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char -- call_phi_near + // [12] call print_char jsr print_char jmp __b3 // print2::@3 @@ -534,7 +534,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 lda #msg @@ -550,7 +550,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 lda #msg1 @@ -599,7 +599,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char -- call_phi_near + // [12] call print_char jsr print_char // print2::@3 // j += 2 diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index c188609ed..104745bbf 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -340,7 +340,7 @@ main: { adc.z x // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -494,7 +494,7 @@ main: { // print(y, val1) // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( byte a: 0..100 ) diff --git a/src/test/ref/varmodel-ma_mem-3.log b/src/test/ref/varmodel-ma_mem-3.log index 1acef1711..d685aab73 100644 --- a/src/test/ref/varmodel-ma_mem-3.log +++ b/src/test/ref/varmodel-ma_mem-3.log @@ -248,7 +248,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call model_ma_mem -- call_phi_near + // [1] call model_ma_mem jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -256,7 +256,7 @@ main: { // main::@1 __b1: // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] model_ssa_zp_from___b1: jsr model_ssa_zp jmp __breturn @@ -413,13 +413,13 @@ Score: 988 // main main: { // model_ma_mem() - // [1] call model_ma_mem -- call_phi_near + // [1] call model_ma_mem jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // model_ssa_zp() // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] jsr model_ssa_zp // main::@return // } diff --git a/src/test/ref/varmodel-mem-1.log b/src/test/ref/varmodel-mem-1.log index f7fb80684..b7d15ea15 100644 --- a/src/test/ref/varmodel-mem-1.log +++ b/src/test/ref/varmodel-mem-1.log @@ -306,7 +306,7 @@ main: { // [17] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy jsr sum // [5] sum::return#0 = sum::return#2 jmp __b2 @@ -321,7 +321,7 @@ main: { // [17] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy jsr sum // [10] sum::return#1 = sum::return#2 jmp __b3 @@ -453,7 +453,7 @@ main: { // [4] call sum // [17] phi from main::@1 to sum [phi:main::@1->sum] // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy jsr sum // sum(i,i) // [5] sum::return#0 = sum::return#2 @@ -466,7 +466,7 @@ main: { // [9] call sum // [17] phi from main::@2 to sum [phi:main::@2->sum] // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy jsr sum // sum(i,i) // [10] sum::return#1 = sum::return#2 diff --git a/src/test/ref/void-parameter.log b/src/test/ref/void-parameter.log index bb2e46799..874323b60 100644 --- a/src/test/ref/void-parameter.log +++ b/src/test/ref/void-parameter.log @@ -204,7 +204,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -215,7 +215,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -225,7 +225,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -300,7 +300,7 @@ main: { // print() // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -308,14 +308,14 @@ main: { // print() // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print() // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/volatile-0.log b/src/test/ref/volatile-0.log index 94f5e8e54..d95bbac39 100644 --- a/src/test/ref/volatile-0.log +++ b/src/test/ref/volatile-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -240,7 +240,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/volatile-2.log b/src/test/ref/volatile-2.log index ededfb26d..49b880883 100644 --- a/src/test/ref/volatile-2.log +++ b/src/test/ref/volatile-2.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -278,7 +278,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index 9a71eb20b..cac577834 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -1349,7 +1349,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near + // [6] phi from main to initscreen [phi:main->initscreen] initscreen_from_main: jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -1359,7 +1359,7 @@ main: { // main::@1 __b1: // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near + // [12] phi from main::@1 to render [phi:main::@1->render] render_from___b1: jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1367,7 +1367,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call animate -- call_phi_near + // [5] call animate jsr animate jmp __b1_from___b2 } @@ -1452,7 +1452,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] findcol_from___b2: jsr findcol // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx @@ -1976,19 +1976,19 @@ Score: 1568620 main: { // initscreen() // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near + // [6] phi from main to initscreen [phi:main->initscreen] jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // render() // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near + // [12] phi from main::@1 to render [phi:main::@1->render] jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animate() - // [5] call animate -- call_phi_near + // [5] call animate jsr animate jmp __b1 } @@ -2065,7 +2065,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] jsr findcol // byte col = findcol(x, y) // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/weeip-bbslist.log b/src/test/ref/weeip-bbslist.log index 943137694..b8f240724 100644 --- a/src/test/ref/weeip-bbslist.log +++ b/src/test/ref/weeip-bbslist.log @@ -4093,14 +4093,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -4135,7 +4135,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4176,7 +4176,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -4188,7 +4188,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -4234,7 +4234,7 @@ main: { // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] printf_string_from___b2: - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4249,7 +4249,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4268,7 +4268,7 @@ main: { // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] printf_string_from___b4: - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4283,7 +4283,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4300,7 +4300,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] printf_uint_from___b6: jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -4316,7 +4316,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4467,7 +4467,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4493,7 +4493,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return @@ -4559,7 +4559,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: jsr utoa jmp __b2 @@ -4569,7 +4569,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4598,7 +4598,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4617,7 +4617,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4633,7 +4633,7 @@ cscroll: { memset_from___b3: // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4649,7 +4649,7 @@ cscroll: { memset_from___b4: // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4787,7 +4787,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [115] utoa_append::return#0 = utoa_append::value#2 @@ -4843,7 +4843,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -5622,11 +5622,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -5655,7 +5655,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -5694,7 +5694,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -5705,7 +5705,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -5749,7 +5749,7 @@ main: { sta.z printf_string.str+1 // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5778,7 +5778,7 @@ main: { sta.z printf_string.str+1 // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5790,7 +5790,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5806,7 +5806,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -5818,7 +5818,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -5970,7 +5970,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll // cputln::@return // } @@ -5993,7 +5993,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } @@ -6056,7 +6056,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6064,7 +6064,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] jsr printf_number_buffer // printf_uint::@return // } @@ -6089,7 +6089,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -6105,7 +6105,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -6118,7 +6118,7 @@ cscroll: { // [136] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6131,7 +6131,7 @@ cscroll: { // [136] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -6267,7 +6267,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [115] utoa_append::return#0 = utoa_append::value#2 @@ -6317,7 +6317,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/weeip-checksum.log b/src/test/ref/weeip-checksum.log index d1766bac7..000ab670d 100644 --- a/src/test/ref/weeip-checksum.log +++ b/src/test/ref/weeip-checksum.log @@ -729,7 +729,7 @@ main: { // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] add_checksum_from_main: - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -746,7 +746,7 @@ main: { // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] add_checksum_from___b1: - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -763,7 +763,7 @@ main: { // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] add_checksum_from___b2: - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 lda #<$3456 sta.z add_checksum.v lda #>$3456 @@ -991,7 +991,7 @@ main: { // add_checksum(0x1234) // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -1007,7 +1007,7 @@ main: { // add_checksum(0x2345) // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -1023,7 +1023,7 @@ main: { // add_checksum(0x3456) // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 lda #<$3456 sta.z add_checksum.v lda #>$3456 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index 7010c4f71..cb6bee255 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -238,7 +238,7 @@ main: { __b1: // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy -- call_phi_near + // [3] call move_enemy jsr move_enemy jmp __b2 // main::@2 @@ -344,7 +344,7 @@ main: { // move_enemy(i) // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy -- call_phi_near + // [3] call move_enemy jsr move_enemy // main::@2 // for(byte i:0..5) diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index 58a5e6075..c0c2ed378 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -323,28 +323,28 @@ main: { // [4] *(SCREEN+OFFSET_SPRITE_PTRS) = (char)SPRITE/$40 -- _deref_pbuc1=vbuc2 lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS - // [5] call saveZeropage -- call_phi_near + // [5] call saveZeropage jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [7] call sinZeropage -- call_phi_near + // [7] call sinZeropage jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [9] call animSprite -- call_phi_near + // [9] call animSprite jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [11] call restoreZeropage -- call_phi_near + // [11] call restoreZeropage jsr restoreZeropage jmp __breturn // main::@return @@ -541,22 +541,22 @@ main: { lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS // saveZeropage() - // [5] call saveZeropage -- call_phi_near + // [5] call saveZeropage jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // sinZeropage() - // [7] call sinZeropage -- call_phi_near + // [7] call sinZeropage jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animSprite() - // [9] call animSprite -- call_phi_near + // [9] call animSprite jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // restoreZeropage() - // [11] call restoreZeropage -- call_phi_near + // [11] call restoreZeropage jsr restoreZeropage // main::@return // } diff --git a/src/test/ref/zp-reserve-coalesce-problem.log b/src/test/ref/zp-reserve-coalesce-problem.log index c32198dec..8eb06440f 100644 --- a/src/test/ref/zp-reserve-coalesce-problem.log +++ b/src/test/ref/zp-reserve-coalesce-problem.log @@ -663,7 +663,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call benchmarkCountdownFor -- call_phi_near + // [1] call benchmarkCountdownFor jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -671,7 +671,7 @@ main: { // main::@1 __b1: // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] benchmarkLandscape_from___b1: jsr benchmarkLandscape jmp __breturn @@ -1022,13 +1022,13 @@ Score: 649273 // main main: { // benchmarkCountdownFor() - // [1] call benchmarkCountdownFor -- call_phi_near + // [1] call benchmarkCountdownFor jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // benchmarkLandscape() // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] jsr benchmarkLandscape // main::@return // } diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index 9e7ddaf99..93b37706c 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -440,7 +440,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum -- call_phi_near + // [5] call sum jsr sum // [6] sum::return#0 = sum::return#1 jmp __b2 @@ -460,7 +460,7 @@ main: { inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [12] call sum2 -- call_phi_near + // [12] call sum2 jsr sum2 // [13] sum2::return#0 = sum2::return#1 jmp __b3 @@ -630,7 +630,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum -- call_phi_near + // [5] call sum jsr sum // [6] sum::return#0 = sum::return#1 // main::@2 @@ -649,7 +649,7 @@ main: { inx inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 - // [12] call sum2 -- call_phi_near + // [12] call sum2 jsr sum2 // [13] sum2::return#0 = sum2::return#1 // main::@3 From 2b1bc3c11df9bd57f7ebd77fffc805cddabf256f Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 16:00:52 +0200 Subject: [PATCH 42/50] Increased complexity of examples. Fixed A-clobber problems. --- .../call_phi_close_cx16_ram.asm | 6 +- .../call_phi_close_cx16_rom.asm | 6 +- .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/call-banked-phi-case-1-near-0.c | 1 + src/test/kc/call-banked-phi-case-1-near-1.c | 5 +- src/test/kc/call-banked-phi-case-2-close-0.c | 4 +- src/test/kc/call-banked-phi-case-2-close-1.c | 9 +- src/test/kc/call-banked-phi-case-3-near-0.c | 6 +- src/test/kc/call-banked-phi-case-3-near-1.c | 5 +- src/test/kc/call-banked-phi-case-4-near-0.c | 6 +- src/test/kc/call-banked-phi-case-4-near-1.c | 8 +- src/test/kc/call-banked-phi-case-5-far-0.c | 5 +- src/test/kc/call-banked-phi-case-5-far-1.c | 8 +- src/test/kc/call-banked-phi-case-6-close-0.c | 5 +- src/test/kc/call-banked-phi-case-6-close-1.c | 8 +- .../banking/cx16-banking-recursive-near.c | 38 -- .../kc/examples/cx16/banking/cx16-banking.c | 1 + .../ref/call-banked-phi-case-1-near-0.asm | 22 +- .../ref/call-banked-phi-case-1-near-0.cfg | 22 +- .../ref/call-banked-phi-case-1-near-0.log | 259 ++++++--- .../ref/call-banked-phi-case-1-near-0.sym | 17 +- .../ref/call-banked-phi-case-1-near-1.asm | 31 +- .../ref/call-banked-phi-case-1-near-1.cfg | 43 +- .../ref/call-banked-phi-case-1-near-1.log | 467 +++++++++++----- .../ref/call-banked-phi-case-1-near-1.sym | 33 +- .../ref/call-banked-phi-case-2-close-0.asm | 39 +- .../ref/call-banked-phi-case-2-close-0.cfg | 22 +- .../ref/call-banked-phi-case-2-close-0.log | 300 +++++++--- .../ref/call-banked-phi-case-2-close-0.sym | 17 +- .../ref/call-banked-phi-case-2-close-1.asm | 39 +- .../ref/call-banked-phi-case-2-close-1.cfg | 22 +- .../ref/call-banked-phi-case-2-close-1.log | 300 +++++++--- .../ref/call-banked-phi-case-2-close-1.sym | 17 +- .../ref/call-banked-phi-case-3-near-0.asm | 49 +- .../ref/call-banked-phi-case-3-near-0.cfg | 43 +- .../ref/call-banked-phi-case-3-near-0.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-3-near-0.sym | 33 +- .../ref/call-banked-phi-case-3-near-1.asm | 49 +- .../ref/call-banked-phi-case-3-near-1.cfg | 43 +- .../ref/call-banked-phi-case-3-near-1.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-3-near-1.sym | 33 +- .../ref/call-banked-phi-case-4-near-0.asm | 49 +- .../ref/call-banked-phi-case-4-near-0.cfg | 43 +- .../ref/call-banked-phi-case-4-near-0.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-4-near-0.sym | 33 +- .../ref/call-banked-phi-case-4-near-1.asm | 49 +- .../ref/call-banked-phi-case-4-near-1.cfg | 43 +- .../ref/call-banked-phi-case-4-near-1.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-4-near-1.sym | 33 +- src/test/ref/call-banked-phi-case-5-far-0.asm | 51 +- src/test/ref/call-banked-phi-case-5-far-0.cfg | 43 +- src/test/ref/call-banked-phi-case-5-far-0.log | 511 +++++++++++------ src/test/ref/call-banked-phi-case-5-far-0.sym | 33 +- src/test/ref/call-banked-phi-case-5-far-1.asm | 51 +- src/test/ref/call-banked-phi-case-5-far-1.cfg | 43 +- src/test/ref/call-banked-phi-case-5-far-1.log | 511 +++++++++++------ src/test/ref/call-banked-phi-case-5-far-1.sym | 33 +- .../ref/call-banked-phi-case-6-close-0.asm | 55 +- .../ref/call-banked-phi-case-6-close-0.cfg | 43 +- .../ref/call-banked-phi-case-6-close-0.log | 523 +++++++++++++----- .../ref/call-banked-phi-case-6-close-0.sym | 33 +- .../ref/call-banked-phi-case-6-close-1.asm | 55 +- .../ref/call-banked-phi-case-6-close-1.cfg | 43 +- .../ref/call-banked-phi-case-6-close-1.log | 523 +++++++++++++----- .../ref/call-banked-phi-case-6-close-1.sym | 33 +- 65 files changed, 4923 insertions(+), 1965 deletions(-) delete mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm index fda09c03e..87678c012 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -1,7 +1,11 @@ +sta $ff lda $0 pha lda #{c1} sta $0 +lda $ff jsr {la1} +sta $ff pla -sta $0 \ No newline at end of file +sta $0 +lda $ff \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm index 6d0c8e9c2..5eb46e849 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -1,7 +1,11 @@ +sta $ff lda $1 pha lda #{c1} sta $1 +lda $ff jsr {la1} +sta $ff pla -sta $1 \ No newline at end of file +sta $1 +lda $ff \ No newline at end of file diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 95ae83112..7b2bc53a8 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -767,6 +767,11 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("examples/cx16/cx16-rasterbars.c"); } + //@Test + //public void testCx16Banking() throws IOException { + // compileAndCompare("examples/cx16/banking/cx16-banking.c"); + //} + @Test public void testMega65Camelot1536Dots() throws IOException { compileAndCompare("examples/mega65/camelot-1536dots.c"); diff --git a/src/test/kc/call-banked-phi-case-1-near-0.c b/src/test/kc/call-banked-phi-case-1-near-0.c index 090483c52..07b4a9513 100644 --- a/src/test/kc/call-banked-phi-case-1-near-0.c +++ b/src/test/kc/call-banked-phi-case-1-near-0.c @@ -32,6 +32,7 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // near call + SCREEN[1] = plus('1', 6); // near call } #pragma code_seg(Code) diff --git a/src/test/kc/call-banked-phi-case-1-near-1.c b/src/test/kc/call-banked-phi-case-1-near-1.c index e33afe4ea..7b5b79ef6 100644 --- a/src/test/kc/call-banked-phi-case-1-near-1.c +++ b/src/test/kc/call-banked-phi-case-1-near-1.c @@ -32,14 +32,15 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // near call + SCREEN[1] = plus('1', 6); // near call } #pragma code_seg(Code) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(Code) -char min(char a, char b) { +char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-2-close-0.c b/src/test/kc/call-banked-phi-case-2-close-0.c index b82015898..ed836b407 100644 --- a/src/test/kc/call-banked-phi-case-2-close-0.c +++ b/src/test/kc/call-banked-phi-case-2-close-0.c @@ -33,10 +33,10 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram,1) char plus(char a, char b) { return a+b; -} - +} \ No newline at end of file diff --git a/src/test/kc/call-banked-phi-case-2-close-1.c b/src/test/kc/call-banked-phi-case-2-close-1.c index 86512ae43..038007c95 100644 --- a/src/test/kc/call-banked-phi-case-2-close-1.c +++ b/src/test/kc/call-banked-phi-case-2-close-1.c @@ -28,21 +28,16 @@ #pragma link("call-banked-phi.ld") - char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { return a+b; -} - -#pragma code_seg(Code) -#pragma nobank - - +} \ No newline at end of file diff --git a/src/test/kc/call-banked-phi-case-3-near-0.c b/src/test/kc/call-banked-phi-case-3-near-0.c index 30229c425..76812ead5 100644 --- a/src/test/kc/call-banked-phi-case-3-near-0.c +++ b/src/test/kc/call-banked-phi-case-3-near-0.c @@ -33,15 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram,1) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(Code) -char min(char a, char b) { +#pragma nobank +char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c index 2743d4b5c..25bce37f7 100644 --- a/src/test/kc/call-banked-phi-case-3-near-1.c +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -33,17 +33,18 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(Code) #pragma nobank -char min(char a, char b) { +char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-4-near-0.c b/src/test/kc/call-banked-phi-case-4-near-0.c index 2bf1f4c8a..5c7ffc1f0 100644 --- a/src/test/kc/call-banked-phi-case-4-near-0.c +++ b/src/test/kc/call-banked-phi-case-4-near-0.c @@ -28,20 +28,20 @@ #pragma link("call-banked-phi.ld") - char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) char __bank(cx16_ram, 1) plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(RAM_Bank1) -char __bank(cx16_ram, 1) min(char a, char b) { +char __bank(cx16_ram, 1) add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-4-near-1.c b/src/test/kc/call-banked-phi-case-4-near-1.c index 369c1d675..319ac2483 100644 --- a/src/test/kc/call-banked-phi-case-4-near-1.c +++ b/src/test/kc/call-banked-phi-case-4-near-1.c @@ -33,19 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) -char min(char a, char b) { +char add(char a, char b) { return a+b; } - -#pragma code_seg(Code) -#pragma nobank diff --git a/src/test/kc/call-banked-phi-case-5-far-0.c b/src/test/kc/call-banked-phi-case-5-far-0.c index 7ae33a034..dceba3f63 100644 --- a/src/test/kc/call-banked-phi-case-5-far-0.c +++ b/src/test/kc/call-banked-phi-case-5-far-0.c @@ -33,14 +33,15 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // far call + return add(a, b); // far call } #pragma code_seg(RAM_Bank2) -__bank(cx16_ram, 2) char min(char a, char b) { +__bank(cx16_ram, 2) char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-5-far-1.c b/src/test/kc/call-banked-phi-case-5-far-1.c index 3c1e3fbc9..754dd1402 100644 --- a/src/test/kc/call-banked-phi-case-5-far-1.c +++ b/src/test/kc/call-banked-phi-case-5-far-1.c @@ -33,19 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // far call + return add(a, b); // far call } #pragma code_seg(RAM_Bank2) #pragma bank(cx16_ram, 2) -char min(char a, char b) { +char add(char a, char b) { return a+b; } - -#pragma code_seg(RAM_Bank2) -#pragma nobank diff --git a/src/test/kc/call-banked-phi-case-6-close-0.c b/src/test/kc/call-banked-phi-case-6-close-0.c index db2dc5973..8fada9193 100644 --- a/src/test/kc/call-banked-phi-case-6-close-0.c +++ b/src/test/kc/call-banked-phi-case-6-close-0.c @@ -33,14 +33,15 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // close call + return add(a, b); // close call } #pragma code_seg(ROM_Bank1) -__bank(cx16_rom, 1) char min(char a, char b) { +__bank(cx16_rom, 1) char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-6-close-1.c b/src/test/kc/call-banked-phi-case-6-close-1.c index 484ad2c06..5f8141443 100644 --- a/src/test/kc/call-banked-phi-case-6-close-1.c +++ b/src/test/kc/call-banked-phi-case-6-close-1.c @@ -33,19 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // close call + return add(a, b); // close call } #pragma code_seg(ROM_Bank1) #pragma bank(cx16_rom, 1) -char min(char a, char b) { +char add(char a, char b) { return a+b; } - -#pragma code_seg(Code) -#pragma nobank diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c b/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c deleted file mode 100644 index e1987ae9d..000000000 --- a/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @file cx16-banking-1.c - * @author your name (you@domain.com) - * @brief This program demonstrates a simple example of a banked call. - * @version 0.1 - * @date 2023-04-05 - * - * @copyright Copyright (c) 2023 - * - */ - -// The linker specification of the different segments. -#pragma var_model(mem) - -#include -#include -#include -#include - -// The target computer platform is the Commander X16, -// which implements banking in ram between 0xA0000 and 0xBFFF, -// and in ram between 0xC000 and 0xFFFF. -#pragma target(cx16) - -char __stackcall plus(char a, char b) { - if (a > 0) { - return a + plus(a - b, b); - } else { - return 0; - } -} - -void main(void) { - - char result = plus(4, 1); - printf("result = %u\n", result); -} - diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.c b/src/test/kc/examples/cx16/banking/cx16-banking.c index a9726c229..8648d45d1 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -10,6 +10,7 @@ */ // The linker specification of the different segments. +#pragma target(cx16) #pragma link("cx16-banking.ld") #pragma var_model(mem) diff --git a/src/test/ref/call-banked-phi-case-1-near-0.asm b/src/test/ref/call-banked-phi-case-1-near-0.asm index 0b157633e..9c88aba31 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.asm +++ b/src/test/ref/call-banked-phi-case-1-near-0.asm @@ -42,17 +42,29 @@ .segment Code main: { // plus('0', 7) + lda #7 + ldx #'0' jsr plus + // plus('0', 7) // SCREEN[0] = plus('0', 7) - lda #plus.return sta SCREEN + // plus('1', 6) + lda #6 + ldx #'1' + jsr plus + // plus('1', 6) + // SCREEN[1] = plus('1', 6) + // near call + sta SCREEN+1 // } rts } -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + stx.z $ff + clc + adc.z $ff + // } rts } diff --git a/src/test/ref/call-banked-phi-case-1-near-0.cfg b/src/test/ref/call-banked-phi-case-1-near-0.cfg index bfaa7082a..936abd391 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-1-near-0.cfg @@ -3,18 +3,28 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return diff --git a/src/test/ref/call-banked-phi-case-1-near-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log index 6cc252f0c..2ffa84883 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -7,27 +7,36 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + plus::$0 = plus::a#2 + plus::b#2 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return @@ -46,41 +55,53 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char main::$1 char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -89,27 +110,24 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus CALL GRAPH -Calls in [main] to plus:1 +Calls in [main] to plus:1 plus:5 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH @@ -117,43 +135,91 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return VARIABLE REGISTER WEIGHTS void main() +char main::$0 // 4.0 +char main::$1 // 4.0 char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 11.0 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ plus::return#2 ] +Allocated zp[1]:2 [ plus::a#2 ] +Allocated zp[1]:3 [ plus::b#2 ] +Allocated zp[1]:4 [ plus::return#0 ] +Allocated zp[1]:5 [ main::$0 ] +Allocated zp[1]:6 [ plus::return#1 ] +Allocated zp[1]:7 [ main::$1 ] +Allocated zp[1]:8 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ plus::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::b#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::return#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#2 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] +Uplift Scope [plus] 11: zp[1]:2 [ plus::a#2 ] 11: zp[1]:3 [ plus::b#2 ] 4: zp[1]:4 [ plus::return#0 ] 4: zp[1]:6 [ plus::return#1 ] 3.75: zp[1]:8 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] 4: zp[1]:7 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [plus] best 81 combination reg byte x [ plus::a#2 ] reg byte a [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:8 [ plus::return#2 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [main] best 69 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 69 combination +Attempting to uplift remaining variables inzp[1]:8 [ plus::return#2 ] +Uplifting [plus] best 60 combination reg byte a [ plus::return#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -204,42 +270,67 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // [2] plus::return#0 = plus::return#2 jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // [6] plus::return#1 = plus::return#2 + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff jmp __breturn // plus::@return __breturn: - // [5] return + // [12] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -247,18 +338,29 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte a [ plus::return#2 ] FINAL ASSEMBLER -Score: 24 +Score: 48 // File Comments /** @@ -309,26 +411,51 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff // plus::@return - // [5] return + // } + // [12] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-1-near-0.sym b/src/test/ref/call-banked-phi-case-1-near-0.sym index 70d3c4d1f..aad9eb173 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.sym +++ b/src/test/ref/call-banked-phi-case-1-near-0.sym @@ -1,10 +1,21 @@ __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte a [ plus::return#2 ] diff --git a/src/test/ref/call-banked-phi-case-1-near-1.asm b/src/test/ref/call-banked-phi-case-1-near-1.asm index 3f285d651..c5395e6ac 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.asm +++ b/src/test/ref/call-banked-phi-case-1-near-1.asm @@ -42,24 +42,37 @@ .segment Code main: { // plus('0', 7) + lda #7 + ldx #'0' jsr plus + // plus('0', 7) // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + lda #6 + ldx #'1' + jsr plus + // plus('1', 6) + // SCREEN[1] = plus('1', 6) + // near call + sta SCREEN+1 // } rts } -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + stx.z add.a + jsr add // } rts } -// char min(char a, char b) -min: { - .label return = plus.a+plus.b +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-1-near-1.cfg b/src/test/ref/call-banked-phi-case-1-near-1.cfg index 0ae888575..bd8833228 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-1-near-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log index 6d479c599..916bd8ab3 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.log +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,58 +175,135 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 75 combination -Uplifting [plus] best 75 combination -Uplifting [min] best 75 combination -Uplifting [] best 75 combination +Uplifting [add] best 129 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 99 combination reg byte x [ plus::a#2 ] reg byte a [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [main] best 87 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 87 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 87 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 78 combination reg byte a [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -273,81 +354,133 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // [2] plus::return#0 = plus::return#2 jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // [6] plus::return#1 = plus::return#2 + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuxx + stx.z add.a + // [12] add::b#0 = plus::b#2 + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: -Removing instruction __breturn: +Removing instruction __b1: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte a [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 36 +Score: 60 // File Comments /** @@ -398,38 +531,68 @@ Score: 36 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuxx + stx.z add.a + // [12] add::b#0 = plus::b#2 + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 // plus::@return // } - // [6] return + // [16] return rts } - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-1-near-1.sym b/src/test/ref/call-banked-phi-case-1-near-1.sym index 168bcee58..bfa554ac0 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.sym +++ b/src/test/ref/call-banked-phi-case-1-near-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte a [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index 992a24726..efdf5fdb6 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -43,25 +43,54 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #plus.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + stx.z $ff + clc + adc.z $ff + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-2-close-0.cfg b/src/test/ref/call-banked-phi-case-2-close-0.cfg index 47114a8a3..b5f3a4af5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-0.cfg @@ -3,18 +3,28 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 2fb184a72..96e2fadd5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -7,27 +7,36 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + plus::$0 = plus::a#2 + plus::b#2 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return @@ -46,41 +55,53 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -89,27 +110,24 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus CALL GRAPH -Calls in [main] to plus:1 +Calls in [main] to plus:1 plus:5 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH @@ -117,44 +135,97 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return VARIABLE REGISTER WEIGHTS void main() +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 11.0 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ plus::return#2 ] +Allocated zp[1]:2 [ plus::a#2 ] +Allocated zp[1]:3 [ plus::b#2 ] +Allocated zp[1]:4 [ plus::return#0 ] +Allocated zp[1]:5 [ main::$0 ] +Allocated zp[1]:6 [ plus::return#1 ] +Allocated zp[1]:7 [ main::$1 ] +Allocated zp[1]:8 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ plus::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::b#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::return#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#2 ] : zp[1]:8 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] +Uplift Scope [plus] 11: zp[1]:2 [ plus::a#2 ] 11: zp[1]:3 [ plus::b#2 ] 4: zp[1]:4 [ plus::return#0 ] 4: zp[1]:6 [ plus::return#1 ] 3.75: zp[1]:8 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] 4: zp[1]:7 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 78 combination -Uplifting [plus] best 78 combination -Uplifting [] best 78 combination +Uplifting [plus] best 141 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:8 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 129 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 129 combination +Attempting to uplift remaining variables inzp[1]:8 [ plus::return#2 ] +Uplifting [plus] best 126 combination reg byte x [ plus::return#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -206,50 +277,92 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax jmp __breturn // plus::@return __breturn: - // [5] return + // [12] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -257,18 +370,29 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] FINAL ASSEMBLER -Score: 42 +Score: 114 // File Comments /** @@ -320,34 +444,76 @@ Score: 42 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax // plus::@return - // [5] return + // } + // [12] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-2-close-0.sym b/src/test/ref/call-banked-phi-case-2-close-0.sym index 45d8d7108..00ee4aca5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.sym +++ b/src/test/ref/call-banked-phi-case-2-close-0.sym @@ -1,10 +1,21 @@ __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index 937d2243f..5a15ee9a6 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -43,25 +43,54 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #plus.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + stx.z $ff + clc + adc.z $ff + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-2-close-1.cfg b/src/test/ref/call-banked-phi-case-2-close-1.cfg index 47114a8a3..b5f3a4af5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-1.cfg @@ -3,18 +3,28 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 3738f423b..9f7544ae5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -7,27 +7,36 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + plus::$0 = plus::a#2 + plus::b#2 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return @@ -46,41 +55,53 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -89,27 +110,24 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus CALL GRAPH -Calls in [main] to plus:1 +Calls in [main] to plus:1 plus:5 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH @@ -117,44 +135,97 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return VARIABLE REGISTER WEIGHTS void main() +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 11.0 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ plus::return#2 ] +Allocated zp[1]:2 [ plus::a#2 ] +Allocated zp[1]:3 [ plus::b#2 ] +Allocated zp[1]:4 [ plus::return#0 ] +Allocated zp[1]:5 [ main::$0 ] +Allocated zp[1]:6 [ plus::return#1 ] +Allocated zp[1]:7 [ main::$1 ] +Allocated zp[1]:8 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ plus::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::b#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::return#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#2 ] : zp[1]:8 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] +Uplift Scope [plus] 11: zp[1]:2 [ plus::a#2 ] 11: zp[1]:3 [ plus::b#2 ] 4: zp[1]:4 [ plus::return#0 ] 4: zp[1]:6 [ plus::return#1 ] 3.75: zp[1]:8 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] 4: zp[1]:7 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 78 combination -Uplifting [plus] best 78 combination -Uplifting [] best 78 combination +Uplifting [plus] best 141 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:8 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 129 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 129 combination +Attempting to uplift remaining variables inzp[1]:8 [ plus::return#2 ] +Uplifting [plus] best 126 combination reg byte x [ plus::return#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -206,50 +277,92 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax jmp __breturn // plus::@return __breturn: - // [5] return + // [12] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -257,18 +370,29 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] FINAL ASSEMBLER -Score: 42 +Score: 114 // File Comments /** @@ -320,34 +444,76 @@ Score: 42 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax // plus::@return - // [5] return + // } + // [12] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-2-close-1.sym b/src/test/ref/call-banked-phi-case-2-close-1.sym index 45d8d7108..00ee4aca5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.sym +++ b/src/test/ref/call-banked-phi-case-2-close-1.sym @@ -1,10 +1,21 @@ __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index 36effde7d..60fa654fa 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } .segment Code -// char min(char a, char b) -min: { - .label return = plus.a+plus.b +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-3-near-0.cfg b/src/test/ref/call-banked-phi-case-3-near-0.cfg index 4a0b60f9d..f7ec35c09 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 7b0249d61..63c05360e 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-3-near-0.sym b/src/test/ref/call-banked-phi-case-3-near-0.sym index 9e4219f22..658eb6563 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.sym +++ b/src/test/ref/call-banked-phi-case-3-near-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index dc45fa7ff..9ffca6b4a 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } .segment Code -// char min(char a, char b) -min: { - .label return = plus.a+plus.b +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 4a0b60f9d..f7ec35c09 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 6409550db..7b34ab84a 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 9e4219f22..658eb6563 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index d9e6ece5d..a7a1cbbf4 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-4-near-0.cfg b/src/test/ref/call-banked-phi-case-4-near-0.cfg index 3a2aea220..bb224fbfe 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index c5c7e65c3..5532553ee 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-4-near-0.sym b/src/test/ref/call-banked-phi-case-4-near-0.sym index 09b563343..4267f6a35 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.sym +++ b/src/test/ref/call-banked-phi-case-4-near-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index 961e21569..97f10c7d0 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-4-near-1.cfg b/src/test/ref/call-banked-phi-case-4-near-1.cfg index 3a2aea220..bb224fbfe 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index fd0d233ce..4205fd77c 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-4-near-1.sym b/src/test/ref/call-banked-phi-case-4-near-1.sym index 09b563343..4267f6a35 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.sym +++ b/src/test/ref/call-banked-phi-case-4-near-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index d4144fb7c..c8603afdc 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -43,37 +43,68 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa jsr $ff6e - .byte min + .byte add .byte 2 + tax // } rts } .segment RAM_Bank2 -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-5-far-0.cfg b/src/test/ref/call-banked-phi-case-5-far-0.cfg index 1bdaac9fb..03dfaf36c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index b4699672c..d1d83e6e3 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 2) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 2) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,94 +361,163 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -414,51 +569,99 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-5-far-0.sym b/src/test/ref/call-banked-phi-case-5-far-0.sym index 7c061e559..f777cf8ef 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.sym +++ b/src/test/ref/call-banked-phi-case-5-far-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index 3f168055b..93f4f13c5 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -43,37 +43,68 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa jsr $ff6e - .byte min + .byte add .byte 2 + tax // } rts } .segment RAM_Bank2 -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-5-far-1.cfg b/src/test/ref/call-banked-phi-case-5-far-1.cfg index 1bdaac9fb..03dfaf36c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 0be8f5ff7..8844e959f 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 2) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 2) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,94 +361,163 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -414,51 +569,99 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-5-far-1.sym b/src/test/ref/call-banked-phi-case-5-far-1.sym index 7c061e559..f777cf8ef 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.sym +++ b/src/test/ref/call-banked-phi-case-5-far-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index 32a709284..160ff45fa 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -43,40 +43,77 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + txa + tax // } rts } .segment ROM_Bank1 -// char min(char a, char b) +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-6-close-0.cfg b/src/test/ref/call-banked-phi-case-6-close-0.cfg index 62e999ce1..c10c5c2f7 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index d18801d0d..b81bf7d9a 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_rom, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_rom, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,60 +175,144 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ add::return#1 ] +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 111 combination -Uplifting [plus] best 111 combination -Uplifting [min] best 111 combination -Uplifting [] best 111 combination +Uplifting [add] best 223 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte x [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 192 possible. +Uplifting [plus] best 195 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 183 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 183 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 183 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 180 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -276,97 +364,172 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] FINAL ASSEMBLER -Score: 72 +Score: 162 // File Comments /** @@ -418,54 +581,108 @@ Score: 72 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-6-close-0.sym b/src/test/ref/call-banked-phi-case-6-close-0.sym index ada067df8..26eed0f1c 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.sym +++ b/src/test/ref/call-banked-phi-case-6-close-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index 15769f0b8..89f99c527 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -43,40 +43,77 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + txa + tax // } rts } .segment ROM_Bank1 -// char min(char a, char b) +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-6-close-1.cfg b/src/test/ref/call-banked-phi-case-6-close-1.cfg index 62e999ce1..c10c5c2f7 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index ffe2cc66e..c64b16fba 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_rom, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_rom, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,60 +175,144 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ add::return#1 ] +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 111 combination -Uplifting [plus] best 111 combination -Uplifting [min] best 111 combination -Uplifting [] best 111 combination +Uplifting [add] best 223 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte x [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 192 possible. +Uplifting [plus] best 195 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 183 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 183 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 183 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 180 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -276,97 +364,172 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] FINAL ASSEMBLER -Score: 72 +Score: 162 // File Comments /** @@ -418,54 +581,108 @@ Score: 72 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-6-close-1.sym b/src/test/ref/call-banked-phi-case-6-close-1.sym index ada067df8..26eed0f1c 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.sym +++ b/src/test/ref/call-banked-phi-case-6-close-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] From 9f3ca81e6a518773efb5b256300756da0f653c07 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 20:37:37 +0200 Subject: [PATCH 43/50] Refactored proximity. --- .../AsmFragmentInstanceSpecBuilder.java | 9 +- .../signature/AsmFragmentSignature.java | 17 ++-- .../kickc/model/symbols/Procedure.java | 99 +++++-------------- .../kickc/passes/Pass4CodeGeneration.java | 16 ++- 4 files changed, 44 insertions(+), 97 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index a3ca5bddc..30afba97c 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -13,6 +13,7 @@ import dk.camelot64.kickc.model.operators.OperatorBinary; import dk.camelot64.kickc.model.operators.OperatorUnary; import dk.camelot64.kickc.model.operators.Operators; import dk.camelot64.kickc.model.statements.*; +import dk.camelot64.kickc.model.symbols.Bank; import dk.camelot64.kickc.model.symbols.Label; import dk.camelot64.kickc.model.symbols.Procedure; import dk.camelot64.kickc.model.symbols.Symbol; @@ -51,17 +52,15 @@ final public class AsmFragmentInstanceSpecBuilder { * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(Procedure.CallingDistance callingDistance, String callingConvention, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingDistance, callingConvention); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingConvention, proximity, toBank); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(callingDistance.getBankNumber())); + bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - - /** * Create a fragment instance spec factory for an interrupt routine entry * diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 509680120..4b37b89a5 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -2,6 +2,7 @@ package dk.camelot64.kickc.fragment.signature; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureLexer; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureParser; +import dk.camelot64.kickc.model.symbols.Bank; import dk.camelot64.kickc.model.symbols.Procedure; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; @@ -55,7 +56,7 @@ public interface AsmFragmentSignature { } /** - * ASM fragment signature for a conditional jump if(A) goto B. + * ASM fragment signature for a call */ class Call implements AsmFragmentSignature { @@ -72,21 +73,25 @@ public interface AsmFragmentSignature { } /** - * ASM fragment signature for a banked jsr if(A) goto B. + * ASM fragment signature for a banked call */ class CallBanked implements AsmFragmentSignature { - final private Procedure.CallingDistance callingDistance; final private String callingConvention; - public CallBanked(Procedure.CallingDistance callingDistance, String callingConvention) { - this.callingDistance = callingDistance; + final private Procedure.CallingProximity proximity; + + final private Bank toBank; + + public CallBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank) { this.callingConvention = callingConvention; + this.proximity = proximity; + this.toBank = toBank; } @Override public String getName() { - return "call_" + callingConvention.toLowerCase() + "_" + callingDistance.getFragmentName().toLowerCase(); + return "call_" + callingConvention.toLowerCase() + "_" + proximity.toString().toLowerCase() + (proximity.equals(Procedure.CallingProximity.NEAR)?"":("_"+toBank.bankArea())); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 40da8c1d2..4252fb9d6 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -65,88 +65,33 @@ public class Procedure extends Scope { this.bank = bank; } + /** The different distances between banked code, which will determine the type of call needed. */ public enum CallingProximity { - NEAR("near"), - CLOSE("close"), - FAR("far"); + /** No bank change is needed. Caller and callee are both in the same bank or in the common bank. */ + NEAR, + /** A direct bank change is needed. Caller is in the common bank or a different banking area. */ + CLOSE, + /** A trampoline bank change is needed. Caller and callee are different banks of the same banking area. */ + FAR; - public String getProximity() { - return proximity; - } - - private final String proximity; - - CallingProximity(String proximity) { - this.proximity = proximity; - } - } - - /** The method for expressing the call distance to implement banking - * - * The following variations exist related to banked calls: - * - #1 - unbanked to unbanked and no banking areas - * - #2 - unbanked to banked to any bank area - * - #3 - banked to unbanked from any bank area - * - #4 - banked to same bank in same bank area - * - #5 - banked to different bank in same bank area - * - #6 - banked to any bank between different bank areas - * - * This brings us to the call types: - * - CallingDistance.NEAR - case #1, #3, #4 - * - CallingDistance.CLOSE - case #2, #6 - * - CallingDistance.FAR - case #5 - */ - public static class CallingDistance { - - private CallingProximity proximity; - private String bankArea; - private Long bank; - - public CallingProximity getProximity() { - return proximity; - } - - public String getBankArea() { - return bankArea; - } - - public Long getBankNumber() { - return bank; - } - - - public CallingDistance(Procedure from, Procedure to) { - if (((!from.isBanked() && !to.isBanked())) || - ((from.isBanked() && !to.isBanked())) || - ((from.isBanked() && to.isBanked()) && - (from.getBankNumber() == to.getBankNumber()) && - (from.getBankArea().contentEquals(to.getBankArea())) - ) - ) { - // near call - case #1, #3, #4 - this.proximity = CallingProximity.NEAR; - this.bankArea = ""; - this.bank = 0L; + public static CallingProximity forCall(Bank from, Bank to) { + if(to==null) { + // NEAR: call to the common bank + return NEAR; + } else if(to.equals(from)) { + // NEAR: call to the same bank in the same banking area + return NEAR; + } else if(from==null) { + // CLOSE: call from common bank to any bank + return CLOSE; + } else if(!from.bankArea().equals(to.bankArea())) { + // CLOSE: from one banking area to another + return CLOSE; } else { - if ((!from.isBanked() && to.isBanked()) || - ((from.isBanked() && to.isBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) - ) { - // close call - case #2, #6 - this.proximity = CallingProximity.CLOSE; - this.bankArea = to.getBankArea(); - this.bank = to.getBankNumber(); - } else { - // far call - case #5 - this.proximity = CallingProximity.FAR; - this.bankArea = to.getBankArea(); - this.bank = to.getBankNumber(); - } + // FAR: banked to different bank in same bank area + return FAR; } } - - public String getFragmentName() { - return this.proximity.getProximity() + (this.bankArea.isEmpty() ? "" : "_" + this.bankArea); - } } /** The method for passing parameters and return value to the procedure. */ diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 1aaaa8c49..2211d4fd1 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -891,7 +891,6 @@ public class Pass4CodeGeneration { } } else if (Procedure.CallingConvention.PHI_CALL.equals(toProcedure.getCallingConvention())) { // Generate PHI transition - boolean generatedPhis = false; if (genCallPhiEntry) { ControlFlowBlock callSuccessor = getGraph().getCallSuccessor(block); if (callSuccessor != null && callSuccessor.hasPhiBlock()) { @@ -900,18 +899,17 @@ public class Pass4CodeGeneration { throw new InternalError("Error! JSR transition already generated. Must modify PhiTransitions code to ensure this does not happen."); } genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); - generatedPhis = true; } } - final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); - if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(callingDistance,"phi", call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked("phi", callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); - if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); @@ -924,8 +922,8 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); - final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); - if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); From eb69af8fe7b6f14124167854cfadcf36fe4897ee Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 20:54:22 +0200 Subject: [PATCH 44/50] Refactored calling convention. --- .../AsmFragmentInstanceSpecBuilder.java | 18 ++++++++------ .../signature/AsmFragmentSignature.java | 12 ++++------ .../kickc/model/symbols/Procedure.java | 24 +++++++++++++++---- .../kickc/passes/Pass4CodeGeneration.java | 2 +- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 30afba97c..280c4811d 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -44,17 +44,21 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a subroutine call + * Create a fragment instance spec factory for a banked call * - * @param callingDistance The class expressing the distance of the call: "near", "close", "far" plus bankArea and bank information calculated from the from and to procedure. - * @param callingConvention The string expressing the calling convention supported by the fragment. - * @param procedureName The full name of the procedure. - * @param program The program + * @param callingConvention The calling convention + * @param proximity The calling distance of the call + * @param toBank The bank of the procedure being called + * @param procedureName The full name of the procedure being called. + * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure.CallingConvention callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingConvention, proximity, toBank); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked( + callingConvention.getShortName(), + proximity.toString(), + (proximity.equals(Procedure.CallingProximity.NEAR)?null:toBank.bankArea())); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); bindings.bind("la1", new LabelRef(procedureName)); diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 4b37b89a5..1a4a3f596 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -2,8 +2,6 @@ package dk.camelot64.kickc.fragment.signature; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureLexer; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureParser; -import dk.camelot64.kickc.model.symbols.Bank; -import dk.camelot64.kickc.model.symbols.Procedure; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -79,19 +77,19 @@ public interface AsmFragmentSignature { final private String callingConvention; - final private Procedure.CallingProximity proximity; + final private String proximity; - final private Bank toBank; + final private String toBankArea; - public CallBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank) { + public CallBanked(String callingConvention, String proximity, String toBankArea) { this.callingConvention = callingConvention; this.proximity = proximity; - this.toBank = toBank; + this.toBankArea = toBankArea; } @Override public String getName() { - return "call_" + callingConvention.toLowerCase() + "_" + proximity.toString().toLowerCase() + (proximity.equals(Procedure.CallingProximity.NEAR)?"":("_"+toBank.bankArea())); + return "call_" + callingConvention + "_" + proximity + ((toBankArea==null)?"":("_"+toBankArea)); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 4252fb9d6..ac2599c55 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -74,6 +74,7 @@ public class Procedure extends Scope { /** A trampoline bank change is needed. Caller and callee are different banks of the same banking area. */ FAR; + public static CallingProximity forCall(Bank from, Bank to) { if(to==null) { // NEAR: call to the common bank @@ -92,29 +93,42 @@ public class Procedure extends Scope { return FAR; } } + + @Override + public String toString() { + return name().toLowerCase(); + } + } /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { /** Parameters and return value handled through PHI-transitions. */ - PHI_CALL("__phicall"), + PHI_CALL("__phicall", "phi"), /** Parameters and return value over the stack. */ - STACK_CALL("__stackcall"), + STACK_CALL("__stackcall", "stack"), /** Parameters and return value handled through shared variables. */ - VAR_CALL("__varcall"), + VAR_CALL("__varcall", "var"), /** Intrinsic calling. Will be converted to intrinsic ASM late in the compile. */ - INTRINSIC_CALL("__intrinsiccall"); + INTRINSIC_CALL("__intrinsiccall", "intrinsic"); private final String name; - CallingConvention(String name) { + private final String shortName; + + CallingConvention(String name, String shortName) { this.name = name; + this.shortName = shortName; } public String getName() { return name; } + public String getShortName() { + return shortName; + } + /** Get a calling convention by name. */ public static CallingConvention getCallingConvension(String name) { for(CallingConvention value : CallingConvention.values()) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 2211d4fd1..81fefaad9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -905,7 +905,7 @@ public class Pass4CodeGeneration { if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked("phi", callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(Procedure.CallingConvention.PHI_CALL, callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); From 8c7a144579979bd2d0eb053e8f2ff463dc7f9ada Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 21:07:16 +0200 Subject: [PATCH 45/50] Refactored calling distance. --- .../AsmFragmentInstanceSpecBuilder.java | 17 ++++++++--------- .../signature/AsmFragmentSignature.java | 8 ++++---- .../kickc/model/symbols/Procedure.java | 17 ++++++++--------- .../kickc/passes/Pass4CodeGeneration.java | 14 +++++++------- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 280c4811d..a3dc6c1c9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -46,22 +46,21 @@ final public class AsmFragmentInstanceSpecBuilder { /** * Create a fragment instance spec factory for a banked call * - * @param callingConvention The calling convention - * @param proximity The calling distance of the call - * @param toBank The bank of the procedure being called - * @param procedureName The full name of the procedure being called. + * @param toProcedure The procedure being called + * @param callingDistance The calling distance of the call * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(Procedure.CallingConvention callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure toProcedure, Procedure.CallingDistance callingDistance, Program program) { + final Bank toBank = toProcedure.getBank(); AsmFragmentBindings bindings = new AsmFragmentBindings(program); AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked( - callingConvention.getShortName(), - proximity.toString(), - (proximity.equals(Procedure.CallingProximity.NEAR)?null:toBank.bankArea())); + toProcedure.getCallingConvention().getShortName(), + callingDistance.toString(), + (callingDistance.equals(Procedure.CallingDistance.NEAR)?null:toBank.bankArea())); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); - bindings.bind("la1", new LabelRef(procedureName)); + bindings.bind("la1", new LabelRef(toProcedure.getFullName())); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 1a4a3f596..16c8b76a9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -77,19 +77,19 @@ public interface AsmFragmentSignature { final private String callingConvention; - final private String proximity; + final private String callingDistance; final private String toBankArea; - public CallBanked(String callingConvention, String proximity, String toBankArea) { + public CallBanked(String callingConvention, String callingDistance, String toBankArea) { this.callingConvention = callingConvention; - this.proximity = proximity; + this.callingDistance = callingDistance; this.toBankArea = toBankArea; } @Override public String getName() { - return "call_" + callingConvention + "_" + proximity + ((toBankArea==null)?"":("_"+toBankArea)); + return "call_" + callingConvention + "_" + callingDistance + ((toBankArea==null)?"":("_"+toBankArea)); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index ac2599c55..ab3b78f0f 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -33,7 +33,7 @@ public class Procedure extends Scope { private List comments; /** Reserved zeropage addresses. */ private List reservedZps; - /** The data and code segment to put the procedure into. When null the procedure is not assigned to the code segment. */ + /** The code segment to put the procedure code into. When null the procedure is not assigned to the code segment. */ private String segmentCode; /** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */ private final List constructorRefs; @@ -43,7 +43,7 @@ public class Procedure extends Scope { private StatementSource definitionSource; /** * The bank that the procedure code is placed in. - * Used to decide whether to produce near, close or far call when generating code. + * Used to decide whether to produce near, close or far call code when generating calls. * If null, the procedure is in a common bank (always visible) and all calls will be near. */ private Bank bank; @@ -65,17 +65,16 @@ public class Procedure extends Scope { this.bank = bank; } - /** The different distances between banked code, which will determine the type of call needed. */ - public enum CallingProximity { - /** No bank change is needed. Caller and callee are both in the same bank or in the common bank. */ + /** The bank distance between a caller and callee, which will determine the type of call needed. */ + public enum CallingDistance { + /** Caller and callee are both in the same bank or in the common bank. No bank change is needed. */ NEAR, - /** A direct bank change is needed. Caller is in the common bank or a different banking area. */ + /** Caller is in the common bank or a different banking area. A direct bank change is needed. */ CLOSE, - /** A trampoline bank change is needed. Caller and callee are different banks of the same banking area. */ + /** Caller and callee are different banks of the same banking area. A trampoline bank change is needed. */ FAR; - - public static CallingProximity forCall(Bank from, Bank to) { + public static CallingDistance forCall(Bank from, Bank to) { if(to==null) { // NEAR: call to the common bank return NEAR; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 81fefaad9..9cf76b0d2 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -901,15 +901,15 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { + final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(Procedure.CallingConvention.PHI_CALL, callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(toProcedure, callingDistance, program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { + final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); @@ -922,8 +922,8 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); - final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { + final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); From 8b7afa4ad0f4458a387e186169053ef413e3b26f Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 22:04:23 +0200 Subject: [PATCH 46/50] Procedure.bank is now never null. --- .../camelot64/kickc/model/symbols/Bank.java | 17 ++++++- .../kickc/model/symbols/Procedure.java | 34 +++---------- .../camelot64/kickc/model/symbols/Scope.java | 2 +- .../Pass0GenerateStatementSequence.java | 18 +++---- .../kickc/passes/Pass4CodeGeneration.java | 51 +++++++++---------- 5 files changed, 57 insertions(+), 65 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java index ce1ace201..446f08eb6 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java @@ -116,8 +116,23 @@ public record Bank(String bankArea, Long bankNumber) { public Bank { } + /** The common/shared bank which is always visible. */ + public static Bank COMMON = new Bank("", 0L); + + /** + * Is this the common/shared bank which is always visible. + * @return True if this is the common bank + */ + public boolean isCommon() { + return COMMON.equals(this); + } + @Override public String toString() { - return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; + if(isCommon()) { + return ""; + } else { + return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; + } } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index ab3b78f0f..3bcedd63e 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -44,11 +44,9 @@ public class Procedure extends Scope { /** * The bank that the procedure code is placed in. * Used to decide whether to produce near, close or far call code when generating calls. - * If null, the procedure is in a common bank (always visible) and all calls will be near. */ private Bank bank; - /** The names of all legal intrinsic procedures. */ final public static List INTRINSIC_PROCEDURES = Arrays.asList( Pass1PrintfIntrinsicRewrite.INTRINSIC_PRINTF_NAME, @@ -62,7 +60,7 @@ public class Procedure extends Scope { } public void setBank(Bank bank) { - this.bank = bank; + this.bank = Objects.requireNonNull(bank); } /** The bank distance between a caller and callee, which will determine the type of call needed. */ @@ -75,13 +73,13 @@ public class Procedure extends Scope { FAR; public static CallingDistance forCall(Bank from, Bank to) { - if(to==null) { + if(to.isCommon()) { // NEAR: call to the common bank return NEAR; } else if(to.equals(from)) { // NEAR: call to the same bank in the same banking area return NEAR; - } else if(from==null) { + } else if(from.isCommon()) { // CLOSE: call from common bank to any bank return CLOSE; } else if(!from.bankArea().equals(to.bankArea())) { @@ -146,10 +144,10 @@ public class Procedure extends Scope { super(name, parentScope, segmentData); this.procedureType = procedureType; this.declaredInline = false; - this.bank = bank; + this.bank = Objects.requireNonNull(bank); this.interruptType = null; this.comments = new ArrayList<>(); - this.segmentCode = segmentCode; + this.segmentCode = Objects.requireNonNull(segmentCode); this.callingConvention = callingConvention; this.constructorRefs = new ArrayList<>(); this.isConstructor = false; @@ -260,24 +258,6 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public boolean isBanked() { - return bank != null; - } - - public Long getBankNumber() { - if(bank != null) - return bank.bankNumber(); - else - return 0L; - } - - public String getBankArea() { - if(bank != null) - return bank.bankArea(); - else - return ""; - } - public String getInterruptType() { return interruptType; } @@ -338,9 +318,7 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } - if(isBanked()) { - res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBankNumber()).append(") "); - } + res.append(bank.toString()); if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index b73ae4353..a4b6e0736 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -30,7 +30,7 @@ public abstract class Scope implements Symbol { this.name = name; this.parentScope = parentScope; this.symbols = new LinkedHashMap<>(); - this.segmentData = segmentData; + this.segmentData = Objects.requireNonNull(segmentData); setFullName(); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 9d4cf7357..a62082a72 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -130,7 +130,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); + initProc = new Procedure(SymbolRef.INIT_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, Bank.COMMON); initProc.setDeclaredInline(true); initProc.setParameters(new ArrayList<>()); program.getScope().add(initProc); @@ -187,7 +187,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); + final Procedure startProcedure = new Procedure(SymbolRef.START_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, Bank.COMMON); startProcedure.setParameters(new ArrayList<>()); program.getScope().add(startProcedure); final ProcedureCompilation startProcedureCompilation = program.createProcedureCompilation(startProcedure.getRef()); @@ -305,7 +305,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 0) { asm.addComment(signature.toString(), false); } - if(procedure.getBank() != null) { + if(!procedure.getBank().isCommon()) { asm.addComment(" " + procedure.getBank(), false); } } @@ -583,31 +583,30 @@ public class Pass4CodeGeneration { if (registerMainMem.getAddress() == null) { // Generate into the data segment // Set segment - // We check first the bank of the variable. Only local variables can be stored in the bank. - // Parameters must be stored in main memory. - if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { - if(scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - List parameters = procedure.getParameters(); - if (variable.isKindPhiVersion()) { - Variable master = variable.getPhiMaster(); - if (master != null) { - if (parameters.contains(master) || master.getLocalName().equals("return")) { - variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); - } - } - } - } - } - - // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. - if (variable.isKindIntermediate()) { - if (scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - variable.setDataSegment(procedure.getSegmentData()); - } - } - setCurrentSegment(variable.getDataSegment(), asm); +// // We check first the bank of the variable. Only local variables can be stored in the bank. +// // Parameters must be stored in main memory. +// if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { +// if(scope instanceof Procedure) { +// Procedure procedure = (Procedure) scope; +// List parameters = procedure.getParameters(); +// if (variable.isKindPhiVersion()) { +// Variable master = variable.getPhiMaster(); +// if (master != null) { +// if (parameters.contains(master) || master.getLocalName().equals("return")) { +// variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); +// } +// } +// } +// } +// } +// +// // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. +// if (variable.isKindIntermediate()) { +// if (scope instanceof Procedure) { +// Procedure procedure = (Procedure) scope; +// variable.setDataSegment(procedure.getSegmentData()); +// } +// } setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); From 606ea29132c21b3ed3bf96c470be132e2d7e6632 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 22:20:13 +0200 Subject: [PATCH 47/50] Moved calling distance to bank. --- .../AsmFragmentInstanceSpecBuilder.java | 4 +- .../dk/camelot64/kickc/model/Directive.java | 9 ++-- .../camelot64/kickc/model/symbols/Bank.java | 35 +++++++++++++ .../kickc/model/symbols/Procedure.java | 51 +++++-------------- .../dk/camelot64/kickc/parser/CParser.java | 2 +- .../kickc/passes/Pass4CodeGeneration.java | 14 ++--- 6 files changed, 62 insertions(+), 53 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index a3dc6c1c9..acd60c256 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -51,13 +51,13 @@ final public class AsmFragmentInstanceSpecBuilder { * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(Procedure toProcedure, Procedure.CallingDistance callingDistance, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure toProcedure, Bank.CallingDistance callingDistance, Program program) { final Bank toBank = toProcedure.getBank(); AsmFragmentBindings bindings = new AsmFragmentBindings(program); AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked( toProcedure.getCallingConvention().getShortName(), callingDistance.toString(), - (callingDistance.equals(Procedure.CallingDistance.NEAR)?null:toBank.bankArea())); + (callingDistance.equals(Bank.CallingDistance.NEAR)?null:toBank.bankArea())); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); bindings.bind("la1", new LabelRef(toProcedure.getFullName())); diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 850933e44..248a554e9 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -44,15 +44,12 @@ public class Directive { } /** - * Creates a new Bank which collects the necessary data to handle banking. - * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. - * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. - * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + * Bank to place code into. Used for determining call distance. */ static public class Bank extends Directive { - private String bankArea; // A bank area is a memory range that is banked on a target platform. - private Long bankNumber; // A bank is a number that defines a bank configuration in a bank area. + private String bankArea; + private Long bankNumber; public Bank(String bankArea, Long bankNumber) { super("bank" ); diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java index 446f08eb6..8c2796371 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java @@ -135,4 +135,39 @@ public record Bank(String bankArea, Long bankNumber) { return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; } } + + /** The bank distance between a caller and callee, which will determine the type of call needed. */ + public enum CallingDistance { + /** Caller and callee are both in the same bank or in the common bank. No bank change is needed. */ + NEAR, + /** Caller is in the common bank or a different banking area. A direct bank change is needed. */ + CLOSE, + /** Caller and callee are different banks of the same banking area. A trampoline bank change is needed. */ + FAR; + + public static CallingDistance forCall(Bank from, Bank to) { + if(to.isCommon()) { + // NEAR: call to the common bank + return NEAR; + } else if(to.equals(from)) { + // NEAR: call to the same bank in the same banking area + return NEAR; + } else if(from.isCommon()) { + // CLOSE: call from common bank to any bank + return CLOSE; + } else if(!from.bankArea().equals(to.bankArea())) { + // CLOSE: from one banking area to another + return CLOSE; + } else { + // FAR: banked to different bank in same bank area + return FAR; + } + } + + @Override + public String toString() { + return name().toLowerCase(); + } + + } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index 3bcedd63e..0f59f17a3 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -63,41 +63,6 @@ public class Procedure extends Scope { this.bank = Objects.requireNonNull(bank); } - /** The bank distance between a caller and callee, which will determine the type of call needed. */ - public enum CallingDistance { - /** Caller and callee are both in the same bank or in the common bank. No bank change is needed. */ - NEAR, - /** Caller is in the common bank or a different banking area. A direct bank change is needed. */ - CLOSE, - /** Caller and callee are different banks of the same banking area. A trampoline bank change is needed. */ - FAR; - - public static CallingDistance forCall(Bank from, Bank to) { - if(to.isCommon()) { - // NEAR: call to the common bank - return NEAR; - } else if(to.equals(from)) { - // NEAR: call to the same bank in the same banking area - return NEAR; - } else if(from.isCommon()) { - // CLOSE: call from common bank to any bank - return CLOSE; - } else if(!from.bankArea().equals(to.bankArea())) { - // CLOSE: from one banking area to another - return CLOSE; - } else { - // FAR: banked to different bank in same bank area - return FAR; - } - } - - @Override - public String toString() { - return name().toLowerCase(); - } - - } - /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { /** Parameters and return value handled through PHI-transitions. */ @@ -355,11 +320,23 @@ public class Procedure extends Scope { if(o == null || getClass() != o.getClass()) return false; if(!super.equals(o)) return false; Procedure procedure = (Procedure) o; - return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && Objects.equals(parameterNames, procedure.parameterNames) && Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && Objects.equals(segmentCode, procedure.segmentCode) && Objects.equals(constructorRefs, procedure.constructorRefs) && Objects.equals(definitionSource, procedure.definitionSource) && Objects.equals(bank, procedure.bank) && callingConvention == procedure.callingConvention; + return variableLengthParameterList == procedure.variableLengthParameterList && + declaredInline == procedure.declaredInline && + declaredIntrinsic == procedure.declaredIntrinsic && + isConstructor == procedure.isConstructor && + Objects.equals(procedureType, procedure.procedureType) && + Objects.equals(parameterNames, procedure.parameterNames) && + Objects.equals(interruptType, procedure.interruptType) && + Objects.equals(comments, procedure.comments) && + Objects.equals(reservedZps, procedure.reservedZps) && + Objects.equals(segmentCode, procedure.segmentCode) && + Objects.equals(constructorRefs, procedure.constructorRefs) && + Objects.equals(bank, procedure.bank) && + callingConvention == procedure.callingConvention; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, definitionSource, bank, callingConvention); + return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, bank, callingConvention); } } diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index d15b8d800..76b52a81c 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -111,7 +111,7 @@ public class CParser { */ public static final String PRAGMA_BANK = "bank"; /** - * #pragma nobank Changes the current bank to the default/common bank. + * #pragma nobank Changes the current bank to the default/common/shared bank. */ public static final String PRAGMA_NOBANK = "nobank"; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 2e441d520..0246ab25e 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -900,15 +900,15 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { + final Bank.CallingDistance callingDistance = Bank.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Bank.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(toProcedure, callingDistance, program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { + final Bank.CallingDistance callingDistance = Bank.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Bank.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); @@ -921,11 +921,11 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); - final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { + final Bank.CallingDistance callingDistance = Bank.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Bank.CallingDistance.NEAR.equals(callingDistance)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { - throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); + throw new CompileError("Call procedure not supported in banked mode " + toProcedure.toString(program)); } RValue procedureRVal = call.getProcedureRVal(); if (!(procedureRVal instanceof ProcedureRef)) { From 11c86793d3afbb22822b1acc5c3ba8c1597e98c8 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 23:25:28 +0200 Subject: [PATCH 48/50] Ensured we do not coalesce across segments. --- .../kickc/passes/Pass4CodeGeneration.java | 50 +++++++++---------- .../kickc/passes/Pass4MemoryCoalesce.java | 16 ++++++ .../kickc/test/TestProgramsFast.java | 6 +++ src/test/kc/call-banked-phi-memvars.c | 30 +++++++++++ 4 files changed, 77 insertions(+), 25 deletions(-) create mode 100644 src/test/kc/call-banked-phi-memvars.c diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 0246ab25e..8d7426a3b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -583,30 +583,30 @@ public class Pass4CodeGeneration { if (registerMainMem.getAddress() == null) { // Generate into the data segment // Set segment -// // We check first the bank of the variable. Only local variables can be stored in the bank. -// // Parameters must be stored in main memory. -// if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { -// if(scope instanceof Procedure) { -// Procedure procedure = (Procedure) scope; -// List parameters = procedure.getParameters(); -// if (variable.isKindPhiVersion()) { -// Variable master = variable.getPhiMaster(); -// if (master != null) { -// if (parameters.contains(master) || master.getLocalName().equals("return")) { -// variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); -// } -// } -// } -// } -// } -// -// // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. -// if (variable.isKindIntermediate()) { -// if (scope instanceof Procedure) { -// Procedure procedure = (Procedure) scope; -// variable.setDataSegment(procedure.getSegmentData()); -// } -// } + // We check first the bank of the variable. Only local variables can be stored in the bank. + // Parameters must be stored in main memory. + if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { + if(scope instanceof Procedure) { + Procedure procedure = (Procedure) scope; + List parameters = procedure.getParameters(); + if (variable.isKindPhiVersion()) { + Variable master = variable.getPhiMaster(); + if (master != null) { + if (parameters.contains(master) || master.getLocalName().equals("return")) { + variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); + } + } + } + } + } + + // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. + if (variable.isKindIntermediate()) { + if (scope instanceof Procedure) { + Procedure procedure = (Procedure) scope; + variable.setDataSegment(procedure.getSegmentData()); + } + } setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); @@ -925,7 +925,7 @@ public class Pass4CodeGeneration { if(Bank.CallingDistance.NEAR.equals(callingDistance)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { - throw new CompileError("Call procedure not supported in banked mode " + toProcedure.toString(program)); + throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); } RValue procedureRVal = call.getProcedureRVal(); if (!(procedureRVal instanceof ProcedureRef)) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java b/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java index c229e98fe..03c531702 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java @@ -53,6 +53,7 @@ public abstract class Pass4MemoryCoalesce extends Pass2Base { return canCoalesceNotEqual(ec1, ec2) && canCoalesceCompatible(ec1, ec2, program) && + canCoalesceSegments(ec1, ec2, program) && canCoalesceVolatile(ec1, ec2, program) && canCoalesceThreads(ec1, ec2, threadHeads, program) && canCoalesceClobber(ec1, ec2, unknownFragments, program); @@ -69,6 +70,21 @@ public abstract class Pass4MemoryCoalesce extends Pass2Base { return !ec1.equals(ec2); } + /** + * Determines if two live range equivalence classes are candidates for coalescing by ensuring they are not from different data segments. + * @param ec1 One equivalence class + * @param ec2 Another equivalence class + * @param program The program + * @return True if the two equivalence classes can be coalesced into one without problems. + */ + private static boolean canCoalesceSegments(LiveRangeEquivalenceClass ec1, LiveRangeEquivalenceClass ec2, Program program) { + final VariableRef variableRef1 = ec1.getVariables().get(0); + final String dataSegment1 = program.getScope().getVar(variableRef1).getDataSegment(); + final VariableRef variableRef2 = ec2.getVariables().get(0); + final String dataSegment2 = program.getScope().getVar(variableRef2).getDataSegment(); + return dataSegment1.equals(dataSegment2); + } + /** * Determines if two live range equivalence classes can be coalesced without cross-thread clobber. * This is possible if they are both only called from the same thread head. diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 7b2bc53a8..f85993677 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1581,6 +1581,12 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("call-banked-phi-case-6-close-1.c"); } + @Test + public void testBankedPhiMemvars() throws IOException { + compileAndCompare("call-banked-phi-memvars.c", log()); + } + + @Test public void testBankedStackCase2Close0() throws IOException { assertError("call-banked-stack-case-2-close-0.c", "Stack Call procedure not supported in banked mode"); diff --git a/src/test/kc/call-banked-phi-memvars.c b/src/test/kc/call-banked-phi-memvars.c new file mode 100644 index 000000000..420b2796f --- /dev/null +++ b/src/test/kc/call-banked-phi-memvars.c @@ -0,0 +1,30 @@ +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + +#pragma link("call-banked-phi.ld") +#pragma var_model(mem) + +int* const SCREEN = (int*)0x0400; + +#pragma code_seg(Code) +#pragma nobank +void main(void) { + for(char i=0;i<5; i++) { + SCREEN[i] = plus(100, (int)i); + SCREEN[10+i] = plus(200, (int)i); + } +} + +#pragma code_seg(RAM_Bank1) +#pragma data_seg(RAM_Bank1) +#pragma bank(cx16_ram, 1) +int plus(int a, int b) { + int r = 2; + r += a; + r += b; + r += a; + r += b; + return r; +} From 8193688eecf987e40c5efdc82d29880ecd6eaf71 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 23:26:26 +0200 Subject: [PATCH 49/50] added test refs --- src/test/ref/call-banked-phi-memvars.asm | 144 ++++ src/test/ref/call-banked-phi-memvars.cfg | 45 ++ src/test/ref/call-banked-phi-memvars.log | 800 +++++++++++++++++++++++ src/test/ref/call-banked-phi-memvars.sym | 34 + 4 files changed, 1023 insertions(+) create mode 100644 src/test/ref/call-banked-phi-memvars.asm create mode 100644 src/test/ref/call-banked-phi-memvars.cfg create mode 100644 src/test/ref/call-banked-phi-memvars.log create mode 100644 src/test/ref/call-banked-phi-memvars.sym diff --git a/src/test/ref/call-banked-phi-memvars.asm b/src/test/ref/call-banked-phi-memvars.asm new file mode 100644 index 000000000..1a15757b6 --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.asm @@ -0,0 +1,144 @@ +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + .file [name="call-banked-phi-memvars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + ldy #0 + __b1: + // for(char i=0;i<5; i++) + cpy #5 + bcc __b2 + // } + rts + __b2: + // plus(100, (int)i) + tya + sta plus.b + lda #0 + sta plus.b+1 + lda #<$64 + sta plus.a + lda #>$64 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(100, (int)i) + // SCREEN[i] = plus(100, (int)i) + tya + asl + tax + lda __1 + sta SCREEN,x + lda __1+1 + sta SCREEN+1,x + // 10+i + tya + tax + axs #-[$a] + // plus(200, (int)i) + tya + sta plus.b + lda #0 + sta plus.b+1 + lda #<$c8 + sta plus.a + lda #>$c8 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(200, (int)i) + // SCREEN[10+i] = plus(200, (int)i) + txa + asl + tax + lda __3 + sta SCREEN,x + lda __3+1 + sta SCREEN+1,x + // for(char i=0;i<5; i++) + iny + jmp __b1 + .segment Data + .label __1 = plus.return + .label __3 = plus.return +} +.segment RAM_Bank1 +// __mem() int plus(__mem() int a, __mem() int b) +// __bank(cx16_ram, 1) +plus: { + // r += a + clc + lda a + adc #<2 + sta r + lda a+1 + adc #>2 + sta r+1 + // r += b + clc + lda r + adc b + sta r + lda r+1 + adc b+1 + sta r+1 + // r += a + clc + lda r + adc a + sta r + lda r+1 + adc a+1 + sta r+1 + // r += b + lda r + clc + adc b + sta return + lda r+1 + adc b+1 + sta return+1 + // } + rts + .segment Data + b: .word 0 + return: .word 0 + .segment RAM_Bank1 + r: .word 0 + .segment Data + a: .word 0 +} diff --git a/src/test/ref/call-banked-phi-memvars.cfg b/src/test/ref/call-banked-phi-memvars.cfg new file mode 100644 index 000000000..4cb2646a1 --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.cfg @@ -0,0 +1,45 @@ + +void main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 + [1] main::i#2 = phi( main/0, main::@4/main::i#1 ) + [2] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return +main::@2: scope:[main] from main::@1 + [4] plus::b#0 = (int)main::i#2 + [5] call plus + [6] plus::return#0 = plus::return#2 + to:main::@3 +main::@3: scope:[main] from main::@2 + [7] main::$1 = plus::return#0 + [8] main::$4 = main::i#2 << 1 + [9] SCREEN[main::$4] = main::$1 + [10] main::$2 = $a + main::i#2 + [11] plus::b#1 = (int)main::i#2 + [12] call plus + [13] plus::return#1 = plus::return#2 + to:main::@4 +main::@4: scope:[main] from main::@3 + [14] main::$3 = plus::return#1 + [15] main::$5 = main::$2 << 1 + [16] SCREEN[main::$5] = main::$3 + [17] main::i#1 = ++ main::i#2 + to:main::@1 + +__bank(cx16_ram, 1) int plus(int a , int b) +plus: scope:[plus] from main::@2 main::@3 + [18] plus::b#2 = phi( main::@2/plus::b#0, main::@3/plus::b#1 ) + [18] plus::a#2 = phi( main::@2/$64, main::@3/$c8 ) + [19] plus::r#1 = 2 + plus::a#2 + [20] plus::r#2 = plus::r#1 + plus::b#2 + [21] plus::r#3 = plus::r#2 + plus::a#2 + [22] plus::return#2 = plus::r#3 + plus::b#2 + to:plus::@return +plus::@return: scope:[plus] from plus + [23] return + to:@return diff --git a/src/test/ref/call-banked-phi-memvars.log b/src/test/ref/call-banked-phi-memvars.log new file mode 100644 index 000000000..ad6a75b41 --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.log @@ -0,0 +1,800 @@ +Loading link script "call-banked-phi.ld" +Updating intermediate variable memory area to MAIN_MEMORY main::$0 +Updating intermediate variable memory area to MAIN_MEMORY main::$1 +Updating intermediate variable memory area to MAIN_MEMORY main::$2 +Updating intermediate variable memory area to MAIN_MEMORY main::$3 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@4 + main::i#2 = phi( main/main::i#0, main::@4/main::i#1 ) + main::$0 = main::i#2 < 5 + if(main::$0) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#3 = phi( main::@1/main::i#2 ) + plus::a#0 = $64 + plus::b#0 = (int)main::i#3 + call plus + plus::return#0 = plus::return#3 + to:main::@3 +main::@3: scope:[main] from main::@2 + main::i#4 = phi( main::@2/main::i#3 ) + plus::return#4 = phi( main::@2/plus::return#0 ) + main::$1 = plus::return#4 + main::$4 = main::i#4 * SIZEOF_INT + SCREEN[main::$4] = main::$1 + main::$2 = $a + main::i#4 + plus::a#1 = $c8 + plus::b#1 = (int)main::i#4 + call plus + plus::return#1 = plus::return#3 + to:main::@4 +main::@4: scope:[main] from main::@3 + main::i#5 = phi( main::@3/main::i#4 ) + plus::return#5 = phi( main::@3/plus::return#1 ) + main::$3 = plus::return#5 + main::$5 = main::$2 * SIZEOF_INT + SCREEN[main::$5] = main::$3 + main::i#1 = ++ main::i#5 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(cx16_ram, 1) int plus(int a , int b) +plus: scope:[plus] from main::@2 main::@3 + plus::b#2 = phi( main::@2/plus::b#0, main::@3/plus::b#1 ) + plus::a#2 = phi( main::@2/plus::a#0, main::@3/plus::a#1 ) + plus::r#0 = 2 + plus::r#1 = plus::r#0 + plus::a#2 + plus::r#2 = plus::r#1 + plus::b#2 + plus::r#3 = plus::r#2 + plus::a#2 + plus::r#4 = plus::r#3 + plus::b#2 + plus::return#2 = plus::r#4 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant int * const SCREEN = (int *)$400 +__constant char SIZEOF_INT = 2 +void __start() +void main() +bool main::$0 +int main::$1 +number main::$2 +int main::$3 +char main::$4 +number main::$5 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +char main::i#4 +char main::i#5 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#0 +int plus::a#1 +int plus::a#2 +int plus::b +int plus::b#0 +int plus::b#1 +int plus::b#2 +int plus::r +int plus::r#0 +int plus::r#1 +int plus::r#2 +int plus::r#3 +int plus::r#4 +int plus::return +int plus::return#0 +int plus::return#1 +int plus::return#2 +int plus::return#3 +int plus::return#4 +int plus::return#5 +int plus::return#6 + +Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 +Adding number conversion cast (snumber) $64 in plus::a#0 = $64 +Adding number conversion cast (unumber) $a in main::$2 = $a + main::i#4 +Adding number conversion cast (unumber) main::$2 in main::$2 = (unumber)$a + main::i#4 +Adding number conversion cast (snumber) $c8 in plus::a#1 = $c8 +Adding number conversion cast (unumber) main::$5 in main::$5 = main::$2 * SIZEOF_INT +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::a#0 = (snumber)$64 +Inlining cast plus::a#1 = (snumber)$c8 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (int *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast $64 +Simplifying constant integer cast $a +Simplifying constant integer cast $c8 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized signed number type (signed char) $64 +Finalized unsigned number type (char) $a +Finalized signed number type (int) $c8 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in main::$2 = $a + main::i#4 +Inferred type updated to char in main::$5 = main::$2 * SIZEOF_INT +Alias main::i#2 = main::i#3 main::i#4 main::i#5 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::r#4 plus::return#6 plus::return#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Constant plus::a#0 = $64 +Constant plus::a#1 = $c8 +Constant plus::r#0 = 2 +Successful SSA optimization Pass2ConstantIdentification +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Rewriting multiplication to use shift [6] main::$4 = main::i#2 * SIZEOF_INT +Rewriting multiplication to use shift [13] main::$5 = main::$2 * SIZEOF_INT +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::r#0 +Constant inlined main::i#0 = 0 +Constant inlined plus::a#1 = $c8 +Constant inlined plus::r#0 = 2 +Constant inlined plus::a#0 = $64 +Successful SSA optimization Pass2ConstantInlining +Eliminating unused constant SIZEOF_INT +Successful SSA optimization PassNEliminateUnusedVars +Adding NOP phi() at start of main +CALL GRAPH +Calls in [main] to plus:6 plus:14 + +Created 3 initial phi equivalence classes +Coalesced [5] plus::b#3 = plus::b#0 +Coalesced [13] plus::b#4 = plus::b#1 +Coalesced [20] main::i#6 = main::i#1 +Coalesced down to 3 phi equivalence classes +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 + [1] main::i#2 = phi( main/0, main::@4/main::i#1 ) + [2] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return +main::@2: scope:[main] from main::@1 + [4] plus::b#0 = (int)main::i#2 + [5] call plus + [6] plus::return#0 = plus::return#2 + to:main::@3 +main::@3: scope:[main] from main::@2 + [7] main::$1 = plus::return#0 + [8] main::$4 = main::i#2 << 1 + [9] SCREEN[main::$4] = main::$1 + [10] main::$2 = $a + main::i#2 + [11] plus::b#1 = (int)main::i#2 + [12] call plus + [13] plus::return#1 = plus::return#2 + to:main::@4 +main::@4: scope:[main] from main::@3 + [14] main::$3 = plus::return#1 + [15] main::$5 = main::$2 << 1 + [16] SCREEN[main::$5] = main::$3 + [17] main::i#1 = ++ main::i#2 + to:main::@1 + +__bank(cx16_ram, 1) int plus(int a , int b) +plus: scope:[plus] from main::@2 main::@3 + [18] plus::b#2 = phi( main::@2/plus::b#0, main::@3/plus::b#1 ) + [18] plus::a#2 = phi( main::@2/$64, main::@3/$c8 ) + [19] plus::r#1 = 2 + plus::a#2 + [20] plus::r#2 = plus::r#1 + plus::b#2 + [21] plus::r#3 = plus::r#2 + plus::a#2 + [22] plus::return#2 = plus::r#3 + plus::b#2 + to:plus::@return +plus::@return: scope:[plus] from plus + [23] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +int main::$1 // 11.0 +char main::$2 // 4.4 +int main::$3 // 11.0 +char main::$4 // 22.0 +char main::$5 // 22.0 +char main::i +char main::i#1 // 22.0 +char main::i#2 // 3.6666666666666665 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#2 // 67.33333333333333 +int plus::b +int plus::b#0 // 22.0 +int plus::b#1 // 22.0 +int plus::b#2 // 56.0 +int plus::r +int plus::r#1 // 202.0 +int plus::r#2 // 202.0 +int plus::r#3 // 202.0 +int plus::return +int plus::return#0 // 22.0 +int plus::return#1 // 22.0 +int plus::return#2 // 30.75 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +[ plus::a#2 ] +[ plus::b#2 plus::b#0 plus::b#1 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable main::$4 to live range equivalence class [ main::$4 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$3 to live range equivalence class [ main::$3 ] +Added variable main::$5 to live range equivalence class [ main::$5 ] +Added variable plus::r#1 to live range equivalence class [ plus::r#1 ] +Added variable plus::r#2 to live range equivalence class [ plus::r#2 ] +Added variable plus::r#3 to live range equivalence class [ plus::r#3 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ plus::a#2 ] +[ plus::b#2 plus::b#0 plus::b#1 ] +[ plus::return#0 ] +[ main::$1 ] +[ main::$4 ] +[ main::$2 ] +[ plus::return#1 ] +[ main::$3 ] +[ main::$5 ] +[ plus::r#1 ] +[ plus::r#2 ] +[ plus::r#3 ] +[ plus::return#2 ] +Allocated mem[2] [ plus::r#1 ] +Allocated mem[2] [ plus::r#2 ] +Allocated mem[2] [ plus::r#3 ] +Allocated mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] +Allocated mem[2] [ plus::a#2 ] +Allocated mem[2] [ plus::return#2 ] +Allocated mem[1] [ main::i#2 main::i#1 ] +Allocated mem[2] [ plus::return#0 ] +Allocated mem[1] [ main::$4 ] +Allocated mem[2] [ plus::return#1 ] +Allocated mem[1] [ main::$5 ] +Allocated mem[2] [ main::$1 ] +Allocated mem[2] [ main::$3 ] +Allocated mem[1] [ main::$2 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [4] plus::b#0 = (int)main::i#2 [ main::i#2 plus::b#0 ] ( [ main::i#2 plus::b#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for mem[1] [ main::i#2 main::i#1 ] +Statement [5] call plus [ main::i#2 plus::return#2 ] ( [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [6] plus::return#0 = plus::return#2 [ main::i#2 plus::return#0 ] ( [ main::i#2 plus::return#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [7] main::$1 = plus::return#0 [ main::i#2 main::$1 ] ( [ main::i#2 main::$1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [8] main::$4 = main::i#2 << 1 [ main::i#2 main::$1 main::$4 ] ( [ main::i#2 main::$1 main::$4 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [9] SCREEN[main::$4] = main::$1 [ main::i#2 ] ( [ main::i#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [10] main::$2 = $a + main::i#2 [ main::i#2 main::$2 ] ( [ main::i#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::b#1 = (int)main::i#2 [ main::i#2 main::$2 plus::b#1 ] ( [ main::i#2 main::$2 plus::b#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for mem[1] [ main::$2 ] +Statement [12] call plus [ main::i#2 plus::return#2 main::$2 ] ( [ main::i#2 plus::return#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] plus::return#1 = plus::return#2 [ main::i#2 main::$2 plus::return#1 ] ( [ main::i#2 main::$2 plus::return#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [14] main::$3 = plus::return#1 [ main::i#2 main::$2 main::$3 ] ( [ main::i#2 main::$2 main::$3 ] { } ) always clobbers reg byte a +Statement [15] main::$5 = main::$2 << 1 [ main::i#2 main::$3 main::$5 ] ( [ main::i#2 main::$3 main::$5 ] { } ) always clobbers reg byte a +Statement [16] SCREEN[main::$5] = main::$3 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a +Statement [19] plus::r#1 = 2 + plus::a#2 [ plus::a#2 plus::b#2 plus::r#1 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [20] plus::r#2 = plus::r#1 + plus::b#2 [ plus::a#2 plus::b#2 plus::r#2 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [21] plus::r#3 = plus::r#2 + plus::a#2 [ plus::b#2 plus::r#3 ] ( plus:5 [ main::i#2 plus::b#2 plus::r#3 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::b#2 plus::r#3 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [22] plus::return#2 = plus::r#3 + plus::b#2 [ plus::return#2 ] ( plus:5 [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::return#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [4] plus::b#0 = (int)main::i#2 [ main::i#2 plus::b#0 ] ( [ main::i#2 plus::b#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ main::i#2 plus::return#2 ] ( [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [6] plus::return#0 = plus::return#2 [ main::i#2 plus::return#0 ] ( [ main::i#2 plus::return#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [7] main::$1 = plus::return#0 [ main::i#2 main::$1 ] ( [ main::i#2 main::$1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [8] main::$4 = main::i#2 << 1 [ main::i#2 main::$1 main::$4 ] ( [ main::i#2 main::$1 main::$4 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [9] SCREEN[main::$4] = main::$1 [ main::i#2 ] ( [ main::i#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [10] main::$2 = $a + main::i#2 [ main::i#2 main::$2 ] ( [ main::i#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::b#1 = (int)main::i#2 [ main::i#2 main::$2 plus::b#1 ] ( [ main::i#2 main::$2 plus::b#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [12] call plus [ main::i#2 plus::return#2 main::$2 ] ( [ main::i#2 plus::return#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] plus::return#1 = plus::return#2 [ main::i#2 main::$2 plus::return#1 ] ( [ main::i#2 main::$2 plus::return#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [14] main::$3 = plus::return#1 [ main::i#2 main::$2 main::$3 ] ( [ main::i#2 main::$2 main::$3 ] { } ) always clobbers reg byte a +Statement [15] main::$5 = main::$2 << 1 [ main::i#2 main::$3 main::$5 ] ( [ main::i#2 main::$3 main::$5 ] { } ) always clobbers reg byte a +Statement [16] SCREEN[main::$5] = main::$3 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a +Statement [19] plus::r#1 = 2 + plus::a#2 [ plus::a#2 plus::b#2 plus::r#1 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [20] plus::r#2 = plus::r#1 + plus::b#2 [ plus::a#2 plus::b#2 plus::r#2 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [21] plus::r#3 = plus::r#2 + plus::a#2 [ plus::b#2 plus::r#3 ] ( plus:5 [ main::i#2 plus::b#2 plus::r#3 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::b#2 plus::r#3 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [22] plus::return#2 = plus::r#3 + plus::b#2 [ plus::return#2 ] ( plus:5 [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::return#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers mem[1] [ main::i#2 main::i#1 ] : mem[1] , reg byte x , reg byte y , +Potential registers mem[2] [ plus::a#2 ] : mem[2] , +Potential registers mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] : mem[2] , +Potential registers mem[2] [ plus::return#0 ] : mem[2] , +Potential registers mem[2] [ main::$1 ] : mem[2] , +Potential registers mem[1] [ main::$4 ] : mem[1] , reg byte a , reg byte x , reg byte y , +Potential registers mem[1] [ main::$2 ] : mem[1] , reg byte x , reg byte y , +Potential registers mem[2] [ plus::return#1 ] : mem[2] , +Potential registers mem[2] [ main::$3 ] : mem[2] , +Potential registers mem[1] [ main::$5 ] : mem[1] , reg byte a , reg byte x , reg byte y , +Potential registers mem[2] [ plus::r#1 ] : mem[2] , +Potential registers mem[2] [ plus::r#2 ] : mem[2] , +Potential registers mem[2] [ plus::r#3 ] : mem[2] , +Potential registers mem[2] [ plus::return#2 ] : mem[2] , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 202: mem[2] [ plus::r#1 ] 202: mem[2] [ plus::r#2 ] 202: mem[2] [ plus::r#3 ] 100: mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] 67.33: mem[2] [ plus::a#2 ] 30.75: mem[2] [ plus::return#2 ] 22: mem[2] [ plus::return#0 ] 22: mem[2] [ plus::return#1 ] +Uplift Scope [main] 25.67: mem[1] [ main::i#2 main::i#1 ] 22: mem[1] [ main::$4 ] 22: mem[1] [ main::$5 ] 11: mem[2] [ main::$1 ] 11: mem[2] [ main::$3 ] 4.4: mem[1] [ main::$2 ] +Uplift Scope [] + +Uplifting [plus] best 2226 combination mem[2] [ plus::r#1 ] mem[2] [ plus::r#2 ] mem[2] [ plus::r#3 ] mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] mem[2] [ plus::a#2 ] mem[2] [ plus::return#2 ] mem[2] [ plus::return#0 ] mem[2] [ plus::return#1 ] +Uplifting [main] best 1866 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::$4 ] reg byte x [ main::$5 ] mem[2] [ main::$1 ] mem[2] [ main::$3 ] reg byte x [ main::$2 ] +Limited combination testing to 100 combinations of 144 possible. +Uplifting [] best 1866 combination +Coalescing zero page register [ mem[2] [ plus::return#0 ] ] with [ mem[2] [ main::$1 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 ] ] with [ mem[2] [ plus::return#2 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::return#1 ] ] with [ mem[2] [ main::$3 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::r#1 ] ] with [ mem[2] [ plus::r#2 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 plus::return#2 ] ] with [ mem[2] [ plus::return#1 main::$3 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::r#1 plus::r#2 ] ] with [ mem[2] [ plus::r#3 ] ] - score: 1 + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + // Upstart + .file [name="call-banked-phi-memvars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b1 + // main::@1 + __b1: + // [2] if(main::i#2<5) goto main::@2 -- vbuyy_lt_vbuc1_then_la1 + cpy #5 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [3] return + rts + // main::@2 + __b2: + // [4] plus::b#0 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [5] call plus + // [18] phi from main::@2 to plus [phi:main::@2->plus] + plus_from___b2: + // [18] phi plus::b#2 = plus::b#0 [phi:main::@2->plus#0] -- register_copy + // [18] phi plus::a#2 = $64 [phi:main::@2->plus#1] -- call_phi_close_cx16_ram + lda #<$64 + sta plus.a + lda #>$64 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#0 = plus::return#2 + jmp __b3 + // main::@3 + __b3: + // [7] main::$1 = plus::return#0 + // [8] main::$4 = main::i#2 << 1 -- vbuxx=vbuyy_rol_1 + tya + asl + tax + // [9] SCREEN[main::$4] = main::$1 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __1 + sta SCREEN,x + lda __1+1 + sta SCREEN+1,x + // [10] main::$2 = $a + main::i#2 -- vbuxx=vbuc1_plus_vbuyy + tya + tax + axs #-[$a] + // [11] plus::b#1 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [12] call plus + // [18] phi from main::@3 to plus [phi:main::@3->plus] + plus_from___b3: + // [18] phi plus::b#2 = plus::b#1 [phi:main::@3->plus#0] -- register_copy + // [18] phi plus::a#2 = $c8 [phi:main::@3->plus#1] -- call_phi_close_cx16_ram + lda #<$c8 + sta plus.a + lda #>$c8 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [13] plus::return#1 = plus::return#2 + jmp __b4 + // main::@4 + __b4: + // [14] main::$3 = plus::return#1 + // [15] main::$5 = main::$2 << 1 -- vbuxx=vbuxx_rol_1 + txa + asl + tax + // [16] SCREEN[main::$5] = main::$3 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __3 + sta SCREEN,x + lda __3+1 + sta SCREEN+1,x + // [17] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [1] phi from main::@4 to main::@1 [phi:main::@4->main::@1] + __b1_from___b4: + // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy + jmp __b1 + .segment Data + .label __1 = plus.return + .label __3 = plus.return +} +.segment RAM_Bank1 + // plus +// __mem() int plus(__mem() int a, __mem() int b) +// __bank(cx16_ram, 1) +plus: { + // [19] plus::r#1 = 2 + plus::a#2 -- vwsm1=vwsc1_plus_vwsm2 + clc + lda a + adc #<2 + sta r + lda a+1 + adc #>2 + sta r+1 + // [20] plus::r#2 = plus::r#1 + plus::b#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc b + sta r + lda r+1 + adc b+1 + sta r+1 + // [21] plus::r#3 = plus::r#2 + plus::a#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc a + sta r + lda r+1 + adc a+1 + sta r+1 + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 + lda r + clc + adc b + sta return + lda r+1 + adc b+1 + sta return+1 + jmp __breturn + // plus::@return + __breturn: + // [23] return + rts + .segment Data + b: .word 0 + return: .word 0 + .segment RAM_Bank1 + r: .word 0 + .segment Data + a: .word 0 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction plus_from___b2: +Removing instruction __b3: +Removing instruction plus_from___b3: +Removing instruction __b4: +Removing instruction __b1_from___b4: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant int * const SCREEN = (int *) 1024 +void main() +int main::$1 // mem[2] 11.0 +char main::$2 // reg byte x 4.4 +int main::$3 // mem[2] 11.0 +char main::$4 // reg byte x 22.0 +char main::$5 // reg byte x 22.0 +char main::i +char main::i#1 // reg byte y 22.0 +char main::i#2 // reg byte y 3.6666666666666665 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#2 // a mem[2] 67.33333333333333 +int plus::b +int plus::b#0 // b mem[2] 22.0 +int plus::b#1 // b mem[2] 22.0 +int plus::b#2 // b mem[2] 56.0 +int plus::r +int plus::r#1 // r mem[2] 202.0 +int plus::r#2 // r mem[2] 202.0 +int plus::r#3 // r mem[2] 202.0 +int plus::return +int plus::return#0 // return mem[2] 22.0 +int plus::return#1 // return mem[2] 22.0 +int plus::return#2 // return mem[2] 30.75 + +reg byte y [ main::i#2 main::i#1 ] +mem[2] [ plus::a#2 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] +mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +reg byte x [ main::$4 ] +reg byte x [ main::$2 ] +reg byte x [ main::$5 ] +mem[2] [ plus::r#1 plus::r#2 plus::r#3 ] + + +FINAL ASSEMBLER +Score: 1103 + + // File Comments +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + // Upstart + .file [name="call-banked-phi-memvars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] phi from main to main::@1 [phi:main->main::@1] + // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // main::@1 + __b1: + // for(char i=0;i<5; i++) + // [2] if(main::i#2<5) goto main::@2 -- vbuyy_lt_vbuc1_then_la1 + cpy #5 + bcc __b2 + // main::@return + // } + // [3] return + rts + // main::@2 + __b2: + // plus(100, (int)i) + // [4] plus::b#0 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [5] call plus + // [18] phi from main::@2 to plus [phi:main::@2->plus] + // [18] phi plus::b#2 = plus::b#0 [phi:main::@2->plus#0] -- register_copy + // [18] phi plus::a#2 = $64 [phi:main::@2->plus#1] -- call_phi_close_cx16_ram + lda #<$64 + sta plus.a + lda #>$64 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(100, (int)i) + // [6] plus::return#0 = plus::return#2 + // main::@3 + // [7] main::$1 = plus::return#0 + // SCREEN[i] = plus(100, (int)i) + // [8] main::$4 = main::i#2 << 1 -- vbuxx=vbuyy_rol_1 + tya + asl + tax + // [9] SCREEN[main::$4] = main::$1 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __1 + sta SCREEN,x + lda __1+1 + sta SCREEN+1,x + // 10+i + // [10] main::$2 = $a + main::i#2 -- vbuxx=vbuc1_plus_vbuyy + tya + tax + axs #-[$a] + // plus(200, (int)i) + // [11] plus::b#1 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [12] call plus + // [18] phi from main::@3 to plus [phi:main::@3->plus] + // [18] phi plus::b#2 = plus::b#1 [phi:main::@3->plus#0] -- register_copy + // [18] phi plus::a#2 = $c8 [phi:main::@3->plus#1] -- call_phi_close_cx16_ram + lda #<$c8 + sta plus.a + lda #>$c8 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(200, (int)i) + // [13] plus::return#1 = plus::return#2 + // main::@4 + // [14] main::$3 = plus::return#1 + // SCREEN[10+i] = plus(200, (int)i) + // [15] main::$5 = main::$2 << 1 -- vbuxx=vbuxx_rol_1 + txa + asl + tax + // [16] SCREEN[main::$5] = main::$3 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __3 + sta SCREEN,x + lda __3+1 + sta SCREEN+1,x + // for(char i=0;i<5; i++) + // [17] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [1] phi from main::@4 to main::@1 [phi:main::@4->main::@1] + // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy + jmp __b1 + .segment Data + .label __1 = plus.return + .label __3 = plus.return +} +.segment RAM_Bank1 + // plus +// __mem() int plus(__mem() int a, __mem() int b) +// __bank(cx16_ram, 1) +plus: { + // r += a + // [19] plus::r#1 = 2 + plus::a#2 -- vwsm1=vwsc1_plus_vwsm2 + clc + lda a + adc #<2 + sta r + lda a+1 + adc #>2 + sta r+1 + // r += b + // [20] plus::r#2 = plus::r#1 + plus::b#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc b + sta r + lda r+1 + adc b+1 + sta r+1 + // r += a + // [21] plus::r#3 = plus::r#2 + plus::a#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc a + sta r + lda r+1 + adc a+1 + sta r+1 + // r += b + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 + lda r + clc + adc b + sta return + lda r+1 + adc b+1 + sta return+1 + // plus::@return + // } + // [23] return + rts + .segment Data + b: .word 0 + return: .word 0 + .segment RAM_Bank1 + r: .word 0 + .segment Data + a: .word 0 +} + // File Data + diff --git a/src/test/ref/call-banked-phi-memvars.sym b/src/test/ref/call-banked-phi-memvars.sym new file mode 100644 index 000000000..e7554762e --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.sym @@ -0,0 +1,34 @@ +__constant int * const SCREEN = (int *) 1024 +void main() +int main::$1 // mem[2] 11.0 +char main::$2 // reg byte x 4.4 +int main::$3 // mem[2] 11.0 +char main::$4 // reg byte x 22.0 +char main::$5 // reg byte x 22.0 +char main::i +char main::i#1 // reg byte y 22.0 +char main::i#2 // reg byte y 3.6666666666666665 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#2 // a mem[2] 67.33333333333333 +int plus::b +int plus::b#0 // b mem[2] 22.0 +int plus::b#1 // b mem[2] 22.0 +int plus::b#2 // b mem[2] 56.0 +int plus::r +int plus::r#1 // r mem[2] 202.0 +int plus::r#2 // r mem[2] 202.0 +int plus::r#3 // r mem[2] 202.0 +int plus::return +int plus::return#0 // return mem[2] 22.0 +int plus::return#1 // return mem[2] 22.0 +int plus::return#2 // return mem[2] 30.75 + +reg byte y [ main::i#2 main::i#1 ] +mem[2] [ plus::a#2 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] +mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +reg byte x [ main::$4 ] +reg byte x [ main::$2 ] +reg byte x [ main::$5 ] +mem[2] [ plus::r#1 plus::r#2 plus::r#3 ] From d4040e30a0dbfa6b36310d0d14b9f45433cd8d68 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 24 Apr 2023 00:36:36 +0200 Subject: [PATCH 50/50] Moved handling of banked param/return to pass 1. --- .../java/dk/camelot64/kickc/Compiler.java | 1 + .../passes/Pass1FixProcedureParamSegment.java | 46 +++++++++++++++++++ .../kickc/passes/Pass4CodeGeneration.java | 24 ---------- .../kickc/test/TestProgramsFast.java | 2 +- src/test/ref/call-banked-phi-memvars.asm | 14 +++--- src/test/ref/call-banked-phi-memvars.log | 43 +++++++++-------- src/test/ref/call-banked-phi-memvars.sym | 3 +- 7 files changed, 79 insertions(+), 54 deletions(-) create mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index cc8b197cd..f5a16b1d9 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -224,6 +224,7 @@ public class Compiler { new Pass1Procedures(program).execute(); new PassNTypeInference(program).execute(); new PassNFixIntermediateMemoryArea(program).execute(); + new Pass1FixProcedureParamSegment(program).execute(); new PassNTypeIdSimplification(program).execute(); new Pass1StructTypeSizeFix(program).execute(); new Pass1PrintfIntrinsicRewrite(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java b/src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java new file mode 100644 index 000000000..3935b5729 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java @@ -0,0 +1,46 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.Registers; +import dk.camelot64.kickc.model.symbols.Procedure; +import dk.camelot64.kickc.model.symbols.Scope; +import dk.camelot64.kickc.model.symbols.Variable; + +import java.util.Collection; +import java.util.List; + +/** + * Ensure banked procedure parameters/return values in main memory are placed in the default data segment. + * This is needed to support banking, since it is otherwise impossible to access them across bank boundaries during calls. + */ +public class Pass1FixProcedureParamSegment extends Pass2SsaOptimization { + + public Pass1FixProcedureParamSegment(Program program) { + super(program); + } + + @Override + public boolean step() { + final Collection allVariables = getScope().getAllVariables(true); + for(Variable variable : allVariables) { + if(variable.isKindLoadStore() || variable.isKindPhiMaster() || variable.isKindIntermediate()) { + if(variable.getRegister() instanceof Registers.RegisterMainMem registerMainMem && registerMainMem.isAddressHardcoded()) + continue; + if(variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) + continue; + + final Scope scope = variable.getScope(); + if(scope instanceof Procedure procedure) { + if(!procedure.getBank().isCommon()) { + List parameters = procedure.getParameters(); + if(parameters.contains(variable) || variable.getLocalName().equals("return")) { + variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); + getLog().append("Fixing banked procedure parameter/return value to default segment " + variable.getFullName()); + } + } + } + } + } + return false; + } +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 8d7426a3b..29000ba0b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -583,30 +583,6 @@ public class Pass4CodeGeneration { if (registerMainMem.getAddress() == null) { // Generate into the data segment // Set segment - // We check first the bank of the variable. Only local variables can be stored in the bank. - // Parameters must be stored in main memory. - if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { - if(scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - List parameters = procedure.getParameters(); - if (variable.isKindPhiVersion()) { - Variable master = variable.getPhiMaster(); - if (master != null) { - if (parameters.contains(master) || master.getLocalName().equals("return")) { - variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); - } - } - } - } - } - - // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. - if (variable.isKindIntermediate()) { - if (scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - variable.setDataSegment(procedure.getSegmentData()); - } - } setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index f85993677..df4514641 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1583,7 +1583,7 @@ public class TestProgramsFast extends TestPrograms { @Test public void testBankedPhiMemvars() throws IOException { - compileAndCompare("call-banked-phi-memvars.c", log()); + compileAndCompare("call-banked-phi-memvars.c"); } diff --git a/src/test/ref/call-banked-phi-memvars.asm b/src/test/ref/call-banked-phi-memvars.asm index 1a15757b6..bd4556180 100644 --- a/src/test/ref/call-banked-phi-memvars.asm +++ b/src/test/ref/call-banked-phi-memvars.asm @@ -93,8 +93,8 @@ main: { iny jmp __b1 .segment Data - .label __1 = plus.return - .label __3 = plus.return + .label __1 = plus.b + .label __3 = plus.b } .segment RAM_Bank1 // __mem() int plus(__mem() int a, __mem() int b) @@ -125,18 +125,18 @@ plus: { adc a+1 sta r+1 // r += b - lda r clc - adc b + lda return + adc r sta return - lda r+1 - adc b+1 + lda return+1 + adc r+1 sta return+1 // } rts .segment Data b: .word 0 - return: .word 0 + .label return = b .segment RAM_Bank1 r: .word 0 .segment Data diff --git a/src/test/ref/call-banked-phi-memvars.log b/src/test/ref/call-banked-phi-memvars.log index ad6a75b41..6aea5faca 100644 --- a/src/test/ref/call-banked-phi-memvars.log +++ b/src/test/ref/call-banked-phi-memvars.log @@ -3,6 +3,9 @@ Updating intermediate variable memory area to MAIN_MEMORY main::$0 Updating intermediate variable memory area to MAIN_MEMORY main::$1 Updating intermediate variable memory area to MAIN_MEMORY main::$2 Updating intermediate variable memory area to MAIN_MEMORY main::$3 +Fixing banked procedure parameter/return value to default segment plus::a +Fixing banked procedure parameter/return value to default segment plus::b +Fixing banked procedure parameter/return value to default segment plus::return CONTROL FLOW GRAPH SSA @@ -359,11 +362,12 @@ Uplifting [plus] best 2226 combination mem[2] [ plus::r#1 ] mem[2] [ plus::r#2 ] Uplifting [main] best 1866 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::$4 ] reg byte x [ main::$5 ] mem[2] [ main::$1 ] mem[2] [ main::$3 ] reg byte x [ main::$2 ] Limited combination testing to 100 combinations of 144 possible. Uplifting [] best 1866 combination +Coalescing zero page register [ mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] ] with [ mem[2] [ plus::return#2 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::return#0 ] ] with [ mem[2] [ main::$1 ] ] - score: 1 -Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 ] ] with [ mem[2] [ plus::return#2 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::return#1 ] ] with [ mem[2] [ main::$3 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::r#1 ] ] with [ mem[2] [ plus::r#2 ] ] - score: 1 -Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 plus::return#2 ] ] with [ mem[2] [ plus::return#1 main::$3 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 ] ] with [ mem[2] [ plus::return#0 main::$1 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 plus::return#0 main::$1 ] ] with [ mem[2] [ plus::return#1 main::$3 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::r#1 plus::r#2 ] ] with [ mem[2] [ plus::r#3 ] ] - score: 1 ASSEMBLER BEFORE OPTIMIZATION @@ -498,8 +502,8 @@ main: { // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy jmp __b1 .segment Data - .label __1 = plus.return - .label __3 = plus.return + .label __1 = plus.b + .label __3 = plus.b } .segment RAM_Bank1 // plus @@ -530,13 +534,13 @@ plus: { lda r+1 adc a+1 sta r+1 - // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 - lda r + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm1 clc - adc b + lda return + adc r sta return - lda r+1 - adc b+1 + lda return+1 + adc r+1 sta return+1 jmp __breturn // plus::@return @@ -545,7 +549,7 @@ plus: { rts .segment Data b: .word 0 - return: .word 0 + .label return = b .segment RAM_Bank1 r: .word 0 .segment Data @@ -599,8 +603,7 @@ int plus::return#2 // return mem[2] 30.75 reg byte y [ main::i#2 main::i#1 ] mem[2] [ plus::a#2 ] -mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] -mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 plus::return#0 main::$1 plus::return#1 main::$3 ] reg byte x [ main::$4 ] reg byte x [ main::$2 ] reg byte x [ main::$5 ] @@ -740,8 +743,8 @@ main: { // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy jmp __b1 .segment Data - .label __1 = plus.return - .label __3 = plus.return + .label __1 = plus.b + .label __3 = plus.b } .segment RAM_Bank1 // plus @@ -776,13 +779,13 @@ plus: { adc a+1 sta r+1 // r += b - // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 - lda r + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm1 clc - adc b + lda return + adc r sta return - lda r+1 - adc b+1 + lda return+1 + adc r+1 sta return+1 // plus::@return // } @@ -790,7 +793,7 @@ plus: { rts .segment Data b: .word 0 - return: .word 0 + .label return = b .segment RAM_Bank1 r: .word 0 .segment Data diff --git a/src/test/ref/call-banked-phi-memvars.sym b/src/test/ref/call-banked-phi-memvars.sym index e7554762e..4300fc0bd 100644 --- a/src/test/ref/call-banked-phi-memvars.sym +++ b/src/test/ref/call-banked-phi-memvars.sym @@ -26,8 +26,7 @@ int plus::return#2 // return mem[2] 30.75 reg byte y [ main::i#2 main::i#1 ] mem[2] [ plus::a#2 ] -mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] -mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 plus::return#0 main::$1 plus::return#1 main::$3 ] reg byte x [ main::$4 ] reg byte x [ main::$2 ] reg byte x [ main::$5 ]