------- 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