------- Comment #7 from danglin at gcc dot gnu dot org 2006-01-05 02:53 -------
The bug is as follows. The return from the call to
cxg1005__test_block__complex_pack__compose_from_cartesian___389
is in registers ret0 and ret1.
bl cxg1005__test_block__complex_pack__compose_from_cartesian___389,%r2
fcpy,sgl %fr12L,%fr4L
stw %r28,-16(%r30)
fldws -16(%r30),%fr19L
copy %r0,%r19
copy %r0,%r20
.loc 4 88 0
fcpy,sgl %fr13L,%fr4L
stw %r19,-496(%r30)
stw %r20,-492(%r30)
stw %r19,-488(%r30)
stw %r20,-484(%r30)
.loc 4 87 0
.loc 4 88 0
bl
cxg1005__test_block__complex_pack__compose_from_cartesian__3___395,%r
2
stw %r29,-16(%r30)
.loc 4 87 0
fldws -16(%r30),%fr21L
Prior to the call to
cxg1005__test_block__complex_pack__compose_from_cartesian__3___395, the
return value in ret1 is saved in the frame marker at -16(%r30). The
function cxg1005__test_block__complex_pack__compose_from_cartesian__3___395
is a leaf function and doesn't allocate a frame. It does a similar
register interchange clobbering the old value at -16(%r30).
.type
cxg1005__test_block__complex_pack__compose_from_cartesian__3___3
95, @function
.LFB50:
.loc 1 474 0
cxg1005__test_block__complex_pack__compose_from_cartesian__3___395:
.PROC
.CALLINFO FRAME=0,NO_CALLS
.ENTRY
.LVL3:
.LVL4:
.loc 1 477 0
fstws %fr4L,-16(%r30)
copy %r0,%r28
bv %r0(%r2)
ldw -16(%r30),%r29
.EXIT
.PROCEND
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20754