irix6.5 bootstrap failure in mips/mips.c
Richard Sandiford
rsandifo@redhat.com
Thu Apr 4 11:41:00 GMT 2002
Hi David,
Thanks for the catch, sorry for taking so long to respond.
"Billinghurst, David (CRTS)" <David.Billinghurst@riotinto.com> writes:
> The error is
>
> > "/exd4/billingd/src/gcc/gcc/config/mips/mips.c", line 4026: error(1565):
> > struct "mips_args" has no field "__fp_regs"
> > ? cum->fp_regs
> > ^
>
> The
>
> #define fp_regs __fp_regs
>
> comes from /usr/include/sys/ucontext.h
>
> #if _SGIAPI && !defined(__SGI_NOUCONTEXT_COMPAT)
> #define fpregset __fpregset
> #define fp_r __fp_r
> #define fp_dregs __fp_dregs
> #define fp_fregs __fp_fregs
> #define fp_regs __fp_regs
> #define fp_csr __fp_csr
> #define fp_pad __fp_pad
> #define gregs __gregs
> #define fpregs __fpregs
> #define ucontext __ucontext
> #define sigaltstack _sigaltstack
> #endif
*sob*
It would certainly be nice if we could avoid including the file, but
I don't know enough about irix to change things myself. I'll just
rename the field like Eric suggested.
Patch tested on mips64-elf. OK to install?
Richard
* config/mips/mips.h (CUMULATIVE_ARGS): Rename fp_regs to num_fprs
to avoid clash with Irix header file sys/ucontext.h. Rename gp_regs
to num_gprs for symmetry.
* config/mips/mips.c: Adjust accordingly.
Index: config/mips/mips.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v
retrieving revision 1.174
diff -u -p -d -r1.174 mips.h
--- config/mips/mips.h 2002/03/24 08:03:44 1.174
+++ config/mips/mips.h 2002/04/04 15:05:06
@@ -2794,10 +2794,10 @@ typedef struct mips_args {
/* For EABI, the number of integer registers used so far. For other
ABIs, the number of words passed in registers (whether integer
or floating-point). */
- unsigned int gp_regs;
+ unsigned int num_gprs;
/* For EABI, the number of floating-point registers used so far. */
- unsigned int fp_regs;
+ unsigned int num_fprs;
/* The number of words passed on the stack. */
unsigned int stack_words;
Index: config/mips/mips.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v
retrieving revision 1.188
diff -u -p -d -r1.188 mips.c
--- config/mips/mips.c 2002/03/24 21:37:40 1.188
+++ config/mips/mips.c 2002/04/04 15:05:06
@@ -4023,8 +4023,8 @@ mips_arg_info (cum, mode, type, named, i
The EABI allocates the floating-point registers separately,
but the other ABIs allocate them like integer registers. */
info->reg_offset = (mips_abi == ABI_EABI && info->fpr_p
- ? cum->fp_regs
- : cum->gp_regs);
+ ? cum->num_fprs
+ : cum->num_gprs);
if (even_reg_p)
info->reg_offset += info->reg_offset & 1;
@@ -4102,9 +4102,9 @@ function_arg_advance (cum, mode, type, n
cum->fp_code += (mode == SFmode ? 1 : 2) << ((cum->arg_number - 1) * 2);
if (mips_abi != ABI_EABI || !info.fpr_p)
- cum->gp_regs = info.reg_offset + info.reg_words;
+ cum->num_gprs = info.reg_offset + info.reg_words;
else if (info.reg_words > 0)
- cum->fp_regs += FP_INC;
+ cum->num_fprs += FP_INC;
if (info.stack_words > 0)
cum->stack_words = info.stack_offset + info.stack_words;
@@ -4279,9 +4279,9 @@ mips_setup_incoming_varargs (cum, mode,
FUNCTION_ARG_ADVANCE (local_cum, mode, type, 1);
/* Found out how many registers we need to save. */
- gp_saved = MAX_ARGS_IN_REGISTERS - local_cum.gp_regs;
+ gp_saved = MAX_ARGS_IN_REGISTERS - local_cum.num_gprs;
fp_saved = (EABI_FLOAT_VARARGS_P
- ? MAX_ARGS_IN_REGISTERS - local_cum.fp_regs
+ ? MAX_ARGS_IN_REGISTERS - local_cum.num_fprs
: 0);
if (!no_rtl)
@@ -4302,7 +4302,7 @@ mips_setup_incoming_varargs (cum, mode,
if (mips_abi != ABI_EABI && BYTES_BIG_ENDIAN)
MEM_SET_IN_STRUCT_P (mem, 1);
- move_block_from_reg (local_cum.gp_regs + GP_ARG_FIRST, mem,
+ move_block_from_reg (local_cum.num_gprs + GP_ARG_FIRST, mem,
gp_saved, gp_saved * UNITS_PER_WORD);
}
if (fp_saved > 0)
@@ -4321,7 +4321,7 @@ mips_setup_incoming_varargs (cum, mode,
mode = TARGET_SINGLE_FLOAT ? SFmode : DFmode;
- for (i = local_cum.fp_regs; i < MAX_ARGS_IN_REGISTERS; i += FP_INC)
+ for (i = local_cum.num_fprs; i < MAX_ARGS_IN_REGISTERS; i += FP_INC)
{
rtx ptr = plus_constant (virtual_incoming_args_rtx, off);
emit_move_insn (gen_rtx_MEM (mode, ptr),
@@ -4412,7 +4412,7 @@ mips_va_start (stdarg_p, valist, nextarg
int gpr_save_area_size;
gpr_save_area_size
- = (MAX_ARGS_IN_REGISTERS - cum->gp_regs) * UNITS_PER_WORD;
+ = (MAX_ARGS_IN_REGISTERS - cum->num_gprs) * UNITS_PER_WORD;
if (EABI_FLOAT_VARARGS_P)
{
@@ -4470,7 +4470,7 @@ mips_va_start (stdarg_p, valist, nextarg
/* Likewise emit code to initialize FOFF, the offset from FTOP
of the next FPR argument. */
fpr_save_area_size
- = (MAX_ARGS_IN_REGISTERS - cum->fp_regs) * UNITS_PER_FPREG;
+ = (MAX_ARGS_IN_REGISTERS - cum->num_fprs) * UNITS_PER_FPREG;
t = build (MODIFY_EXPR, TREE_TYPE (foff), foff,
build_int_2 (fpr_save_area_size, 0));
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
@@ -4502,7 +4502,9 @@ mips_va_start (stdarg_p, valist, nextarg
if (mips_abi == ABI_N32
|| mips_abi == ABI_64
|| mips_abi == ABI_MEABI)
- ofs = (cum->gp_regs < MAX_ARGS_IN_REGISTERS ? 0 : -UNITS_PER_WORD);
+ ofs = (cum->num_gprs < MAX_ARGS_IN_REGISTERS
+ ? 0
+ : -UNITS_PER_WORD);
else
ofs = -UNITS_PER_WORD;
}
More information about the Gcc-bugs
mailing list