const
struct processor_costs ix86_size_cost = {/* costs for tuning for size */
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
2, /* cost for loading QImode using movzbl */
{2, 2, 2}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
3, 3, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_BYTES (2), /* cost of an add instruction */
COSTS_N_BYTES (3), /* cost of a lea instruction */
static const
struct processor_costs i386_cost = { /* 386 specific costs */
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
4, /* cost for loading QImode using movzbl */
{2, 4, 2}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
3, 3, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
static const
struct processor_costs i486_cost = { /* 486 specific costs */
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
4, /* cost for loading QImode using movzbl */
{2, 4, 2}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
3, 3, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
static const
struct processor_costs pentium_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{2, 4, 2}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
3, 3, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
static const
struct processor_costs lakemont_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{2, 4, 2}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
3, 3, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */
DUMMY_STRINGOP_ALGS};
static const
struct processor_costs pentiumpro_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
2, /* cost for loading QImode using movzbl */
{4, 4, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
3, 3, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
DUMMY_STRINGOP_ALGS};
static const
struct processor_costs geode_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
2, /* cost for loading QImode using movzbl */
{2, 2, 2}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
6, 6, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
DUMMY_STRINGOP_ALGS};
static const
struct processor_costs k6_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
3, /* cost for loading QImode using movzbl */
{4, 5, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
6, 6, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (2), /* cost of a lea instruction */
DUMMY_STRINGOP_ALGS};
static const
struct processor_costs athlon_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
4, /* cost for loading QImode using movzbl */
{3, 4, 3}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
5, 5, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (2), /* cost of a lea instruction */
{8192, rep_prefix_8_byte, false}, {-1, libcall, false}}}};
static const
struct processor_costs k8_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
4, /* cost for loading QImode using movzbl */
{3, 4, 3}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
5, 5, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (2), /* cost of a lea instruction */
{libcall, {{48, unrolled_loop, false}, {8192, rep_prefix_8_byte, false},
{-1, libcall, false}}}};
struct processor_costs amdfam10_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
4, /* cost for loading QImode using movzbl */
{3, 4, 3}, /* cost of loading integer registers
MOVD reg32, xmmreg Double FADD 3
1/1 1/1 */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (2), /* cost of a lea instruction */
{-1, libcall, false}}}};
const struct processor_costs bdver_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
8, /* cost for loading QImode using movzbl */
{8, 8, 8}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
16, 20, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
{libcall, {{48, unrolled_loop, false}, {8192, rep_prefix_8_byte, false},
{-1, libcall, false}}}};
struct processor_costs znver1_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
/* reg-reg moves are done by renaming and thus they are even cheaper than
in 32,64,128,256 and 512-bit. */
6, 6, /* SSE->integer and integer->SSE moves. */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction. */
COSTS_N_INSNS (1), /* cost of a lea instruction. */
{-1, libcall, false}}}};
struct processor_costs znver2_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
/* reg-reg moves are done by renaming and thus they are even cheaper than
6, 6, /* SSE->integer and integer->SSE
moves. */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction. */
COSTS_N_INSNS (1), /* cost of a lea instruction. */
static const
struct processor_costs skylake_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{4, 4, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
2, 2, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1)+1, /* cost of a lea instruction */
{libcall, {{48, unrolled_loop, false}, {8192, rep_prefix_8_byte, false},
{-1, libcall, false}}}};
const struct processor_costs btver1_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
8, /* cost for loading QImode using movzbl */
{6, 8, 6}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
14, 14, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (2), /* cost of a lea instruction */
{libcall, {{48, unrolled_loop, false}, {8192, rep_prefix_8_byte, false},
{-1, libcall, false}}}};
const struct processor_costs btver2_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
8, /* cost for loading QImode using movzbl */
{8, 8, 6}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
14, 14, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (2), /* cost of a lea instruction */
static const
struct processor_costs pentium4_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
5, /* cost for loading QImode using movzbl */
{4, 5, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
20, 12, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (3), /* cost of a lea instruction */
static const
struct processor_costs nocona_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
4, /* cost for loading QImode using movzbl */
{4, 4, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
20, 12, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1), /* cost of a lea instruction */
{8192, rep_prefix_8_byte, false}, {-1, libcall, false}}}};
static const
struct processor_costs atom_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{6, 6, 6}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
8, 6, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */
{8192, rep_prefix_8_byte, false}, {-1, libcall, false}}}};
static const
struct processor_costs slm_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
8, /* cost for loading QImode using movzbl */
{8, 8, 8}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
8, 6, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */
{8192, rep_prefix_8_byte, false}, {-1, libcall, false}}}};
static const
struct processor_costs intel_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{4, 4, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
4, 4, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */
{-1, libcall, false}}}};
static const
struct processor_costs generic_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{6, 6, 6}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
6, 6, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
/* Setting cost to 2 makes our current implementation of synth_mult result in
static const
struct processor_costs core_cost = {
+ {
/* Start of register allocator costs. integer->integer move cost is 2. */
6, /* cost for loading QImode using movzbl */
{4, 4, 4}, /* cost of loading integer registers
in 32,64,128,256 and 512-bit */
2, 2, /* SSE->integer and integer->SSE moves */
/* End of register allocator costs. */
+ },
COSTS_N_INSNS (1), /* cost of an add instruction */
/* On all chips taken into consideration lea is 2 cycles and more. With