############################################################################### # # # Calypsi ISO C compiler for 65816 version 5.16 # # 15/May/2026 00:38:15 # # Command line: --speed -O 2 --64bit-doubles evalAt.c -o # # /tmp/evalAt.calypsi.elf --list-file evalAt.calypsi.lst # # # ############################################################################### \ 000000 .rtmodel version,"1" \ 000000 .rtmodel codeModel,"large" \ 000000 .rtmodel dataModel,"small" \ 000000 .rtmodel core,"65816" \ 000000 .rtmodel huge,"0" \ 000000 .rtmodel doubleSize,"64" \ 000000 .rtmodel target,"none-specified" \ 000000 .extern _Dp \ 000000 .extern _Vfp \ 000000 .extern __f64_add \ 000000 .extern __f64_mul \ 000000 .extern __i32_to_f64 0001 // Benchmark function — orBug-style recursive double expression eval. 0002 // Used to compare W65816 backend (with W65816ImgCalleeSave pass) vs Calypsi. 0003 double evalAt(char **p, int prec) { \ 000000 .section farcode,text \ 000000 .public evalAt \ 000000 evalAt: \ 000000 d4.. pei dp:.tiny (_Dp+8) \ 000002 a8 tay \ 000003 3b tsc \ 000004 38 sec \ 000005 e92600 sbc ##38 \ 000008 1b tcs \ 000009 98 tya \ 00000a 831d sta 29,s \ 00000c a5.. lda dp:.tiny _Dp \ 00000e 831b sta 27,s \ 000010 a5.. lda dp:.tiny (_Dp+2) \ 000012 85.. sta dp:.tiny (_Dp+8) 0004 double a = 0.0; \ 000014 ad.... lda _Const_0000000000000000+6 \ 000017 8309 sta 9,s \ 000019 ad.... lda _Const_0000000000000000+4 \ 00001c 8307 sta 7,s \ 00001e ad.... lda _Const_0000000000000000+2 \ 000021 8305 sta 5,s \ 000023 ad.... lda _Const_0000000000000000 \ 000026 8303 sta 3,s 0005 while (**p >= '0' && **p <= '9') { \ 000028 a309 lda 9,s \ 00002a 8319 sta 25,s \ 00002c a307 lda 7,s \ 00002e 8317 sta 23,s \ 000030 a305 lda 5,s \ 000032 8315 sta 21,s \ 000034 a303 lda 3,s \ 000036 8313 `?L41`: sta 19,s \ 000038 22...... jsl long:`?L44` \ 00003c e220 sep #32 \ 00003e c930 cmp #48 \ 000040 c220 rep #32 \ 000042 b003 bcs `?L48` \ 000044 4c.... jmp .kbank `?L5` \ 000047 a31b `?L48`: lda 27,s \ 000049 a8 tay \ 00004a be0000 ldx 0,y \ 00004d a93900 lda ##57 \ 000050 e220 sep #32 \ 000052 dd0000 cmp 0,x \ 000055 c220 rep #32 \ 000057 9072 bcc `?L5` 0006 a = a * 10.0 + (double)(**p - '0'); \ 000059 a2.... ldx ##_Const_4024000000000000 \ 00005c 86.. stx dp:.tiny (_Dp+2) \ 00005e 3b tsc \ 00005f 18 clc \ 000060 691300 adc ##19 \ 000063 85.. sta dp:.tiny _Dp \ 000065 3b tsc \ 000066 18 clc \ 000067 690300 adc ##3 \ 00006a 22...... jsl long:__f64_mul \ 00006e 22...... jsl long:`?L44` \ 000072 29ff00 and ##255 \ 000075 38 sec \ 000076 e93000 sbc ##48 \ 000079 a20000 ldx ##0 \ 00007c a8 tay \ 00007d 1001 bpl `?L31` \ 00007f ca dex \ 000080 `?L31`: \ 000080 86.. stx dp:.tiny (_Dp+2) \ 000082 85.. sta dp:.tiny _Dp \ 000084 3b tsc \ 000085 18 clc \ 000086 690b00 adc ##11 \ 000089 22...... jsl long:__i32_to_f64 \ 00008d 3b tsc \ 00008e 18 clc \ 00008f 690b00 adc ##11 \ 000092 85.. sta dp:.tiny (_Dp+2) \ 000094 3b tsc \ 000095 18 clc \ 000096 690300 adc ##3 \ 000099 85.. sta dp:.tiny _Dp \ 00009b 3b tsc \ 00009c 18 clc \ 00009d 690300 adc ##3 \ 0000a0 22...... jsl long:__f64_add \ 0000a4 a309 lda 9,s \ 0000a6 8311 sta 17,s \ 0000a8 a307 lda 7,s \ 0000aa 830f sta 15,s \ 0000ac a305 lda 5,s \ 0000ae 830d sta 13,s \ 0000b0 a303 lda 3,s \ 0000b2 830b sta 11,s 0007 (*p)++; \ 0000b4 a31b lda 27,s \ 0000b6 aa tax \ 0000b7 fe0000 inc 0,x \ 0000ba a311 lda 17,s \ 0000bc 8319 sta 25,s \ 0000be a30f lda 15,s \ 0000c0 8317 sta 23,s \ 0000c2 a30d lda 13,s \ 0000c4 8315 sta 21,s \ 0000c6 a30b lda 11,s \ 0000c8 4c.... jmp .kbank `?L41` \ 0000cb `?L5`: 0008 } 0009 while (1) { \ 0000cb a319 lda 25,s \ 0000cd 8325 sta 37,s \ 0000cf a317 lda 23,s \ 0000d1 8323 sta 35,s \ 0000d3 a315 lda 21,s \ 0000d5 8321 sta 33,s \ 0000d7 a313 lda 19,s \ 0000d9 831f `?L40`: sta 31,s 0010 int op = **p; 0011 int oprec; 0012 if (op == '*' || op == '/') oprec = 4; \ 0000db 22...... jsl long:`?L44` \ 0000df 29ff00 and ##255 \ 0000e2 830b sta 11,s \ 0000e4 c92a00 cmp ##42 \ 0000e7 f016 beq `?L12` \ 0000e9 c92f00 cmp ##47 \ 0000ec f011 beq `?L12` 0013 else if (op == '+' || op == '-') oprec = 3; \ 0000ee c92b00 cmp ##43 \ 0000f1 f005 beq `?L15` \ 0000f3 c92d00 cmp ##45 \ 0000f6 d018 bne `?L19` \ 0000f8 a90300 `?L15`: lda ##3 \ 0000fb 8301 sta 1,s \ 0000fd 8005 bra `?L11` \ 0000ff a90400 `?L12`: lda ##4 \ 000102 8301 sta 1,s \ 000104 `?L11`: 0014 else return a; 0015 if (oprec <= prec) return a; \ 000104 a5.. lda dp:.tiny (_Dp+8) \ 000106 38 sec \ 000107 e301 sbc 1,s \ 000109 5003 bvc `?L35` \ 00010b 490080 eor ##-32768 \ 00010e 302a `?L35`: bmi `?L18` \ 000110 a325 `?L19`: lda 37,s \ 000112 a00600 ldy ##6 \ 000115 931d sta (29,s),y \ 000117 a323 lda 35,s \ 000119 a00400 ldy ##4 \ 00011c 931d sta (29,s),y \ 00011e a321 lda 33,s \ 000120 a00200 ldy ##2 \ 000123 931d sta (29,s),y \ 000125 a31f lda 31,s \ 000127 a00000 ldy ##0 \ 00012a 931d sta (29,s),y \ 00012c a31d lda 29,s 0016 (*p)++; 0017 double b = evalAt(p, oprec); 0018 if (op == '+') a = a + b; 0019 else if (op == '*') a = a * b; 0020 } 0021 } \ 00012e a8 tay \ 00012f 3b tsc \ 000130 18 clc \ 000131 692600 adc ##38 \ 000134 1b tcs \ 000135 98 tya \ 000136 7a ply \ 000137 84.. sty dp:.tiny (_Dp+8) \ 000139 6b rtl \ 00013a a31b `?L18`: lda 27,s \ 00013c aa tax \ 00013d fe0000 inc 0,x \ 000140 a301 lda 1,s \ 000142 85.. sta dp:.tiny (_Dp+2) \ 000144 a31b lda 27,s \ 000146 85.. sta dp:.tiny _Dp \ 000148 3b tsc \ 000149 18 clc \ 00014a 690300 adc ##3 \ 00014d 22...... jsl long:evalAt \ 000151 a30b lda 11,s \ 000153 c92b00 cmp ##43 \ 000156 d037 bne `?L21` \ 000158 3b tsc \ 000159 18 clc \ 00015a 690300 adc ##3 \ 00015d 85.. sta dp:.tiny (_Dp+2) \ 00015f 3b tsc \ 000160 18 clc \ 000161 691f00 adc ##31 \ 000164 85.. sta dp:.tiny _Dp \ 000166 3b tsc \ 000167 18 clc \ 000168 690300 adc ##3 \ 00016b 22...... jsl long:__f64_add \ 00016f a309 lda 9,s \ 000171 8319 sta 25,s \ 000173 a307 lda 7,s \ 000175 8317 sta 23,s \ 000177 a305 lda 5,s \ 000179 8315 sta 21,s \ 00017b a303 lda 3,s \ 00017d 8313 sta 19,s \ 00017f a319 lda 25,s \ 000181 8311 sta 17,s \ 000183 a317 lda 23,s \ 000185 830f sta 15,s \ 000187 a315 lda 21,s \ 000189 830d sta 13,s \ 00018b a313 lda 19,s \ 00018d 805a bra `?L43` \ 00018f c92a00 `?L21`: cmp ##42 \ 000192 d037 bne `?L24` \ 000194 3b tsc \ 000195 18 clc \ 000196 690300 adc ##3 \ 000199 85.. sta dp:.tiny (_Dp+2) \ 00019b 3b tsc \ 00019c 18 clc \ 00019d 691f00 adc ##31 \ 0001a0 85.. sta dp:.tiny _Dp \ 0001a2 3b tsc \ 0001a3 18 clc \ 0001a4 690300 adc ##3 \ 0001a7 22...... jsl long:__f64_mul \ 0001ab a309 lda 9,s \ 0001ad 8311 sta 17,s \ 0001af a307 lda 7,s \ 0001b1 830f sta 15,s \ 0001b3 a305 lda 5,s \ 0001b5 830d sta 13,s \ 0001b7 a303 lda 3,s \ 0001b9 830b sta 11,s \ 0001bb a311 lda 17,s \ 0001bd 8309 sta 9,s \ 0001bf a30f lda 15,s \ 0001c1 8307 sta 7,s \ 0001c3 a30d lda 13,s \ 0001c5 8305 sta 5,s \ 0001c7 a30b lda 11,s \ 0001c9 800e bra `?L42` \ 0001cb a325 `?L24`: lda 37,s \ 0001cd 8309 sta 9,s \ 0001cf a323 lda 35,s \ 0001d1 8307 sta 7,s \ 0001d3 a321 lda 33,s \ 0001d5 8305 sta 5,s \ 0001d7 a31f lda 31,s \ 0001d9 8303 `?L42`: sta 3,s \ 0001db a309 lda 9,s \ 0001dd 8311 sta 17,s \ 0001df a307 lda 7,s \ 0001e1 830f sta 15,s \ 0001e3 a305 lda 5,s \ 0001e5 830d sta 13,s \ 0001e7 a303 lda 3,s \ 0001e9 830b `?L43`: sta 11,s \ 0001eb a311 lda 17,s \ 0001ed 8325 sta 37,s \ 0001ef a30f lda 15,s \ 0001f1 8323 sta 35,s \ 0001f3 a30d lda 13,s \ 0001f5 8321 sta 33,s \ 0001f7 a30b lda 11,s \ 0001f9 4c.... jmp .kbank `?L40` \ 000000 .section farcode,text \ 000000 a31e `?L44`: lda 30,s \ 000002 a8 tay \ 000003 be0000 ldx 0,y \ 000006 bd0000 lda 0,x \ 000009 6b rtl \ 000000 .section cdata,rodata \ 000000 .pubweak _Const_0000000000000000 \ 000000 _Const_0000000000000000: \ 000000 00000000 .quad 0 \ 000004 00000000 \ 000000 .section cdata,rodata \ 000000 .pubweak _Const_4024000000000000 \ 000000 _Const_4024000000000000: \ 000000 00000000 .quad 0x4024000000000000 \ 000004 00002440 ########################## # # # Memory sizes (decimal) # # # ########################## Executable (Text): 518 bytes Constant : 16 bytes