318 lines
15 KiB
Text
318 lines
15 KiB
Text
###############################################################################
|
|
# #
|
|
# Calypsi ISO C compiler for 65816 version 5.16 #
|
|
# 13/May/2026 20:52:21 #
|
|
# 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
|