------- Comment #3 from danglin at gcc dot gnu dot org  2008-04-12 22:22 -------
The files locale-inst.o and wlocale-inst.o differ in size before and after
the change.  The first significant difference in code is here:

@@ -19075,7 +19075,7 @@ _ZNKSt8time_putIcSt19ostreambuf_iterator
        stw %r19,-32(%r30)
        stw %r11,32(%r3)
 .LCFI737:
-       extru %r23,7,8,%r11
+       extru %r24,7,8,%r11
        stw %r10,36(%r3)
 .LCFI738:
        extrs %r28,31,8,%r10
@@ -19110,11 +19110,11 @@ _ZNKSt8time_putIcSt19ostreambuf_iterator
        copy %r19,%r4
 .LBE3740:
        .loc 4 1136 0
-       stw %r24,-44(%r3)
+       stw %r23,-48(%r3)


Before the change, the code looked like this:

_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios
_basecPK2tmcc:
        .PROC
        .CALLINFO FRAME=128,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=11
        .ENTRY
.LVL1231:
        copy %r3,%r1
.LCFI733:
        stw %r2,-20(%r30)
.LCFI734:
        copy %r30,%r3
.LCFI735:
        stwm %r1,128(%r30)
.LCFI736:
        ldw -68(%r3),%r20
        ldw -64(%r3),%r28
        stw %r19,-32(%r30)
        stw %r11,32(%r3)
.LCFI737:
        extru %r23,7,8,%r11

r23 and r24 are argument registers.  The argument registers are allocated
in the following order: r26, r25, r24, r23.  Objects up to 64 bits are
passed in registers.  It sort of looks like we must be dealing with a 64-bit
object passed in r23 and r24.  The most significant 32 bits would be passed
in r23 and the least significant 32-bits in r24.  The extru instruction
extracts the most significant byte (unsigned) from the argument register.
Somehow, the patch seems to have affected the ordering of the least and
most significant parts. 


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35838

Reply via email to