This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: move init_real_once invocation
On Thu, Sep 19, 2002 at 06:54:39PM -0400, Kaveh R. Ghazi wrote:
> Or send me the patch and I'll give it a whirl. I've got a 4-CPU irix6
> box, I could be done by early tomorrow morning.
Here ya go.
r~
Index: mips.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v
retrieving revision 1.227
diff -c -p -d -r1.227 mips.c
*** mips.c 14 Sep 2002 13:39:55 -0000 1.227
--- mips.c 19 Sep 2002 22:56:19 -0000
*************** int mips_split_addresses;
*** 352,362 ****
/* Generating calls to position independent functions? */
enum mips_abicalls_type mips_abicalls;
- /* High and low marks for floating point values which we will accept
- as legitimate constants for LEGITIMATE_CONSTANT_P. These are
- initialized in override_options. */
- REAL_VALUE_TYPE dfhigh, dflow, sfhigh, sflow;
-
/* Mode used for saving/restoring general purpose registers. */
static enum machine_mode gpr_mode;
--- 352,357 ----
*************** mips_const_double_ok (op, mode)
*** 821,857 ****
if (mode == VOIDmode)
return 1;
if (mode != SFmode && mode != DFmode)
return 0;
if (op == CONST0_RTX (mode))
return 1;
- /* ??? li.s does not work right with SGI's Irix 6 assembler. */
- if (mips_abi != ABI_32 && mips_abi != ABI_O64 && mips_abi != ABI_EABI)
- return 0;
-
- REAL_VALUE_FROM_CONST_DOUBLE (d, op);
-
- if (REAL_VALUE_ISNAN (d))
- return FALSE;
-
- if (REAL_VALUE_NEGATIVE (d))
- d = REAL_VALUE_NEGATE (d);
-
- if (mode == DFmode)
- {
- if (REAL_VALUES_LESS (d, dfhigh)
- && REAL_VALUES_LESS (dflow, d))
- return 1;
- }
- else
- {
- if (REAL_VALUES_LESS (d, sfhigh)
- && REAL_VALUES_LESS (sflow, d))
- return 1;
- }
-
return 0;
}
--- 816,831 ----
if (mode == VOIDmode)
return 1;
+ /* We've no zero register in mips16 mode. */
+ if (TARGET_MIPS16)
+ return 0;
+
if (mode != SFmode && mode != DFmode)
return 0;
if (op == CONST0_RTX (mode))
return 1;
return 0;
}
*************** const_float_1_operand (op, mode)
*** 863,871 ****
enum machine_mode mode;
{
REAL_VALUE_TYPE d;
- static REAL_VALUE_TYPE onedf;
- static REAL_VALUE_TYPE onesf;
- static int one_initialized;
if (GET_CODE (op) != CONST_DOUBLE
|| mode != GET_MODE (op)
--- 837,842 ----
*************** const_float_1_operand (op, mode)
*** 874,892 ****
REAL_VALUE_FROM_CONST_DOUBLE (d, op);
! /* We only initialize these values if we need them, since we will
! never get called unless mips_isa >= 4. */
! if (! one_initialized)
! {
! onedf = REAL_VALUE_ATOF ("1.0", DFmode);
! onesf = REAL_VALUE_ATOF ("1.0", SFmode);
! one_initialized = 1;
! }
!
! if (mode == DFmode)
! return REAL_VALUES_EQUAL (d, onedf);
! else
! return REAL_VALUES_EQUAL (d, onesf);
}
/* Return true if a memory load or store of REG plus OFFSET in MODE
--- 845,851 ----
REAL_VALUE_FROM_CONST_DOUBLE (d, op);
! return REAL_VALUES_EQUAL (d, dconst1);
}
/* Return true if a memory load or store of REG plus OFFSET in MODE
*************** override_options ()
*** 5309,5322 ****
mips16 = 1;
else
mips16 = 0;
-
- /* Initialize the high and low values for legitimate floating point
- constants. Rather than trying to get the accuracy down to the
- last bit, just use approximate ranges. */
- dfhigh = REAL_VALUE_ATOF ("1.0e300", DFmode);
- dflow = REAL_VALUE_ATOF ("1.0e-300", DFmode);
- sfhigh = REAL_VALUE_ATOF ("1.0e38", SFmode);
- sflow = REAL_VALUE_ATOF ("1.0e-38", SFmode);
mips_print_operand_punct['?'] = 1;
mips_print_operand_punct['#'] = 1;
--- 5268,5273 ----
Index: mips.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v
retrieving revision 1.142
diff -c -p -d -r1.142 mips.md
*** mips.md 17 Sep 2002 09:30:47 -0000 1.142
--- mips.md 19 Sep 2002 22:56:19 -0000
*************** move\\t%0,%z4\\n\\
*** 6402,6440 ****
{
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], SFmode)
! && !register_operand (operands[1], SFmode)
! && (TARGET_MIPS16
! || ((GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0)
! && operands[1] != CONST0_RTX (SFmode))))
! {
! rtx temp = force_reg (SFmode, operands[1]);
! emit_move_insn (operands[0], temp);
! DONE;
! }
}")
(define_insn "movsf_internal1"
[(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,f,f,R,m,*f,*d,*d,*d,*d,*R,*m")
! (match_operand:SF 1 "general_operand" "f,G,R,Fm,fG,fG,*d,*f,*G*d,*R,*F*m,*d,*d"))]
"TARGET_HARD_FLOAT
&& (register_operand (operands[0], SFmode)
! || register_operand (operands[1], SFmode)
! || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
! || operands[1] == CONST0_RTX (SFmode))"
"* return mips_move_1word (operands, insn, FALSE);"
[(set_attr "type" "move,xfer,load,load,store,store,xfer,xfer,move,load,load,store,store")
(set_attr "mode" "SF")
(set_attr "length" "4,4,4,8,4,8,4,4,4,4,8,4,8")])
-
(define_insn "movsf_internal2"
[(set (match_operand:SF 0 "nonimmediate_operand" "=d,d,d,R,m")
! (match_operand:SF 1 "general_operand" " Gd,R,Fm,d,d"))]
"TARGET_SOFT_FLOAT && !TARGET_MIPS16
&& (register_operand (operands[0], SFmode)
! || register_operand (operands[1], SFmode)
! || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
! || operands[1] == CONST0_RTX (SFmode))"
"* return mips_move_1word (operands, insn, FALSE);"
[(set_attr "type" "move,load,load,store,store")
(set_attr "mode" "SF")
--- 6402,6428 ----
{
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], SFmode)
! && !nonmemory_operand (operands[1], SFmode))
! operands[1] = force_reg (SFmode, operands[1]);
}")
(define_insn "movsf_internal1"
[(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,f,f,R,m,*f,*d,*d,*d,*d,*R,*m")
! (match_operand:SF 1 "general_operand" "f,G,R,m,fG,fG,*d,*f,*G*d,*R,*m,*d,*d"))]
"TARGET_HARD_FLOAT
&& (register_operand (operands[0], SFmode)
! || nonmemory_operand (operands[1], SFmode))"
"* return mips_move_1word (operands, insn, FALSE);"
[(set_attr "type" "move,xfer,load,load,store,store,xfer,xfer,move,load,load,store,store")
(set_attr "mode" "SF")
(set_attr "length" "4,4,4,8,4,8,4,4,4,4,8,4,8")])
(define_insn "movsf_internal2"
[(set (match_operand:SF 0 "nonimmediate_operand" "=d,d,d,R,m")
! (match_operand:SF 1 "general_operand" " Gd,R,m,d,d"))]
"TARGET_SOFT_FLOAT && !TARGET_MIPS16
&& (register_operand (operands[0], SFmode)
! || nonmemory_operand (operands[1], SFmode))"
"* return mips_move_1word (operands, insn, FALSE);"
[(set_attr "type" "move,load,load,store,store")
(set_attr "mode" "SF")
*************** move\\t%0,%z4\\n\\
*** 6442,6448 ****
(define_insn ""
[(set (match_operand:SF 0 "nonimmediate_operand" "=d,y,d,d,d,R,m")
! (match_operand:SF 1 "general_operand" "d,d,y,R,Fm,d,d"))]
"TARGET_MIPS16
&& (register_operand (operands[0], SFmode)
|| register_operand (operands[1], SFmode))"
--- 6430,6436 ----
(define_insn ""
[(set (match_operand:SF 0 "nonimmediate_operand" "=d,y,d,d,d,R,m")
! (match_operand:SF 1 "nonimmediate_operand" "d,d,y,R,m,d,d"))]
"TARGET_MIPS16
&& (register_operand (operands[0], SFmode)
|| register_operand (operands[1], SFmode))"
*************** move\\t%0,%z4\\n\\
*** 6462,6516 ****
{
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], DFmode)
! && !register_operand (operands[1], DFmode)
! && (TARGET_MIPS16
! || ((GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 0)
! && operands[1] != CONST0_RTX (DFmode))))
! {
! rtx temp = force_reg (DFmode, operands[1]);
! emit_move_insn (operands[0], temp);
! DONE;
! }
}")
(define_insn "movdf_internal1"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,R,To,f,*f,*d,*d,*d,*d,*R,*T")
! (match_operand:DF 1 "general_operand" "f,R,To,fG,fG,F,*d,*f,*d*G,*R,*T*F,*d,*d"))]
"TARGET_HARD_FLOAT && !(TARGET_FLOAT64 && !TARGET_64BIT)
&& TARGET_DOUBLE_FLOAT
&& (register_operand (operands[0], DFmode)
! || register_operand (operands[1], DFmode)
! || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
! || operands[1] == CONST0_RTX (DFmode))"
"* return mips_move_2words (operands, insn); "
! [(set_attr "type" "move,load,load,store,store,load,xfer,xfer,move,load,load,store,store")
(set_attr "mode" "DF")
! (set_attr "length" "4,8,16,8,16,16,8,8,8,8,16,8,16")])
(define_insn "movdf_internal1a"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,R,R,To,To,*d,*d,*d,*To,*R,*d")
! (match_operand:DF 1 "general_operand" " f,To,f,G,f,G,*F,*To,*R,*d,*d,*d"))]
"TARGET_HARD_FLOAT && (TARGET_FLOAT64 && !TARGET_64BIT)
&& TARGET_DOUBLE_FLOAT
&& (register_operand (operands[0], DFmode)
! || register_operand (operands[1], DFmode)
! || (GET_CODE (operands [0]) == MEM
! && ((GET_CODE (operands[1]) == CONST_INT
! && INTVAL (operands[1]) == 0)
! || operands[1] == CONST0_RTX (DFmode))))"
"* return mips_move_2words (operands, insn); "
! [(set_attr "type" "move,load,store,store,store,store,load,load,load,store,store,move")
(set_attr "mode" "DF")
! (set_attr "length" "4,8,4,4,8,8,8,8,4,8,4,4")])
(define_insn "movdf_internal2"
[(set (match_operand:DF 0 "nonimmediate_operand" "=d,d,d,R,To,d,f,f")
! (match_operand:DF 1 "general_operand" "dG,R,ToF,d,d,f,d,f"))]
"(TARGET_SOFT_FLOAT || TARGET_SINGLE_FLOAT) && !TARGET_MIPS16
&& (register_operand (operands[0], DFmode)
! || register_operand (operands[1], DFmode)
! || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0)
! || operands[1] == CONST0_RTX (DFmode))"
"* return mips_move_2words (operands, insn); "
[(set_attr "type" "move,load,load,store,store,xfer,load,move")
(set_attr "mode" "DF")
--- 6450,6489 ----
{
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], DFmode)
! && !nonmemory_operand (operands[1], DFmode))
! operands[1] = force_reg (DFmode, operands[1]);
}")
(define_insn "movdf_internal1"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,R,To,*f,*d,*d,*d,*d,*R,*T")
! (match_operand:DF 1 "general_operand" "f,R,To,fG,fG,*d,*f,*d*G,*R,*T,*d,*d"))]
"TARGET_HARD_FLOAT && !(TARGET_FLOAT64 && !TARGET_64BIT)
&& TARGET_DOUBLE_FLOAT
&& (register_operand (operands[0], DFmode)
! || nonmemory_operand (operands[1], DFmode))"
"* return mips_move_2words (operands, insn); "
! [(set_attr "type" "move,load,load,store,store,xfer,xfer,move,load,load,store,store")
(set_attr "mode" "DF")
! (set_attr "length" "4,8,16,8,16,8,8,8,8,16,8,16")])
(define_insn "movdf_internal1a"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,R,R,To,To,*d,*d,*To,*R,*d")
! (match_operand:DF 1 "general_operand" " f,To,f,G,f,G,*To,*R,*d,*d,*d"))]
"TARGET_HARD_FLOAT && (TARGET_FLOAT64 && !TARGET_64BIT)
&& TARGET_DOUBLE_FLOAT
&& (register_operand (operands[0], DFmode)
! || nonmemory_operand (operands[1], DFmode))"
"* return mips_move_2words (operands, insn); "
! [(set_attr "type" "move,load,store,store,store,store,load,load,store,store,move")
(set_attr "mode" "DF")
! (set_attr "length" "4,8,4,4,8,8,8,4,8,4,4")])
(define_insn "movdf_internal2"
[(set (match_operand:DF 0 "nonimmediate_operand" "=d,d,d,R,To,d,f,f")
! (match_operand:DF 1 "general_operand" "dG,R,To,d,d,f,d,f"))]
"(TARGET_SOFT_FLOAT || TARGET_SINGLE_FLOAT) && !TARGET_MIPS16
&& (register_operand (operands[0], DFmode)
! || nonmemory_operand (operands[1], DFmode))"
"* return mips_move_2words (operands, insn); "
[(set_attr "type" "move,load,load,store,store,xfer,load,move")
(set_attr "mode" "DF")
*************** move\\t%0,%z4\\n\\
*** 6518,6524 ****
(define_insn ""
[(set (match_operand:DF 0 "nonimmediate_operand" "=d,y,d,d,d,R,To")
! (match_operand:DF 1 "general_operand" "d,d,y,R,ToF,d,d"))]
"TARGET_MIPS16
&& (register_operand (operands[0], DFmode)
|| register_operand (operands[1], DFmode))"
--- 6491,6497 ----
(define_insn ""
[(set (match_operand:DF 0 "nonimmediate_operand" "=d,y,d,d,d,R,To")
! (match_operand:DF 1 "nonimmediate_operand" "d,d,y,R,To,d,d"))]
"TARGET_MIPS16
&& (register_operand (operands[0], DFmode)
|| register_operand (operands[1], DFmode))"