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


Reply via email to