This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

K6 patch (was: -march=k6 broken in 2.96 ?)


On Sat, Nov 13, 1999 at 09:36:50PM +0100, Remi Guyomarch wrote:
> On Sat, Nov 13, 1999 at 02:54:49PM +0100, Remi Guyomarch wrote:
> 
> The compiler segfault in this code in gcc/config/i386.c:1839 :
> 
>   /* Special case: on K6, [%esi] makes the instruction vector decoded.
>      Avoid this by transforming to [%esi+0].  */
>   if (ix86_cpu == PROCESSOR_K6 && !optimize_size
>       && base && !index && !disp
>       && REGNO_REG_CLASS (REGNO (base)) == SIREG)
>     disp = const0_rtx;
> 
> REGNO( base) seems to return base->fld[0].rtint if I followed the
> macros correctly. But base->fld[0].rtint == 675986544 which is obviously not
> a good index for regclass_map[].
[...]
> (gdb) print *base
> $2 = {code = SUBREG, mode = SImode, jump = 0, call = 0, unchanging = 0, volatil = 0,
>   in_struct = 0, used = 0, integrated = 0, frame_related = 0, fld = {{
>       rtwint = 675986544, rtint = 675986544, rtstr = 0x284abc70 "R", rtx = 0x284abc70,
>       rtvec = 0x284abc70, rttype = 675986544, rt_addr_diff_vec_flags = {
>         min_align = 112, base_after_vec = 0, min_after_vec = 0, max_after_vec = 1,
>         min_after_base = 1, max_after_base = 1, offset_unsigned = 1, 2, scale = 74},
>       rtbit = 0x284abc70, rttree = 0x284abc70, bb = 0x284abc70}}}

Does this patch makes any sens ? 
With it I can bootstrap the 1999-11-10 snapshot with BOOT_CFLAGS="-O2 -march=k6".
And the compiler still transform, for example, "movl %eax,(%esi)" to 
"movl %eax,0(%esi)".

--- egcs-19991110/gcc/config/i386/i386.c~	Sun Nov 14 15:26:05 1999
+++ egcs-19991110/gcc/config/i386/i386.c	Sun Nov 14 15:47:30 1999
@@ -1838,6 +1838,7 @@
      Avoid this by transforming to [%esi+0].  */
   if (ix86_cpu == PROCESSOR_K6 && !optimize_size
       && base && !index && !disp
+      && GET_CODE (base) == REG
       && REGNO_REG_CLASS (REGNO (base)) == SIREG)
     disp = const0_rtx;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]