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 ]