This is the mail archive of the gcc-patches@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]

Re: 19991104 ICE compiling glibc


On Fri, Nov 05, 1999 at 11:55:26PM +1030, Alan Modra wrote:
> (insn 555 552 116 (set (reg/v:XF 3 ebx)
>         (mem:XF (plus:SI (reg:SI 6 ebp)
>                 (const_int -160 [0xffffff60])) 0)) 86 {*movxf_1} (nil)
>     (nil))
> ../sysdeps/libm-ieee754/s_csinhl.c:121: Internal compiler error in
> `reload_cse_simplify_operands', at reload1.c:9186

Fixed thus.  It's clear I've never properly tested -msoft-float
with the new ia32 backend.  *blush*

Kenner, this is another test case for you where your new regclass
code is making silly choices.


r~


        * i386.c (split_xf): New.
        * i386-protos.h: Declare it.
        * i386.md (movxf_1): Add general regs alternatives.
        (movxf_1+1): New splitter for same.

Index: config/i386/i386-protos.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386-protos.h,v
retrieving revision 1.1
diff -c -p -d -r1.1 i386-protos.h
*** i386-protos.h	1999/09/20 10:00:03	1.1
--- i386-protos.h	1999/11/05 18:17:36
*************** extern void print_operand PROTO((FILE*, 
*** 73,78 ****
--- 73,79 ----
  extern void print_operand_address PROTO((FILE*, rtx));
  
  extern void split_di PROTO((rtx[], int, rtx[], rtx[]));
+ extern void split_xf PROTO((rtx, rtx[3]));
  
  extern char *output_387_binary_op PROTO((rtx, rtx*));
  extern char *output_fix_trunc PROTO((rtx, rtx*));
Index: config/i386/i386.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.c,v
retrieving revision 1.102
diff -c -p -d -r1.102 i386.c
*** i386.c	1999/10/30 19:43:20	1.102
--- i386.c	1999/11/05 18:17:36
*************** split_di (operands, num, lo_half, hi_hal
*** 2995,3000 ****
--- 2995,3020 ----
  	abort();
      }
  }
+ 
+ void
+ split_xf (orig, out)
+      rtx orig;
+      rtx out[3];
+ {
+   if (REG_P (orig))
+     {
+       int regno = REGNO (orig);
+       out[0] = gen_rtx_REG (SImode, regno);
+       out[1] = gen_rtx_REG (SImode, regno + 1);
+       out[2] = gen_rtx_REG (SImode, regno + 2);
+     }
+   else
+     {
+       out[0] = change_address (orig, SImode, NULL_RTX);
+       out[1] = adj_offsettable_operand (out[0], 4);
+       out[2] = adj_offsettable_operand (out[0], 8);
+     }
+ }
  
  /* Output code to perform a 387 binary operation in INSN, one of PLUS,
     MINUS, MULT or DIV.  OPERANDS are the insn operands, where operands[3]
Index: config/i386/i386.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.md,v
retrieving revision 1.100
diff -c -p -d -r1.100 i386.md
*** i386.md	1999/10/29 21:45:05	1.100
--- i386.md	1999/11/05 18:17:36
***************
*** 1980,1987 ****
  }")
  
  (define_insn "*movxf_1"
!   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f")
! 	(match_operand:XF 1 "general_operand" "fm,f,G"))]
    ""
    "*
  {
--- 1980,1987 ----
  }")
  
  (define_insn "*movxf_1"
!   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o")
! 	(match_operand:XF 1 "general_operand" "fm,f,G,*ro,*r"))]
    ""
    "*
  {
***************
*** 2013,2022 ****
--- 2013,2036 ----
  	  return \"fld1\";
  	}
        break;
+ 
+     case 3: case 4:
+       return \"#\";
      }
    abort();
  }"
    [(set_attr "type" "fmov")])
+ 
+ (define_split
+   [(set (match_operand:XF 0 "nonimmediate_operand" "")
+ 	(match_operand:XF 1 "nonimmediate_operand" ""))]
+   "(REG_P (operands[0]) && ! FP_REGNO_P (REGNO (operands[0])))
+    || (REG_P (operands[1]) && ! FP_REGNO_P (REGNO (operands[1])))"
+   [(set (match_dup 0) (match_dup 3))
+    (set (match_dup 1) (match_dup 4))
+    (set (match_dup 2) (match_dup 5))]
+   "split_xf (operands[1], &operands[3]);
+    split_xf (operands[0], &operands[0]);")
  
  (define_insn "swapxf"
    [(set (match_operand:XF 0 "register_operand" "+f")


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