Daniël Mantione wrote:
Please use the command line option -sr to check the generated code
before register allocation.
Done and attatched.
You can likely find the cause in there.
The code with imaginary registers looks correct to me. It seems to load
each parameter into a seperate even numbered imaginary register (using
odd numbered imaginary registers as temporaries in the process)
allocating them as it goes. Then copies them to the locations needed for
the function call deallocating them as it goes.
So it seems to me that the problem is in the translation of the form
using imaginary registers to the form using real registers. Can you
explain (or point me to documentation on) how this form is translated
into a form using real registers. In particular what exactly happens
when there are not enough real registers free to assign a real register
for every imaginary register that is in use at a given time?
My current suspiscion is that something is missing regarding handling of
running out of VFP registers and it hasn't been noticed before because
noone has tried to do what i'm doing (implementing a calling convention
using VFP registers and then stress testing it) but i've no idea where
to look in the sourcecode to confirm/refute that idea.
.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!,{r11,r12,r14,r15}
sub r11,r12,#4
# Register r12,r12 released
sub r13,r13,#40
# Register ireg16 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 ireg16,.Lj10
# Register ireg16 released
# Register mreg49fd allocated
fldd mreg49fd,[ireg16]
# Register mreg49fd released
# Register mreg48fd allocated
fcpyd mreg48fd,mreg49fd
# Register ireg17 allocated
ldr ireg17,.Lj14
# Register ireg17 released
# Register mreg51fs allocated
flds mreg51fs,[ireg17]
# Register mreg51fs released
# Register mreg50fs allocated
fcpys mreg50fs,mreg51fs
# Register ireg18 allocated
ldr ireg18,.Lj18
# Register ireg18 released
# Register mreg53fs allocated
flds mreg53fs,[ireg18]
# Register mreg53fs released
# Register mreg52fs allocated
fcpys mreg52fs,mreg53fs
# Register ireg19 allocated
ldr ireg19,.Lj22
# Register ireg19 released
# Register mreg55fs allocated
flds mreg55fs,[ireg19]
# Register mreg55fs released
# Register mreg54fs allocated
fcpys mreg54fs,mreg55fs
# Register ireg20 allocated
ldr ireg20,.Lj26
# Register ireg20 released
# Register mreg57fs allocated
flds mreg57fs,[ireg20]
# Register mreg57fs released
# Register mreg56fs allocated
fcpys mreg56fs,mreg57fs
# Register ireg21 allocated
ldr ireg21,.Lj30
# Register ireg21 released
# Register mreg59fs allocated
flds mreg59fs,[ireg21]
# Register mreg59fs released
# Register mreg58fs allocated
fcpys mreg58fs,mreg59fs
# Register ireg22 allocated
ldr ireg22,.Lj34
# Register ireg22 released
# Register mreg61fs allocated
flds mreg61fs,[ireg22]
# Register mreg61fs released
# Register mreg60fs allocated
fcpys mreg60fs,mreg61fs
# Register ireg23 allocated
ldr ireg23,.Lj38
# Register ireg23 released
# Register mreg63fs allocated
flds mreg63fs,[ireg23]
# Register mreg63fs released
# Register mreg62fs allocated
fcpys mreg62fs,mreg63fs
# Register ireg24 allocated
ldr ireg24,.Lj42
# Register ireg24 released
# Register mreg65fs allocated
flds mreg65fs,[ireg24]
# Register mreg65fs released
# Register mreg64fs allocated
fcpys mreg64fs,mreg65fs
# Register ireg25 allocated
ldr ireg25,.Lj46
# Register ireg25 released
# Register mreg67fs allocated
flds mreg67fs,[ireg25]
# Register mreg67fs released
# Register mreg66fs allocated
fcpys mreg66fs,mreg67fs
# Register ireg26 allocated
ldr ireg26,.Lj50
# Register ireg26 released
# Register mreg69fs allocated
flds mreg69fs,[ireg26]
# Register mreg69fs released
# Register mreg68fs allocated
fcpys mreg68fs,mreg69fs
# Register ireg27 allocated
ldr ireg27,.Lj54
# Register ireg27 released
# Register mreg71fs allocated
flds mreg71fs,[ireg27]
# Register mreg71fs released
# Register mreg70fs allocated
fcpys mreg70fs,mreg71fs
# Register ireg28 allocated
ldr ireg28,.Lj58
# Register ireg28 released
# Register mreg73fs allocated
flds mreg73fs,[ireg28]
# Register mreg73fs released
# Register mreg72fs allocated
fcpys mreg72fs,mreg73fs
# Register ireg29 allocated
ldr ireg29,.Lj62
# Register ireg29 released
# Register mreg75fs allocated
flds mreg75fs,[ireg29]
# Register mreg75fs released
# Register mreg74fs allocated
fcpys mreg74fs,mreg75fs
# Register ireg30 allocated
ldr ireg30,.Lj66
# Register ireg30 released
# Register mreg77fs allocated
flds mreg77fs,[ireg30]
# Register mreg77fs released
# Register mreg76fs allocated
fcpys mreg76fs,mreg77fs
# Register mreg48fd released
# Register d7 allocated
fcpyd d7,mreg48fd
# Register mreg50fs released
# Register s13 allocated
fcpys s13,mreg50fs
# Register mreg52fs released
# Register s12 allocated
fcpys s12,mreg52fs
# Register mreg54fs released
# Register s11 allocated
fcpys s11,mreg54fs
# Register mreg56fs released
# Register s10 allocated
fcpys s10,mreg56fs
# Register mreg58fs released
# Register s9 allocated
fcpys s9,mreg58fs
# Register mreg60fs released
# Register s8 allocated
fcpys s8,mreg60fs
# Register mreg62fs released
# Register s7 allocated
fcpys s7,mreg62fs
# Register mreg64fs released
# Register s6 allocated
fcpys s6,mreg64fs
# Register mreg66fs released
# Register s5 allocated
fcpys s5,mreg66fs
# Register mreg68fs released
# Register s4 allocated
fcpys s4,mreg68fs
# Register mreg70fs released
# Register s3 allocated
fcpys s3,mreg70fs
# Register mreg72fs released
# Register s2 allocated
fcpys s2,mreg72fs
# Register mreg74fs released
# Register s1 allocated
fcpys s1,mreg74fs
# Register mreg76fs released
# Register s0 allocated
fcpys s0,mreg76fs
# 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,d0
released
# Register mreg78fd allocated
fcpyd mreg78fd,d0
# Register ireg31 allocated
ldr ireg31,.Lj67
# Register mreg78fd,ireg31 released
fstd mreg78fd,[ireg31]
# Register ireg32 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 ireg32,.Lj67
# Register ireg32 released
# Register mreg79fd allocated
fldd mreg79fd,[ireg32]
# Register ireg33 allocated
ldr ireg33,.Lj72
# Register ireg33 released
# Register mreg80fd allocated
fldd mreg80fd,[ireg33]
# Register mreg79fd,mreg80fd released
fcmpd mreg79fd,mreg80fd
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 ireg35 allocated
mov ireg35,r0
# Register ireg35 released
# Register ireg34 allocated
mov ireg34,ireg35
# Register ireg36 allocated
mov ireg36,ireg34
# Register ireg38 allocated
ldr ireg38,.Lj79
# Register ireg38 released
# Register ireg37 allocated
mov ireg37,ireg38
# Register ireg39 allocated
mov ireg39,#0
# Register ireg36 released
# Register r1 allocated
mov r1,ireg36
# Register ireg37 released
# Register r2 allocated
mov r2,ireg37
# Register ireg39 released
# Register r0 allocated
mov r0,ireg39
# Register r1,r2,r0 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 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 ireg40 allocated
mov ireg40,ireg34
# Register ireg40 released
# Register r0 allocated
mov r0,ireg40
# Register r0 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 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 released
# Register ireg34 sync
# Register ireg34 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 ireg42 allocated
mov ireg42,r0
# Register ireg42 released
# Register ireg41 allocated
mov ireg41,ireg42
# Register ireg43 allocated
mov ireg43,ireg41
# Register ireg45 allocated
ldr ireg45,.Lj91
# Register ireg45 released
# Register ireg44 allocated
mov ireg44,ireg45
# Register ireg46 allocated
mov ireg46,#0
# Register ireg43 released
# Register r1 allocated
mov r1,ireg43
# Register ireg44 released
# Register r2 allocated
mov r2,ireg44
# Register ireg46 released
# Register r0 allocated
mov r0,ireg46
# Register r1,r2,r0 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 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 ireg47 allocated
ldr ireg47,.Lj96
# Register ireg48 allocated
mvn ireg48,#0
# Register ireg49 allocated
ldr ireg49,.Lj67
# Register ireg49 released
# Register mreg82fd allocated
fldd mreg82fd,[ireg49]
# Register mreg82fd released
# Register mreg81fd allocated
fcpyd mreg81fd,mreg82fd
# Register ireg50 allocated
mov ireg50,ireg41
# Register ireg51 allocated
mov ireg51,#1
# Register ireg47 released
# Register r2 allocated
mov r2,ireg47
# Register ireg48 released
# Register r1 allocated
mov r1,ireg48
# Register mreg81fd released
# Register d0 allocated
fcpyd d0,mreg81fd
# Register ireg50 released
# Register r3 allocated
mov r3,ireg50
# Register ireg51 released
# Register r0 allocated
mov r0,ireg51
# Register r2,r1,d0,r3,r0 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 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 ireg52 allocated
mov ireg52,ireg41
# Register ireg52 released
# Register r0 allocated
mov r0,ireg52
# Register r0 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 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 released
# Register ireg41 sync
# Register ireg41 released
.Lj84:
# Register ireg54 allocated
.stabn 68,0,10,.Ll4 - P$TESTFP_$$_G0
.Ll4:
# [10] flush(output);
ldr ireg54,.Lj112
# Register ireg54 released
# Register ireg53 allocated
ldr ireg53,[ireg54]
cmp ireg53,#0
beq .Lj110
# Register r0,ireg55 allocated
ldr ireg55,.Lj113
# Register ireg55 released
ldr r0,[ireg55]
# Register r0,ireg53 released
# Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 allocated
blx ireg53
# Register r0,r1,r2,r3,r12,r13,r14,f0,f1,f2,f3 released
# Register r0 allocated
# Register r0 released
# Register ireg56 allocated
mov ireg56,r0
b .Lj111
.Lj110:
# Register ireg57 allocated
ldr ireg57,.Lj114
# Register ireg57 released
mov ireg56,ireg57
.Lj111:
# Register ireg56 released
# Register ireg58 allocated
mov ireg58,ireg56
# Register ireg58 released
# Register r0 allocated
mov r0,ireg58
# Register r0 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 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
.stabn 68,0,11,.Ll5 - P$TESTFP_$$_G0
.Ll5:
# [11] end;
ldmea r11,{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
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel