From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12622 invoked by alias); 12 Apr 2008 22:23:13 -0000 Received: (qmail 12480 invoked by uid 48); 12 Apr 2008 22:22:19 -0000 Date: Sat, 12 Apr 2008 22:23:00 -0000 Message-ID: <20080412222219.12479.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug c++/35838] FAIL: 22_locale/num_get/get/char/16.cc execution test, and 76 others In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "danglin at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-04/txt/msg00911.txt.bz2 ------- 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