i386-opts.h: New.
* config/i386/i386-opts.h: New. * gcc/config/i386/i386.c (stringop_alg, ix86_cmodel, ix86_asm_dialect, ix86_regparm, ix86_abi, ix86_branch_cost, ix86_section_threshold): Remove. (ix86_handle_option): Move MAX_CODE_ALIGN define here. Handle OPT_malign_loops_, OPT_malign_jumps_, OPT_malign_functions_ and OPT_mbranch_cost_. (ix86_option_override_internal): Don't decode strings for options other than -march=, -mtune= and -mfpmath=. Don't allow for __attribute__ uses in remaining diagnostics for options with string arguments. Don't check for integer arguments being negative. * gcc/config/i386/i386.h (enum stringop_alg, enum calling_abi, enum tls_dialect, enum cmodel, enum asm_dialect): Move to i386-opts.h. (ix86_abi, ix86_tls_dialect, ix86_cmodel, ix86_asm_dialect, ix86_branch_cost, ix86_section_threshold): Remove. * gcc/config/i386/i386.opt (config/i386/i386-opts.h): New HeaderInclude. (malign-functions=, malign-jumps=, malign-loops=): Use UInteger but not Var. (masm=): Use Enum and Init. (asm_dialect): New Enum and EnumValue entries. (mbranch-cost=): Use UInteger. (mlarge-data-threshold=): Use UInteger and Init. (mcmodel=): Use Enum and Init. (cmodel): New Enum and EnumValue entries. (mpc): Replace with separate mpc32, mpc64 and mpc80 entries. (mpreferred-stack-boundary=, mincoming-stack-boundary=, mregparm=): Use UInteger. (mstringop-strategy=): Use Enum and Init. (stringop_alg): New Enum and EnumValue entries. (mtls-dialect=): Use Enum and Init. (tls_dialect): New Enum and EnumValue entries. (mabi=): Use Enum and Init. (calling_abi): New Enum and EnumValue entries. (mveclibabi=): Use Enum and Init. (ix86_veclibabi): New Enum and EnumValue entries. From-SVN: r173728
This commit is contained in:
parent
f67e203c1f
commit
7eb68c06bc
|
@ -1,3 +1,44 @@
|
|||
2011-05-13 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/i386/i386-opts.h: New.
|
||||
* gcc/config/i386/i386.c (stringop_alg, ix86_cmodel,
|
||||
ix86_asm_dialect, ix86_regparm, ix86_abi, ix86_branch_cost,
|
||||
ix86_section_threshold): Remove.
|
||||
(ix86_handle_option): Move MAX_CODE_ALIGN define here. Handle
|
||||
OPT_malign_loops_, OPT_malign_jumps_, OPT_malign_functions_ and
|
||||
OPT_mbranch_cost_.
|
||||
(ix86_option_override_internal): Don't decode strings for options
|
||||
other than -march=, -mtune= and -mfpmath=. Don't allow for
|
||||
__attribute__ uses in remaining diagnostics for options with
|
||||
string arguments. Don't check for integer arguments being
|
||||
negative.
|
||||
* gcc/config/i386/i386.h (enum stringop_alg, enum calling_abi,
|
||||
enum tls_dialect, enum cmodel, enum asm_dialect): Move to
|
||||
i386-opts.h.
|
||||
(ix86_abi, ix86_tls_dialect, ix86_cmodel, ix86_asm_dialect,
|
||||
ix86_branch_cost, ix86_section_threshold): Remove.
|
||||
* gcc/config/i386/i386.opt (config/i386/i386-opts.h): New
|
||||
HeaderInclude.
|
||||
(malign-functions=, malign-jumps=, malign-loops=): Use UInteger
|
||||
but not Var.
|
||||
(masm=): Use Enum and Init.
|
||||
(asm_dialect): New Enum and EnumValue entries.
|
||||
(mbranch-cost=): Use UInteger.
|
||||
(mlarge-data-threshold=): Use UInteger and Init.
|
||||
(mcmodel=): Use Enum and Init.
|
||||
(cmodel): New Enum and EnumValue entries.
|
||||
(mpc): Replace with separate mpc32, mpc64 and mpc80 entries.
|
||||
(mpreferred-stack-boundary=, mincoming-stack-boundary=,
|
||||
mregparm=): Use UInteger.
|
||||
(mstringop-strategy=): Use Enum and Init.
|
||||
(stringop_alg): New Enum and EnumValue entries.
|
||||
(mtls-dialect=): Use Enum and Init.
|
||||
(tls_dialect): New Enum and EnumValue entries.
|
||||
(mabi=): Use Enum and Init.
|
||||
(calling_abi): New Enum and EnumValue entries.
|
||||
(mveclibabi=): Use Enum and Init.
|
||||
(ix86_veclibabi): New Enum and EnumValue entries.
|
||||
|
||||
2011-05-13 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/rx/rx.md (mov expander): Fix use of
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
/* Definitions for option handling for IA-32.
|
||||
Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
Under Section 7 of GPL version 3, you are granted additional
|
||||
permissions described in the GCC Runtime Library Exception, version
|
||||
3.1, as published by the Free Software Foundation.
|
||||
|
||||
You should have received a copy of the GNU General Public License and
|
||||
a copy of the GCC Runtime Library Exception along with this program;
|
||||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef I386_OPTS_H
|
||||
#define I386_OPTS_H
|
||||
|
||||
/* Algorithm to expand string function with. */
|
||||
enum stringop_alg
|
||||
{
|
||||
no_stringop,
|
||||
libcall,
|
||||
rep_prefix_1_byte,
|
||||
rep_prefix_4_byte,
|
||||
rep_prefix_8_byte,
|
||||
loop_1_byte,
|
||||
loop,
|
||||
unrolled_loop
|
||||
};
|
||||
|
||||
/* Available call abi. */
|
||||
enum calling_abi
|
||||
{
|
||||
SYSV_ABI = 0,
|
||||
MS_ABI = 1
|
||||
};
|
||||
|
||||
enum tls_dialect
|
||||
{
|
||||
TLS_DIALECT_GNU,
|
||||
TLS_DIALECT_GNU2,
|
||||
TLS_DIALECT_SUN
|
||||
};
|
||||
|
||||
enum cmodel {
|
||||
CM_32, /* The traditional 32-bit ABI. */
|
||||
CM_SMALL, /* Assumes all code and data fits in the low 31 bits. */
|
||||
CM_KERNEL, /* Assumes all code and data fits in the high 31 bits. */
|
||||
CM_MEDIUM, /* Assumes code fits in the low 31 bits; data unlimited. */
|
||||
CM_LARGE, /* No assumptions. */
|
||||
CM_SMALL_PIC, /* Assumes code+data+got/plt fits in a 31 bit region. */
|
||||
CM_MEDIUM_PIC,/* Assumes code+got/plt fits in a 31 bit region. */
|
||||
CM_LARGE_PIC /* No assumptions. */
|
||||
};
|
||||
|
||||
enum asm_dialect {
|
||||
ASM_ATT,
|
||||
ASM_INTEL
|
||||
};
|
||||
|
||||
enum ix86_veclibabi {
|
||||
ix86_veclibabi_type_none,
|
||||
ix86_veclibabi_type_svml,
|
||||
ix86_veclibabi_type_acml
|
||||
};
|
||||
|
||||
#endif
|
|
@ -2120,8 +2120,6 @@ static const unsigned int x86_arch_always_fancy_math_387
|
|||
= m_PENT | m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_PENT4
|
||||
| m_NOCONA | m_CORE2I7 | m_GENERIC;
|
||||
|
||||
static enum stringop_alg stringop_alg = no_stringop;
|
||||
|
||||
/* In case the average insn count for single function invocation is
|
||||
lower than this constant, emit fast (but longer) prologue and
|
||||
epilogue code. */
|
||||
|
@ -2327,13 +2325,6 @@ struct ix86_frame
|
|||
bool save_regs_using_mov;
|
||||
};
|
||||
|
||||
/* Code model option. */
|
||||
enum cmodel ix86_cmodel;
|
||||
/* Asm dialect. */
|
||||
enum asm_dialect ix86_asm_dialect = ASM_ATT;
|
||||
/* TLS dialects. */
|
||||
enum tls_dialect ix86_tls_dialect = TLS_DIALECT_GNU;
|
||||
|
||||
/* Which unit we are generating floating point math for. */
|
||||
enum fpmath_unit ix86_fpmath;
|
||||
|
||||
|
@ -2349,9 +2340,6 @@ enum processor_type ix86_arch;
|
|||
/* true if sse prefetch instruction is not NOOP. */
|
||||
int x86_prefetch_sse;
|
||||
|
||||
/* ix86_regparm_string as a number */
|
||||
static int ix86_regparm;
|
||||
|
||||
/* -mstackrealign option */
|
||||
static const char ix86_force_align_arg_pointer_string[]
|
||||
= "force_align_arg_pointer";
|
||||
|
@ -2380,21 +2368,10 @@ static unsigned int ix86_default_incoming_stack_boundary;
|
|||
/* Alignment for incoming stack boundary in bits. */
|
||||
unsigned int ix86_incoming_stack_boundary;
|
||||
|
||||
/* The abi used by target. */
|
||||
enum calling_abi ix86_abi;
|
||||
|
||||
/* Values 1-5: see jump.c */
|
||||
int ix86_branch_cost;
|
||||
|
||||
/* Calling abi specific va_list type nodes. */
|
||||
static GTY(()) tree sysv_va_list_type_node;
|
||||
static GTY(()) tree ms_va_list_type_node;
|
||||
|
||||
/* Variables which are this size or smaller are put in the data/bss
|
||||
or ldata/lbss sections. */
|
||||
|
||||
int ix86_section_threshold = 65536;
|
||||
|
||||
/* Prefix built by ASM_GENERATE_INTERNAL_LABEL. */
|
||||
char internal_label_prefix[16];
|
||||
int internal_label_prefix_len;
|
||||
|
@ -2688,7 +2665,7 @@ static bool
|
|||
ix86_handle_option (struct gcc_options *opts,
|
||||
struct gcc_options *opts_set ATTRIBUTE_UNUSED,
|
||||
const struct cl_decoded_option *decoded,
|
||||
location_t loc ATTRIBUTE_UNUSED)
|
||||
location_t loc)
|
||||
{
|
||||
size_t code = decoded->opt_index;
|
||||
int value = decoded->value;
|
||||
|
@ -3059,6 +3036,45 @@ ix86_handle_option (struct gcc_options *opts,
|
|||
}
|
||||
return true;
|
||||
|
||||
/* Comes from final.c -- no real reason to change it. */
|
||||
#define MAX_CODE_ALIGN 16
|
||||
|
||||
case OPT_malign_loops_:
|
||||
warning_at (loc, 0, "-malign-loops is obsolete, use -falign-loops");
|
||||
if (value > MAX_CODE_ALIGN)
|
||||
error_at (loc, "-malign-loops=%d is not between 0 and %d",
|
||||
value, MAX_CODE_ALIGN);
|
||||
else
|
||||
opts->x_align_loops = 1 << value;
|
||||
return true;
|
||||
|
||||
case OPT_malign_jumps_:
|
||||
warning_at (loc, 0, "-malign-jumps is obsolete, use -falign-jumps");
|
||||
if (value > MAX_CODE_ALIGN)
|
||||
error_at (loc, "-malign-jumps=%d is not between 0 and %d",
|
||||
value, MAX_CODE_ALIGN);
|
||||
else
|
||||
opts->x_align_jumps = 1 << value;
|
||||
return true;
|
||||
|
||||
case OPT_malign_functions_:
|
||||
warning_at (loc, 0,
|
||||
"-malign-functions is obsolete, use -falign-functions");
|
||||
if (value > MAX_CODE_ALIGN)
|
||||
error_at (loc, "-malign-functions=%d is not between 0 and %d",
|
||||
value, MAX_CODE_ALIGN);
|
||||
else
|
||||
opts->x_align_functions = 1 << value;
|
||||
return true;
|
||||
|
||||
case OPT_mbranch_cost_:
|
||||
if (value > 5)
|
||||
{
|
||||
error_at (loc, "-mbranch-cost=%d is not between 0 and 5", value);
|
||||
opts->x_ix86_branch_cost = 5;
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
@ -3305,9 +3321,6 @@ ix86_option_override_internal (bool main_args_p)
|
|||
const char *suffix;
|
||||
const char *sw;
|
||||
|
||||
/* Comes from final.c -- no real reason to change it. */
|
||||
#define MAX_CODE_ALIGN 16
|
||||
|
||||
enum pta_flags
|
||||
{
|
||||
PTA_SSE = 1 << 0,
|
||||
|
@ -3530,27 +3543,11 @@ ix86_option_override_internal (bool main_args_p)
|
|||
}
|
||||
}
|
||||
|
||||
if (ix86_stringop_string)
|
||||
if (ix86_stringop_alg == rep_prefix_8_byte && !TARGET_64BIT)
|
||||
{
|
||||
if (!strcmp (ix86_stringop_string, "rep_byte"))
|
||||
stringop_alg = rep_prefix_1_byte;
|
||||
else if (!strcmp (ix86_stringop_string, "libcall"))
|
||||
stringop_alg = libcall;
|
||||
else if (!strcmp (ix86_stringop_string, "rep_4byte"))
|
||||
stringop_alg = rep_prefix_4_byte;
|
||||
else if (!strcmp (ix86_stringop_string, "rep_8byte")
|
||||
&& TARGET_64BIT)
|
||||
/* rep; movq isn't available in 32-bit code. */
|
||||
stringop_alg = rep_prefix_8_byte;
|
||||
else if (!strcmp (ix86_stringop_string, "byte_loop"))
|
||||
stringop_alg = loop_1_byte;
|
||||
else if (!strcmp (ix86_stringop_string, "loop"))
|
||||
stringop_alg = loop;
|
||||
else if (!strcmp (ix86_stringop_string, "unrolled_loop"))
|
||||
stringop_alg = unrolled_loop;
|
||||
else
|
||||
error ("bad value (%s) for %sstringop-strategy=%s %s",
|
||||
ix86_stringop_string, prefix, suffix, sw);
|
||||
/* rep; movq isn't available in 32-bit code. */
|
||||
error ("-mstringop-strategy=rep_8byte not supported for 32-bit code");
|
||||
ix86_stringop_alg = no_stringop;
|
||||
}
|
||||
|
||||
if (!ix86_arch_string)
|
||||
|
@ -3558,37 +3555,62 @@ ix86_option_override_internal (bool main_args_p)
|
|||
else
|
||||
ix86_arch_specified = 1;
|
||||
|
||||
/* Validate -mabi= value. */
|
||||
if (ix86_abi_string)
|
||||
{
|
||||
if (strcmp (ix86_abi_string, "sysv") == 0)
|
||||
ix86_abi = SYSV_ABI;
|
||||
else if (strcmp (ix86_abi_string, "ms") == 0)
|
||||
ix86_abi = MS_ABI;
|
||||
else
|
||||
error ("unknown ABI (%s) for %sabi=%s %s",
|
||||
ix86_abi_string, prefix, suffix, sw);
|
||||
}
|
||||
else
|
||||
if (!global_options_set.x_ix86_abi)
|
||||
ix86_abi = DEFAULT_ABI;
|
||||
|
||||
if (ix86_cmodel_string != 0)
|
||||
if (global_options_set.x_ix86_cmodel)
|
||||
{
|
||||
if (!strcmp (ix86_cmodel_string, "small"))
|
||||
ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
|
||||
else if (!strcmp (ix86_cmodel_string, "medium"))
|
||||
ix86_cmodel = flag_pic ? CM_MEDIUM_PIC : CM_MEDIUM;
|
||||
else if (!strcmp (ix86_cmodel_string, "large"))
|
||||
ix86_cmodel = flag_pic ? CM_LARGE_PIC : CM_LARGE;
|
||||
else if (flag_pic)
|
||||
error ("code model %s does not support PIC mode", ix86_cmodel_string);
|
||||
else if (!strcmp (ix86_cmodel_string, "32"))
|
||||
ix86_cmodel = CM_32;
|
||||
else if (!strcmp (ix86_cmodel_string, "kernel") && !flag_pic)
|
||||
ix86_cmodel = CM_KERNEL;
|
||||
else
|
||||
error ("bad value (%s) for %scmodel=%s %s",
|
||||
ix86_cmodel_string, prefix, suffix, sw);
|
||||
switch (ix86_cmodel)
|
||||
{
|
||||
case CM_SMALL:
|
||||
case CM_SMALL_PIC:
|
||||
if (flag_pic)
|
||||
ix86_cmodel = CM_SMALL_PIC;
|
||||
if (!TARGET_64BIT)
|
||||
error ("code model %qs not supported in the %s bit mode",
|
||||
"small", "32");
|
||||
break;
|
||||
|
||||
case CM_MEDIUM:
|
||||
case CM_MEDIUM_PIC:
|
||||
if (flag_pic)
|
||||
ix86_cmodel = CM_MEDIUM_PIC;
|
||||
if (!TARGET_64BIT)
|
||||
error ("code model %qs not supported in the %s bit mode",
|
||||
"medium", "32");
|
||||
break;
|
||||
|
||||
case CM_LARGE:
|
||||
case CM_LARGE_PIC:
|
||||
if (flag_pic)
|
||||
ix86_cmodel = CM_LARGE_PIC;
|
||||
if (!TARGET_64BIT)
|
||||
error ("code model %qs not supported in the %s bit mode",
|
||||
"large", "32");
|
||||
break;
|
||||
|
||||
case CM_32:
|
||||
if (flag_pic)
|
||||
error ("code model %s does not support PIC mode", "32");
|
||||
if (TARGET_64BIT)
|
||||
error ("code model %qs not supported in the %s bit mode",
|
||||
"32", "64");
|
||||
break;
|
||||
|
||||
case CM_KERNEL:
|
||||
if (flag_pic)
|
||||
{
|
||||
error ("code model %s does not support PIC mode", "kernel");
|
||||
ix86_cmodel = CM_32;
|
||||
}
|
||||
if (!TARGET_64BIT)
|
||||
error ("code model %qs not supported in the %s bit mode",
|
||||
"kernel", "32");
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3603,20 +3625,11 @@ ix86_option_override_internal (bool main_args_p)
|
|||
else
|
||||
ix86_cmodel = CM_32;
|
||||
}
|
||||
if (ix86_asm_string != 0)
|
||||
if (TARGET_MACHO && ix86_asm_dialect == ASM_INTEL)
|
||||
{
|
||||
if (! TARGET_MACHO
|
||||
&& !strcmp (ix86_asm_string, "intel"))
|
||||
ix86_asm_dialect = ASM_INTEL;
|
||||
else if (!strcmp (ix86_asm_string, "att"))
|
||||
ix86_asm_dialect = ASM_ATT;
|
||||
else
|
||||
error ("bad value (%s) for %sasm=%s %s",
|
||||
ix86_asm_string, prefix, suffix, sw);
|
||||
error ("-masm=intel not supported in this configuration");
|
||||
ix86_asm_dialect = ASM_ATT;
|
||||
}
|
||||
if ((TARGET_64BIT == 0) != (ix86_cmodel == CM_32))
|
||||
error ("code model %qs not supported in the %s bit mode",
|
||||
ix86_cmodel_string, TARGET_64BIT ? "64" : "32");
|
||||
if ((TARGET_64BIT != 0) != ((ix86_isa_flags & OPTION_MASK_ISA_64BIT) != 0))
|
||||
sorry ("%i-bit mode not compiled in",
|
||||
(ix86_isa_flags & OPTION_MASK_ISA_64BIT) ? 64 : 32);
|
||||
|
@ -3836,68 +3849,20 @@ ix86_option_override_internal (bool main_args_p)
|
|||
init_machine_status = ix86_init_machine_status;
|
||||
|
||||
/* Validate -mregparm= value. */
|
||||
if (ix86_regparm_string)
|
||||
if (global_options_set.x_ix86_regparm)
|
||||
{
|
||||
if (TARGET_64BIT)
|
||||
warning (0, "%sregparm%s is ignored in 64-bit mode", prefix, suffix);
|
||||
i = atoi (ix86_regparm_string);
|
||||
if (i < 0 || i > REGPARM_MAX)
|
||||
error ("%sregparm=%d%s is not between 0 and %d",
|
||||
prefix, i, suffix, REGPARM_MAX);
|
||||
else
|
||||
ix86_regparm = i;
|
||||
warning (0, "-mregparm is ignored in 64-bit mode");
|
||||
if (ix86_regparm > REGPARM_MAX)
|
||||
{
|
||||
error ("-mregparm=%d is not between 0 and %d",
|
||||
ix86_regparm, REGPARM_MAX);
|
||||
ix86_regparm = 0;
|
||||
}
|
||||
}
|
||||
if (TARGET_64BIT)
|
||||
ix86_regparm = REGPARM_MAX;
|
||||
|
||||
/* If the user has provided any of the -malign-* options,
|
||||
warn and use that value only if -falign-* is not set.
|
||||
Remove this code in GCC 3.2 or later. */
|
||||
if (ix86_align_loops_string)
|
||||
{
|
||||
warning (0, "%salign-loops%s is obsolete, use -falign-loops%s",
|
||||
prefix, suffix, suffix);
|
||||
if (align_loops == 0)
|
||||
{
|
||||
i = atoi (ix86_align_loops_string);
|
||||
if (i < 0 || i > MAX_CODE_ALIGN)
|
||||
error ("%salign-loops=%d%s is not between 0 and %d",
|
||||
prefix, i, suffix, MAX_CODE_ALIGN);
|
||||
else
|
||||
align_loops = 1 << i;
|
||||
}
|
||||
}
|
||||
|
||||
if (ix86_align_jumps_string)
|
||||
{
|
||||
warning (0, "%salign-jumps%s is obsolete, use -falign-jumps%s",
|
||||
prefix, suffix, suffix);
|
||||
if (align_jumps == 0)
|
||||
{
|
||||
i = atoi (ix86_align_jumps_string);
|
||||
if (i < 0 || i > MAX_CODE_ALIGN)
|
||||
error ("%salign-loops=%d%s is not between 0 and %d",
|
||||
prefix, i, suffix, MAX_CODE_ALIGN);
|
||||
else
|
||||
align_jumps = 1 << i;
|
||||
}
|
||||
}
|
||||
|
||||
if (ix86_align_funcs_string)
|
||||
{
|
||||
warning (0, "%salign-functions%s is obsolete, use -falign-functions%s",
|
||||
prefix, suffix, suffix);
|
||||
if (align_functions == 0)
|
||||
{
|
||||
i = atoi (ix86_align_funcs_string);
|
||||
if (i < 0 || i > MAX_CODE_ALIGN)
|
||||
error ("%salign-loops=%d%s is not between 0 and %d",
|
||||
prefix, i, suffix, MAX_CODE_ALIGN);
|
||||
else
|
||||
align_functions = 1 << i;
|
||||
}
|
||||
}
|
||||
|
||||
/* Default align_* from the processor table. */
|
||||
if (align_loops == 0)
|
||||
{
|
||||
|
@ -3914,42 +3879,9 @@ ix86_option_override_internal (bool main_args_p)
|
|||
align_functions = processor_target_table[ix86_tune].align_func;
|
||||
}
|
||||
|
||||
/* Validate -mbranch-cost= value, or provide default. */
|
||||
ix86_branch_cost = ix86_cost->branch_cost;
|
||||
if (ix86_branch_cost_string)
|
||||
{
|
||||
i = atoi (ix86_branch_cost_string);
|
||||
if (i < 0 || i > 5)
|
||||
error ("%sbranch-cost=%d%s is not between 0 and 5", prefix, i, suffix);
|
||||
else
|
||||
ix86_branch_cost = i;
|
||||
}
|
||||
if (ix86_section_threshold_string)
|
||||
{
|
||||
i = atoi (ix86_section_threshold_string);
|
||||
if (i < 0)
|
||||
error ("%slarge-data-threshold=%d%s is negative", prefix, i, suffix);
|
||||
else
|
||||
ix86_section_threshold = i;
|
||||
}
|
||||
|
||||
if (ix86_tls_dialect_string)
|
||||
{
|
||||
if (strcmp (ix86_tls_dialect_string, "gnu") == 0)
|
||||
ix86_tls_dialect = TLS_DIALECT_GNU;
|
||||
else if (strcmp (ix86_tls_dialect_string, "gnu2") == 0)
|
||||
ix86_tls_dialect = TLS_DIALECT_GNU2;
|
||||
else
|
||||
error ("bad value (%s) for %stls-dialect=%s %s",
|
||||
ix86_tls_dialect_string, prefix, suffix, sw);
|
||||
}
|
||||
|
||||
if (ix87_precision_string)
|
||||
{
|
||||
i = atoi (ix87_precision_string);
|
||||
if (i != 32 && i != 64 && i != 80)
|
||||
error ("pc%d is not valid precision setting (32, 64 or 80)", i);
|
||||
}
|
||||
/* Provide default for -mbranch-cost= value. */
|
||||
if (!global_options_set.x_ix86_branch_cost)
|
||||
ix86_branch_cost = ix86_cost->branch_cost;
|
||||
|
||||
if (TARGET_64BIT)
|
||||
{
|
||||
|
@ -4015,23 +3947,24 @@ ix86_option_override_internal (bool main_args_p)
|
|||
/* Validate -mpreferred-stack-boundary= value or default it to
|
||||
PREFERRED_STACK_BOUNDARY_DEFAULT. */
|
||||
ix86_preferred_stack_boundary = PREFERRED_STACK_BOUNDARY_DEFAULT;
|
||||
if (ix86_preferred_stack_boundary_string)
|
||||
if (global_options_set.x_ix86_preferred_stack_boundary_arg)
|
||||
{
|
||||
int min = (TARGET_64BIT ? 4 : 2);
|
||||
int max = (TARGET_SEH ? 4 : 12);
|
||||
|
||||
i = atoi (ix86_preferred_stack_boundary_string);
|
||||
if (i < min || i > max)
|
||||
if (ix86_preferred_stack_boundary_arg < min
|
||||
|| ix86_preferred_stack_boundary_arg > max)
|
||||
{
|
||||
if (min == max)
|
||||
error ("%spreferred-stack-boundary%s is not supported "
|
||||
"for this target", prefix, suffix);
|
||||
error ("-mpreferred-stack-boundary is not supported "
|
||||
"for this target");
|
||||
else
|
||||
error ("%spreferred-stack-boundary=%d%s is not between %d and %d",
|
||||
prefix, i, suffix, min, max);
|
||||
error ("-mpreferred-stack-boundary=%d is not between %d and %d",
|
||||
ix86_preferred_stack_boundary_arg, min, max);
|
||||
}
|
||||
else
|
||||
ix86_preferred_stack_boundary = (1 << i) * BITS_PER_UNIT;
|
||||
ix86_preferred_stack_boundary
|
||||
= (1 << ix86_preferred_stack_boundary_arg) * BITS_PER_UNIT;
|
||||
}
|
||||
|
||||
/* Set the default value for -mstackrealign. */
|
||||
|
@ -4043,15 +3976,16 @@ ix86_option_override_internal (bool main_args_p)
|
|||
/* Validate -mincoming-stack-boundary= value or default it to
|
||||
MIN_STACK_BOUNDARY/PREFERRED_STACK_BOUNDARY. */
|
||||
ix86_incoming_stack_boundary = ix86_default_incoming_stack_boundary;
|
||||
if (ix86_incoming_stack_boundary_string)
|
||||
if (global_options_set.x_ix86_incoming_stack_boundary_arg)
|
||||
{
|
||||
i = atoi (ix86_incoming_stack_boundary_string);
|
||||
if (i < (TARGET_64BIT ? 4 : 2) || i > 12)
|
||||
if (ix86_incoming_stack_boundary_arg < (TARGET_64BIT ? 4 : 2)
|
||||
|| ix86_incoming_stack_boundary_arg > 12)
|
||||
error ("-mincoming-stack-boundary=%d is not between %d and 12",
|
||||
i, TARGET_64BIT ? 4 : 2);
|
||||
ix86_incoming_stack_boundary_arg, TARGET_64BIT ? 4 : 2);
|
||||
else
|
||||
{
|
||||
ix86_user_incoming_stack_boundary = (1 << i) * BITS_PER_UNIT;
|
||||
ix86_user_incoming_stack_boundary
|
||||
= (1 << ix86_incoming_stack_boundary_arg) * BITS_PER_UNIT;
|
||||
ix86_incoming_stack_boundary
|
||||
= ix86_user_incoming_stack_boundary;
|
||||
}
|
||||
|
@ -4106,17 +4040,20 @@ ix86_option_override_internal (bool main_args_p)
|
|||
target_flags &= ~MASK_FLOAT_RETURNS;
|
||||
|
||||
/* Use external vectorized library in vectorizing intrinsics. */
|
||||
if (ix86_veclibabi_string)
|
||||
{
|
||||
if (strcmp (ix86_veclibabi_string, "svml") == 0)
|
||||
if (global_options_set.x_ix86_veclibabi_type)
|
||||
switch (ix86_veclibabi_type)
|
||||
{
|
||||
case ix86_veclibabi_type_svml:
|
||||
ix86_veclib_handler = ix86_veclibabi_svml;
|
||||
else if (strcmp (ix86_veclibabi_string, "acml") == 0)
|
||||
break;
|
||||
|
||||
case ix86_veclibabi_type_acml:
|
||||
ix86_veclib_handler = ix86_veclibabi_acml;
|
||||
else
|
||||
error ("unknown vectorization library ABI type (%s) for "
|
||||
"%sveclibabi=%s %s", ix86_veclibabi_string,
|
||||
prefix, suffix, sw);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
if ((!USE_IX86_FRAME_POINTER
|
||||
|| (x86_accumulate_outgoing_args & ix86_tune_mask))
|
||||
|
@ -20874,8 +20811,8 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size, bool memset,
|
|||
algs = &cost->memset[TARGET_64BIT != 0];
|
||||
else
|
||||
algs = &cost->memcpy[TARGET_64BIT != 0];
|
||||
if (stringop_alg != no_stringop && ALG_USABLE_P (stringop_alg))
|
||||
return stringop_alg;
|
||||
if (ix86_stringop_alg != no_stringop && ALG_USABLE_P (ix86_stringop_alg))
|
||||
return ix86_stringop_alg;
|
||||
/* rep; movq or rep; movl is the smallest variant. */
|
||||
else if (!optimize_for_speed)
|
||||
{
|
||||
|
|
|
@ -79,18 +79,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|||
|
||||
#include "config/vxworks-dummy.h"
|
||||
|
||||
/* Algorithm to expand string function with. */
|
||||
enum stringop_alg
|
||||
{
|
||||
no_stringop,
|
||||
libcall,
|
||||
rep_prefix_1_byte,
|
||||
rep_prefix_4_byte,
|
||||
rep_prefix_8_byte,
|
||||
loop_1_byte,
|
||||
loop,
|
||||
unrolled_loop
|
||||
};
|
||||
#include "config/i386/i386-opts.h"
|
||||
|
||||
#define MAX_STRINGOP_ALGS 4
|
||||
|
||||
|
@ -506,16 +495,6 @@ extern tree x86_mfence;
|
|||
/* This is re-defined by cygming.h. */
|
||||
#define TARGET_SEH 0
|
||||
|
||||
/* Available call abi. */
|
||||
enum calling_abi
|
||||
{
|
||||
SYSV_ABI = 0,
|
||||
MS_ABI = 1
|
||||
};
|
||||
|
||||
/* The abi used by target. */
|
||||
extern enum calling_abi ix86_abi;
|
||||
|
||||
/* The default abi used by target. */
|
||||
#define DEFAULT_ABI SYSV_ABI
|
||||
|
||||
|
@ -2058,42 +2037,13 @@ enum fpmath_unit
|
|||
|
||||
extern enum fpmath_unit ix86_fpmath;
|
||||
|
||||
enum tls_dialect
|
||||
{
|
||||
TLS_DIALECT_GNU,
|
||||
TLS_DIALECT_GNU2,
|
||||
TLS_DIALECT_SUN
|
||||
};
|
||||
|
||||
extern enum tls_dialect ix86_tls_dialect;
|
||||
|
||||
enum cmodel {
|
||||
CM_32, /* The traditional 32-bit ABI. */
|
||||
CM_SMALL, /* Assumes all code and data fits in the low 31 bits. */
|
||||
CM_KERNEL, /* Assumes all code and data fits in the high 31 bits. */
|
||||
CM_MEDIUM, /* Assumes code fits in the low 31 bits; data unlimited. */
|
||||
CM_LARGE, /* No assumptions. */
|
||||
CM_SMALL_PIC, /* Assumes code+data+got/plt fits in a 31 bit region. */
|
||||
CM_MEDIUM_PIC,/* Assumes code+got/plt fits in a 31 bit region. */
|
||||
CM_LARGE_PIC /* No assumptions. */
|
||||
};
|
||||
|
||||
extern enum cmodel ix86_cmodel;
|
||||
|
||||
/* Size of the RED_ZONE area. */
|
||||
#define RED_ZONE_SIZE 128
|
||||
/* Reserved area of the red zone for temporaries. */
|
||||
#define RED_ZONE_RESERVE 8
|
||||
|
||||
enum asm_dialect {
|
||||
ASM_ATT,
|
||||
ASM_INTEL
|
||||
};
|
||||
|
||||
extern enum asm_dialect ix86_asm_dialect;
|
||||
extern unsigned int ix86_preferred_stack_boundary;
|
||||
extern unsigned int ix86_incoming_stack_boundary;
|
||||
extern int ix86_branch_cost, ix86_section_threshold;
|
||||
|
||||
/* Smallest class containing REGNO. */
|
||||
extern enum reg_class const regclass_map[FIRST_PSEUDO_REGISTER];
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
; along with GCC; see the file COPYING3. If not see
|
||||
; <http://www.gnu.org/licenses/>.
|
||||
|
||||
HeaderInclude
|
||||
config/i386/i386-opts.h
|
||||
|
||||
; Bit flags that specify the ISA we are compiling for.
|
||||
Variable
|
||||
int ix86_isa_flags = TARGET_64BIT_DEFAULT | TARGET_SUBTARGET_ISA_DEFAULT
|
||||
|
@ -87,15 +90,15 @@ Target Report Mask(ALIGN_DOUBLE) Save
|
|||
Align some doubles on dword boundary
|
||||
|
||||
malign-functions=
|
||||
Target RejectNegative Joined Var(ix86_align_funcs_string)
|
||||
Target RejectNegative Joined UInteger
|
||||
Function starts are aligned to this power of 2
|
||||
|
||||
malign-jumps=
|
||||
Target RejectNegative Joined Var(ix86_align_jumps_string)
|
||||
Target RejectNegative Joined UInteger
|
||||
Jump targets are aligned to this power of 2
|
||||
|
||||
malign-loops=
|
||||
Target RejectNegative Joined Var(ix86_align_loops_string)
|
||||
Target RejectNegative Joined UInteger
|
||||
Loop code aligned to this power of 2
|
||||
|
||||
malign-stringops
|
||||
|
@ -107,21 +110,50 @@ Target RejectNegative Joined Var(ix86_arch_string)
|
|||
Generate code for given CPU
|
||||
|
||||
masm=
|
||||
Target RejectNegative Joined Var(ix86_asm_string)
|
||||
Target RejectNegative Joined Enum(asm_dialect) Var(ix86_asm_dialect) Init(ASM_ATT)
|
||||
Use given assembler dialect
|
||||
|
||||
Enum
|
||||
Name(asm_dialect) Type(enum asm_dialect)
|
||||
Known assembler dialects (for use with the -masm-dialect= option):
|
||||
|
||||
EnumValue
|
||||
Enum(asm_dialect) String(intel) Value(ASM_INTEL)
|
||||
|
||||
EnumValue
|
||||
Enum(asm_dialect) String(att) Value(ASM_ATT)
|
||||
|
||||
mbranch-cost=
|
||||
Target RejectNegative Joined Var(ix86_branch_cost_string)
|
||||
Target RejectNegative Joined UInteger Var(ix86_branch_cost)
|
||||
Branches are this expensive (1-5, arbitrary units)
|
||||
|
||||
mlarge-data-threshold=
|
||||
Target RejectNegative Joined Var(ix86_section_threshold_string)
|
||||
Target RejectNegative Joined UInteger Var(ix86_section_threshold) Init(65536)
|
||||
Data greater than given threshold will go into .ldata section in x86-64 medium model
|
||||
|
||||
mcmodel=
|
||||
Target RejectNegative Joined Var(ix86_cmodel_string)
|
||||
Target RejectNegative Joined Enum(cmodel) Var(ix86_cmodel) Init(CM_32)
|
||||
Use given x86-64 code model
|
||||
|
||||
Enum
|
||||
Name(cmodel) Type(enum cmodel)
|
||||
Known code models (for use with the -mcmodel= option):
|
||||
|
||||
EnumValue
|
||||
Enum(cmodel) String(small) Value(CM_SMALL)
|
||||
|
||||
EnumValue
|
||||
Enum(cmodel) String(medium) Value(CM_MEDIUM)
|
||||
|
||||
EnumValue
|
||||
Enum(cmodel) String(large) Value(CM_LARGE)
|
||||
|
||||
EnumValue
|
||||
Enum(cmodel) String(32) Value(CM_32)
|
||||
|
||||
EnumValue
|
||||
Enum(cmodel) String(kernel) Value(CM_KERNEL)
|
||||
|
||||
mcpu=
|
||||
Target RejectNegative Joined Undocumented Alias(mtune=) Warn(%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead)
|
||||
|
||||
|
@ -181,16 +213,24 @@ momit-leaf-frame-pointer
|
|||
Target Report Mask(OMIT_LEAF_FRAME_POINTER) Save
|
||||
Omit the frame pointer in leaf functions
|
||||
|
||||
mpc
|
||||
Target RejectNegative Report Joined Var(ix87_precision_string)
|
||||
Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)
|
||||
mpc32
|
||||
Target RejectNegative Report
|
||||
Set 80387 floating-point precision to 32-bit
|
||||
|
||||
mpc64
|
||||
Target RejectNegative Report
|
||||
Set 80387 floating-point precision to 64-bit
|
||||
|
||||
mpc80
|
||||
Target RejectNegative Report
|
||||
Set 80387 floating-point precision to 80-bit
|
||||
|
||||
mpreferred-stack-boundary=
|
||||
Target RejectNegative Joined Var(ix86_preferred_stack_boundary_string)
|
||||
Target RejectNegative Joined UInteger Var(ix86_preferred_stack_boundary_arg)
|
||||
Attempt to keep stack aligned to this power of 2
|
||||
|
||||
mincoming-stack-boundary=
|
||||
Target RejectNegative Joined Var(ix86_incoming_stack_boundary_string)
|
||||
Target RejectNegative Joined UInteger Var(ix86_incoming_stack_boundary_arg)
|
||||
Assume incoming stack aligned to this power of 2
|
||||
|
||||
mpush-args
|
||||
|
@ -202,7 +242,7 @@ Target RejectNegative Report InverseMask(NO_RED_ZONE, RED_ZONE) Save
|
|||
Use red-zone in the x86-64 code
|
||||
|
||||
mregparm=
|
||||
Target RejectNegative Joined Var(ix86_regparm_string)
|
||||
Target RejectNegative Joined UInteger Var(ix86_regparm)
|
||||
Number of registers used to pass integer arguments
|
||||
|
||||
mrtd
|
||||
|
@ -226,13 +266,48 @@ Target Report Mask(STACK_PROBE) Save
|
|||
Enable stack probing
|
||||
|
||||
mstringop-strategy=
|
||||
Target RejectNegative Joined Var(ix86_stringop_string)
|
||||
Target RejectNegative Joined Enum(stringop_alg) Var(ix86_stringop_alg) Init(no_stringop)
|
||||
Chose strategy to generate stringop using
|
||||
|
||||
Enum
|
||||
Name(stringop_alg) Type(enum stringop_alg)
|
||||
Valid arguments to -mstringop-strategy=:
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(rep_byte) Value(rep_prefix_1_byte)
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(libcall) Value(libcall)
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(rep_4byte) Value(rep_prefix_4_byte)
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(rep_8byte) Value(rep_prefix_8_byte)
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(byte_loop) Value(loop_1_byte)
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(loop) Value(loop)
|
||||
|
||||
EnumValue
|
||||
Enum(stringop_alg) String(unrolled_loop) Value(unrolled_loop)
|
||||
|
||||
mtls-dialect=
|
||||
Target RejectNegative Joined Var(ix86_tls_dialect_string)
|
||||
Target RejectNegative Joined Var(ix86_tls_dialect) Enum(tls_dialect) Init(TLS_DIALECT_GNU)
|
||||
Use given thread-local storage dialect
|
||||
|
||||
Enum
|
||||
Name(tls_dialect) Type(enum tls_dialect)
|
||||
Known TLS dialects (for use with the -mtls-dialect= option):
|
||||
|
||||
EnumValue
|
||||
Enum(tls_dialect) String(gnu) Value(TLS_DIALECT_GNU)
|
||||
|
||||
EnumValue
|
||||
Enum(tls_dialect) String(gnu2) Value(TLS_DIALECT_GNU2)
|
||||
|
||||
mtls-direct-seg-refs
|
||||
Target Report Mask(TLS_DIRECT_SEG_REFS)
|
||||
Use direct references against %gs when accessing tls data
|
||||
|
@ -242,13 +317,33 @@ Target RejectNegative Joined Var(ix86_tune_string)
|
|||
Schedule code for given CPU
|
||||
|
||||
mabi=
|
||||
Target RejectNegative Joined Var(ix86_abi_string)
|
||||
Target RejectNegative Joined Var(ix86_abi) Enum(calling_abi) Init(SYSV_ABI)
|
||||
Generate code that conforms to the given ABI
|
||||
|
||||
Enum
|
||||
Name(calling_abi) Type(enum calling_abi)
|
||||
Known ABIs (for use with the -mabi= option):
|
||||
|
||||
EnumValue
|
||||
Enum(calling_abi) String(sysv) Value(SYSV_ABI)
|
||||
|
||||
EnumValue
|
||||
Enum(calling_abi) String(ms) Value(MS_ABI)
|
||||
|
||||
mveclibabi=
|
||||
Target RejectNegative Joined Var(ix86_veclibabi_string)
|
||||
Target RejectNegative Joined Var(ix86_veclibabi_type) Enum(ix86_veclibabi) Init(ix86_veclibabi_type_none)
|
||||
Vector library ABI to use
|
||||
|
||||
Enum
|
||||
Name(ix86_veclibabi) Type(enum ix86_veclibabi)
|
||||
Known vectorization library ABIs (for use with the -mveclibabi= option):
|
||||
|
||||
EnumValue
|
||||
Enum(ix86_veclibabi) String(svml) Value(ix86_veclibabi_type_svml)
|
||||
|
||||
EnumValue
|
||||
Enum(ix86_veclibabi) String(acml) Value(ix86_veclibabi_type_acml)
|
||||
|
||||
mvect8-ret-in-mem
|
||||
Target Report Mask(VECT8_RETURNS) Save
|
||||
Return 8-byte vectors in memory
|
||||
|
|
Loading…
Reference in New Issue