65816-llvm-mos/compare/evalAt.calypsi.lst
Scott Duensing 42f0d16d07 Checkpoint
2026-05-13 20:54:28 -05:00

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