I don't think my previous mail got through but if it does please disregard it, my suspiscions as to the cause of the problem were incorrect.
While testing my armhf porting work 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
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.
