While testing my armhf porting work (which I will send on request, including it in this mail seems to make it too big for the list to accept) I came across a case where parameters were passed incorrectly to a function with a large number of parameters (14 single, 1 double). Initially I thought this was because of the compilers lack of knowlage of the conflict between double registers and odd numbered single registers. However looking more closely this appears not to be the case. The full assembler is attached and highlights of it are below.
# Register r0 allocated Looking at the code it seems that the compiler is loading the constants ldr r0,.Lj14 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s20 allocated fcpys s20,s0 <--snip a load of stuff not involving s20--> # Register r0 allocated ldr r0,.Lj54 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s20 allocated fcpys s20,s0 <--snip a load of stuff not involving s20--> # Register s20 released # Register s13 allocated fcpys s13,s20 <--snip a load of stuff not involving s20--> # Register s20 released # Register s3 allocated fcpys s3,s20 Looking at the code it seems that the compiler is loading the constants into temporary registers and then copying them to the final locations for passing them to the parameters. However for some reason it is using S20 to store two different temporary values at the same time. Any idea what could cause this and how to debug it? S20 is NOT used for passing parameters to funtions. I have a hunch it may be a spilling related issue but i've no idea where to look to confirm/refute that theory.
.file "testfp.dpr" # Begin asmlist al_begin .section .text.b_DEBUGSTART_$P$TESTFP .globl DEBUGSTART_$P$TESTFP .type DEBUGSTART_$P$TESTFP,#object DEBUGSTART_$P$TESTFP: .stabs "/testfp/",100,0,0,.Lf3 .stabs "testfp.dpr",100,0,0,.Lf3 .Lf3: # End asmlist al_begin # Begin asmlist al_stabs .section .data.n_TESTFP .globl DEBUGINFO_$P$TESTFP .type DEBUGINFO_$P$TESTFP,#object DEBUGINFO_$P$TESTFP: # Defs - Begin unit SYSTEM has index 1 .stabs "void:t2=2",128,0,0,0 .stabs "LONGINT:t3=r3;-2147483648;2147483647;",128,0,0,0 .stabs "DOUBLE:t1=r3;8;0;",128,0,0,0 # Defs - End unit SYSTEM has index 1 # Defs - Begin unit FPINTRES has index 2 # Defs - End unit FPINTRES has index 2 # Defs - Begin unit OBJPAS has index 3 # Defs - End unit OBJPAS has index 3 # Defs - Begin Staticsymtable # Defs - End Staticsymtable # Syms - Begin Staticsymtable .stabs "D:S1",40,0,6,U_$P$TESTFP_$$_D # Syms - End Staticsymtable # End asmlist al_stabs # Begin asmlist al_procedures .section .text.n_p$testfp_$$_g0 .balign 4 .globl P$TESTFP_$$_G0 .type P$TESTFP_$$_G0,#function P$TESTFP_$$_G0: .stabs "G0:F2",36,0,7,P$TESTFP_$$_G0 # Temps allocated between r11-40 and r11-40 # Register r13,r11,r12 allocated .stabs "testfp.dpr",132,0,0,.Lf1 .Lf1: .stabn 68,0,7,.Ll1 - P$TESTFP_$$_G0 .Ll1: # [testfp.dpr] # [7] procedure g0; begin mov r12,r13 stmfd r13!,{r4,r11,r12,r14,r15} sub r11,r12,#4 # Register r12,r12 released sub r13,r13,#108 # Register r12 allocated mov r12,#104 sub r12,r11,r12 # Register r12 released fstmiad r12,{d8,d9,d10,d11,d12,d13,d14,d15} # Register r0 allocated .stabn 68,0,8,.Ll2 - P$TESTFP_$$_G0 .Ll2: # [8] d := zssssssssssssssdd(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); ldr r0,.Lj10 # Register r0 released # Register d0 allocated fldd d0,[r0] # Register d0 released # Register d2 allocated fcpyd d2,d0 # Register r0 allocated ldr r0,.Lj14 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s20 allocated fcpys s20,s0 # Register r0 allocated ldr r0,.Lj18 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s12 allocated fcpys s12,s0 # Register r0 allocated ldr r0,.Lj22 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s28 allocated fcpys s28,s0 # Register r0 allocated ldr r0,.Lj26 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s10 allocated fcpys s10,s0 # Register r0 allocated ldr r0,.Lj30 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s22 allocated fcpys s22,s0 # Register r0 allocated ldr r0,.Lj34 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s8 allocated fcpys s8,s0 # Register r0 allocated ldr r0,.Lj38 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s6 allocated fcpys s6,s0 # Register r0 allocated ldr r0,.Lj42 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s2 allocated fcpys s2,s0 # Register r0 allocated ldr r0,.Lj46 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s16 allocated fcpys s16,s0 # Register r0 allocated ldr r0,.Lj50 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s18 allocated fcpys s18,s0 # Register r0 allocated ldr r0,.Lj54 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s20 allocated fcpys s20,s0 # Register r0 allocated ldr r0,.Lj58 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s24 allocated fcpys s24,s0 # Register r0 allocated ldr r0,.Lj62 # Register r0 released # Register s0 allocated flds s0,[r0] # Register s0 released # Register s26 allocated fcpys s26,s0 # Register r0 allocated ldr r0,.Lj66 # Register r0 released # Register s0 allocated flds s0,[r0] # Register d2 released # Register d7 allocated fcpyd d7,d2 # Register s20 released # Register s13 allocated fcpys s13,s20 # Register s28 released # Register s11 allocated fcpys s11,s28 # Register s22 released # Register s9 allocated fcpys s9,s22 # Register s6 released # Register s7 allocated fcpys s7,s6 # Register s2 released # Register s6 allocated fcpys s6,s2 # Register s16 released # Register s5 allocated fcpys s5,s16 # Register s18 released # Register s4 allocated fcpys s4,s18 # Register s20 released # Register s3 allocated fcpys s3,s20 # Register s24 released # Register s2 allocated fcpys s2,s24 # Register s26 released # Register s1 allocated fcpys s1,s26 # Register d7,s13,s12,s11,s10,s9,s8,s7,s6,s5,s4,s3,s2,s1,s0 released # Register r0,r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx zssssssssssssssdd # Register d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0 allocated ldr r0,.Lj67 # Register d0,r0 released fstd d0,[r0] # Register r0 allocated .stabn 68,0,9,.Ll3 - P$TESTFP_$$_G0 .Ll3: # [9] if d=120 then writeln('zssssssssssssssdd pass') else begin writeln('zssssssssssssssdd fail d=',d) ; {halt} end; ldr r0,.Lj67 # Register r0 released # Register d1 allocated fldd d1,[r0] # Register r0 allocated ldr r0,.Lj72 # Register r0 released # Register d0 allocated fldd d0,[r0] # Register d1,d0 released fcmpd d1,d0 fmstat beq .Lj68 b .Lj69 .Lj68: # Register r0,r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_get_output # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r1,r2,r3,r12,r13,r14,r0 released # Register r4 allocated mov r4,r0 # Register r1 allocated mov r1,r4 # Register r2 allocated ldr r2,.Lj79 # Register r0 allocated mov r0,#0 # Register r1,r2 released # Register r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_write_text_shortstr # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_IOCHECK # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released # Register r0 allocated mov r0,r4 # Register r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_writeln_end # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_IOCHECK # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3,r4 released b .Lj84 .Lj69: # Register r0,r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_get_output # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r1,r2,r3,r12,r13,r14,r0 released # Register r4 allocated mov r4,r0 # Register r1 allocated mov r1,r4 # Register r2 allocated ldr r2,.Lj91 # Register r0 allocated mov r0,#0 # Register r1,r2 released # Register r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_write_text_shortstr # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_IOCHECK # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released # Register r2 allocated ldr r2,.Lj96 # Register r1 allocated mvn r1,#0 # Register r0 allocated ldr r0,.Lj67 # Register r0 released # Register d0 allocated fldd d0,[r0] # Register r3 allocated mov r3,r4 # Register r0 allocated mov r0,#1 # Register r2,r1,d0,r3 released # Register r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_write_text_float # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_IOCHECK # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released # Register r0 allocated mov r0,r4 # Register r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx fpc_writeln_end # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_IOCHECK # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3,r4 released .Lj84: # Register r0 allocated .stabn 68,0,10,.Ll4 - P$TESTFP_$$_G0 .Ll4: # [10] flush(output); ldr r0,.Lj112 # Register r0 released # Register r1 allocated ldr r1,[r0] cmp r1,#0 beq .Lj110 # Register r0,r2 allocated ldr r2,.Lj113 # Register r2 released ldr r0,[r2] # Register r0,r1 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx r1 # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released # Register r0 allocated b .Lj111 .Lj110: # Register r1 allocated ldr r1,.Lj114 # Register r1 released mov r0,r1 .Lj111: # Register r1,r2,r3,r12,r13,r14,d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd allocated blx SYSTEM_$$_FLUSH$TEXT # Register d0,d1,d2,d3,d4,d5,d6,d7,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,mreg32fd,mreg33fd,mreg34fd,mreg35fd,mreg36fd,mreg37fd,mreg38fd,mreg39fd,r0,r1,r2,r3,r12,r13,r14 released # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_IOCHECK # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released # Register r12 allocated .stabn 68,0,11,.Ll5 - P$TESTFP_$$_G0 .Ll5: # [11] end; mov r12,#104 sub r12,r11,r12 # Register r12 released fldmiad r12,{d8,d9,d10,d11,d12,d13,d14,d15} ldmea r11,{r4,r11,r13,r15} .Lj10: .long .Lj9 .Lj9: # value: 0d+1.50000000000000E+001 .byte 0,0,0,0,0,0,46,64 .Lj14: .long .Lj13 .Lj13: # value: 0d+1.400000000E+01 .byte 0,0,96,65 .Lj18: .long .Lj17 .Lj17: # value: 0d+1.300000000E+01 .byte 0,0,80,65 .Lj22: .long .Lj21 .Lj21: # value: 0d+1.200000000E+01 .byte 0,0,64,65 .Lj26: .long .Lj25 .Lj25: # value: 0d+1.100000000E+01 .byte 0,0,48,65 .Lj30: .long .Lj29 .Lj29: # value: 0d+1.000000000E+01 .byte 0,0,32,65 .Lj34: .long .Lj33 .Lj33: # value: 0d+9.000000000E+00 .byte 0,0,16,65 .Lj38: .long .Lj37 .Lj37: # value: 0d+8.000000000E+00 .byte 0,0,0,65 .Lj42: .long .Lj41 .Lj41: # value: 0d+7.000000000E+00 .byte 0,0,224,64 .Lj46: .long .Lj45 .Lj45: # value: 0d+6.000000000E+00 .byte 0,0,192,64 .Lj50: .long .Lj49 .Lj49: # value: 0d+5.000000000E+00 .byte 0,0,160,64 .Lj54: .long .Lj53 .Lj53: # value: 0d+4.000000000E+00 .byte 0,0,128,64 .Lj58: .long .Lj57 .Lj57: # value: 0d+3.000000000E+00 .byte 0,0,64,64 .Lj62: .long .Lj61 .Lj61: # value: 0d+2.000000000E+00 .byte 0,0,0,64 .Lj66: .long .Lj65 .Lj65: # value: 0d+1.000000000E+00 .byte 0,0,128,63 .Lj67: .long U_$P$TESTFP_$$_D .Lj72: .long .Lj70 .Lj70: # value: 0d+1.20000000000000E+002 .byte 0,0,0,0,0,0,94,64 .Lj79: .long _$TESTFP$_Ld1 .Lj91: .long _$TESTFP$_Ld2 .Lj96: .long -32767 .Lj112: .long FPC_THREADVAR_RELOCATE .Lj113: .long U_$SYSTEM_$$_OUTPUT .Lj114: .long U_$SYSTEM_$$_OUTPUT+4 .Le0: .size P$TESTFP_$$_G0, .Le0 - P$TESTFP_$$_G0 .stabn 192,0,0,P$TESTFP_$$_G0-P$TESTFP_$$_G0 .stabn 224,0,0,.Lt2-P$TESTFP_$$_G0 .Lt2: .section .text.n_main .balign 4 .globl PASCALMAIN .type PASCALMAIN,#function PASCALMAIN: .globl main .type main,#function main: .stabs "main:F2",36,0,5,main # Temps allocated between r11-40 and r11-40 # Register r13,r11,r12 allocated .stabs "testfp.dpr",132,0,0,.Lf2 .Lf2: .stabn 68,0,12,.Ll6 - main .Ll6: # [12] begin mov r12,r13 stmfd r13!,{r11,r12,r14,r15} sub r11,r12,#4 # Register r12,r12 released sub r13,r13,#40 # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated blx FPC_INITIALIZEUNITS # Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released # Register r0,r1,r2,r3,r12,r13,r14 allocated .stabn 68,0,13,.Ll7 - main .Ll7: # [13] g0; blx P$TESTFP_$$_G0 # Register r0,r1,r2,r3,r12,r13,r14 released .stabn 68,0,14,.Ll8 - main .Ll8: # [14] end. blx FPC_DO_EXIT ldmea r11,{r11,r13,r15} .Le1: .size main, .Le1 - main .stabn 192,0,0,main-main .stabn 224,0,0,.Lt1-main .Lt1: .section .text .section .fpc.n_links .long DEBUGINFO_$P$TESTFP .long DEBUGSTART_$P$TESTFP .long DEBUGEND_$P$TESTFP # End asmlist al_procedures # Begin asmlist al_globals .section .bss .balign 8 # [6] var d: double; .globl U_$P$TESTFP_$$_D .type U_$P$TESTFP_$$_D,%object .size U_$P$TESTFP_$$_D,8 U_$P$TESTFP_$$_D: .zero 8 .section .data.n_THREADVARLIST_$P$TESTFP .balign 4 .globl THREADVARLIST_$P$TESTFP .type THREADVARLIST_$P$TESTFP,#object THREADVARLIST_$P$TESTFP: .long 0 # [15] .Le2: .size THREADVARLIST_$P$TESTFP, .Le2 - THREADVARLIST_$P$TESTFP .section .data.n_INITFINAL .balign 4 .globl INITFINAL .type INITFINAL,#object INITFINAL: .long 2,0 .long INIT$_$SYSTEM .long 0,0 .long FINALIZE$_$OBJPAS .Le3: .size INITFINAL, .Le3 - INITFINAL .section .data.n_FPC_THREADVARTABLES .balign 4 .globl FPC_THREADVARTABLES .type FPC_THREADVARTABLES,#object FPC_THREADVARTABLES: .long 3 .long THREADVARLIST_$SYSTEM .long THREADVARLIST_$OBJPAS .long THREADVARLIST_$P$TESTFP .Le4: .size FPC_THREADVARTABLES, .Le4 - FPC_THREADVARTABLES .section .data.n_FPC_RESOURCESTRINGTABLES .balign 4 .globl FPC_RESOURCESTRINGTABLES .type FPC_RESOURCESTRINGTABLES,#object FPC_RESOURCESTRINGTABLES: .long 0 .Le5: .size FPC_RESOURCESTRINGTABLES, .Le5 - FPC_RESOURCESTRINGTABLES .section .data.n_FPC_WIDEINITTABLES .balign 4 .globl FPC_WIDEINITTABLES .type FPC_WIDEINITTABLES,#object FPC_WIDEINITTABLES: .long 0 .Le6: .size FPC_WIDEINITTABLES, .Le6 - FPC_WIDEINITTABLES .section .data.n_FPC_RESSTRINITTABLES .balign 4 .globl FPC_RESSTRINITTABLES .type FPC_RESSTRINITTABLES,#object FPC_RESSTRINITTABLES: .long 0 .Le7: .size FPC_RESSTRINITTABLES, .Le7 - FPC_RESSTRINITTABLES .section .fpc.n_version .balign 8 .ascii "FPC 2.7.1 [2012/03/17] for arm - Linux" .section .data.n___stklen .balign 4 .globl __stklen .type __stklen,#object __stklen: .long 8388608 .section .data.n___heapsize .balign 4 .globl __heapsize .type __heapsize,#object __heapsize: .long 0 .section .data.n___fpc_valgrind .globl __fpc_valgrind .type __fpc_valgrind,#object __fpc_valgrind: .byte 0 .section .data.n_FPC_RESLOCATION .balign 4 .globl FPC_RESLOCATION .type FPC_RESLOCATION,#object FPC_RESLOCATION: .long 0 # End asmlist al_globals # Begin asmlist al_const # End asmlist al_const # Begin asmlist al_typedconsts .section .rodata.n__$TESTFP$_Ld1 .balign 4 .globl _$TESTFP$_Ld1 _$TESTFP$_Ld1: .ascii "\026zssssssssssssssdd pass\000" .section .rodata.n__$TESTFP$_Ld2 .balign 4 .globl _$TESTFP$_Ld2 _$TESTFP$_Ld2: .ascii "\031zssssssssssssssdd fail d=\000" # End asmlist al_typedconsts # Begin asmlist al_rotypedconsts # End asmlist al_rotypedconsts # Begin asmlist al_threadvars # End asmlist al_threadvars # Begin asmlist al_imports # End asmlist al_imports # Begin asmlist al_exports # End asmlist al_exports # Begin asmlist al_resources # End asmlist al_resources # Begin asmlist al_rtti # End asmlist al_rtti # Begin asmlist al_dwarf_frame # End asmlist al_dwarf_frame # Begin asmlist al_dwarf_info # End asmlist al_dwarf_info # Begin asmlist al_dwarf_abbrev # End asmlist al_dwarf_abbrev # Begin asmlist al_dwarf_line # End asmlist al_dwarf_line # Begin asmlist al_picdata # End asmlist al_picdata # Begin asmlist al_resourcestrings # End asmlist al_resourcestrings # Begin asmlist al_objc_data # End asmlist al_objc_data # Begin asmlist al_objc_pools # End asmlist al_objc_pools # Begin asmlist al_end .section .text.z_DEBUGEND_$P$TESTFP .globl DEBUGEND_$P$TESTFP .type DEBUGEND_$P$TESTFP,#object DEBUGEND_$P$TESTFP: .stabs "",100,0,0,.Lf4 .Lf4: # End asmlist al_end .section .note.GNU-stack,"",%progbits
program testfp; {$linklib gcc} {$linklib c} {$link testfpfunctions} function zssssssssssssssdd(a:single;b:single;c:single;d:single;e:single;f:single;g:single;h:single;i:single;j:single;k:single;l:single;m:single;n:single;o:double):double;cdecl;external; var d: double; procedure g0; begin d := zssssssssssssssdd(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); if d=120 then writeln('zssssssssssssssdd pass') else begin writeln('zssssssssssssssdd fail d=',d) ; {halt} end; flush(output); end; begin g0; end.
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel