------- Additional Comments From hjl at lucon dot org 2005-05-15 00:12 ------- This patch
http://gcc.gnu.org/ml/gcc-patches/2005-05/msg01151.html seems the cause. expmed.c compiled with the after compiler has .mii nop 0 (p6) addl r48 = @ltoffx(insn_data#+32768), r1 ;; nop 0 .mfb (p6) ld8.mov r48 = [r48], insn_data#+32768 .loc 1 638 0 nop 0 ... .loc 1 742 0 .mmi ld8 r14 = [r48] mov r54 = r38 mov r55 = r44 ;; .mmi adds r14 = 72, r14 ;; ld8 r8 = [r14] nop 0 ;; .mmi ld8 r14 = [r8], 8 ;; ld8 r1 = [r8] mov b6 = r14 .bbb nop 0 nop 0 br.call.sptk.many b0 = b6 for 740 /* If this machine's insv insists on a register, 741 get VALUE1 into a register. */ 742 if (! ((*insn_data[(int) CODE_FOR_insv].operand[3].predicate) 743 (value1, maxmode))) 744 value1 = force_reg (maxmode, value1) while the before compiler generates: .mmb addl r49 = @ltoffx(insn_data#+16384), r1 .loc 1 630 0 ld4 r39 = [r37] .loc 1 638 0 nop 0 .mmb cmp.ne p6, p7 = 39, r14 .loc 1 632 0 st4 [r37] = r15 .loc 1 638 0 (p7) br.cond.dpnt .L1908 ;; .mii ld8.mov r49 = [r49], insn_data#+16384 nop 0 ;; ... .loc 1 742 0 .mmi ld8 r14 = [r49] mov r54 = r38 mov r55 = r44 ;; .mmi adds r14 = 72, r14 ;; ld8 r8 = [r14] nop 0 ;; .mmi ld8 r14 = [r8], 8 ;; ld8 r1 = [r8] mov b6 = r14 .bbb nop 0 nop 0 br.call.sptk.many b0 = b6 The difference is "insn_data#+32768" vs. "insn_data#+16384". -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21551