error ("SPE not supported in this target");
}
- /* Disable Cell microcode if we are optimizing for the Cell
- and not optimizing for size. */
- if (rs6000_gen_cell_microcode == -1)
- rs6000_gen_cell_microcode = !(rs6000_cpu == PROCESSOR_CELL
- && !optimize_size);
-
- /* If we are optimizing big endian systems for space and it's OK to
- use instructions that would be microcoded on the Cell, use the
- load/store multiple and string instructions. */
- if (BYTES_BIG_ENDIAN && optimize_size && rs6000_gen_cell_microcode)
+ /* If we are optimizing big endian systems for space, use the load/store
+ multiple and string instructions. */
+ if (BYTES_BIG_ENDIAN && optimize_size)
rs6000_isa_flags |= ~rs6000_isa_flags_explicit & (OPTION_MASK_MULTIPLE
| OPTION_MASK_STRING);
: default_external_stack_protect_fail ();
}
-void
-rs6000_final_prescan_insn (rtx_insn *insn, rtx *operand ATTRIBUTE_UNUSED,
- int num_operands ATTRIBUTE_UNUSED)
-{
- if (rs6000_warn_cell_microcode)
- {
- const char *temp;
- int insn_code_number = recog_memoized (insn);
- location_t location = INSN_LOCATION (insn);
-
- /* Punt on insns we cannot recognize. */
- if (insn_code_number < 0)
- return;
-
- /* get_insn_template can modify recog_data, so save and restore it. */
- struct recog_data_d recog_data_save = recog_data;
- for (int i = 0; i < recog_data.n_operands; i++)
- recog_data.operand[i] = copy_rtx (recog_data.operand[i]);
- temp = get_insn_template (insn_code_number, insn);
- recog_data = recog_data_save;
-
- if (get_attr_cell_micro (insn) == CELL_MICRO_ALWAYS)
- warning_at (location, OPT_mwarn_cell_microcode,
- "emitting microcode insn %s\t[%s] #%d",
- temp, insn_data[INSN_CODE (insn)].name, INSN_UID (insn));
- else if (get_attr_cell_micro (insn) == CELL_MICRO_CONDITIONAL)
- warning_at (location, OPT_mwarn_cell_microcode,
- "emitting conditional microcode insn %s\t[%s] #%d",
- temp, insn_data[INSN_CODE (insn)].name, INSN_UID (insn));
- }
-}
-
/* Implement the TARGET_ASAN_SHADOW_OFFSET hook. */
#if TARGET_ELF
{ "sched-epilog",
offsetof (struct gcc_options, x_TARGET_SCHED_PROLOG),
offsetof (struct cl_target_option, x_TARGET_SCHED_PROLOG), },
- { "gen-cell-microcode",
- offsetof (struct gcc_options, x_rs6000_gen_cell_microcode),
- offsetof (struct cl_target_option, x_rs6000_gen_cell_microcode), },
- { "warn-cell-microcode",
- offsetof (struct gcc_options, x_rs6000_warn_cell_microcode),
- offsetof (struct cl_target_option, x_rs6000_warn_cell_microcode), },
};
/* Inner function to handle attribute((target("..."))) and #pragma GCC target
(compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:EXTQI 0 "=r,r"))]
- "rs6000_gen_cell_microcode"
+ ""
"@
andi. %0,%1,0xff
#"
(const_int 0)))
(set (match_operand:EXTQI 0 "gpc_reg_operand" "=r,r")
(zero_extend:EXTQI (match_dup 1)))]
- "rs6000_gen_cell_microcode"
+ ""
"@
andi. %0,%1,0xff
#"
(compare:CC (zero_extend:EXTHI (match_operand:HI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:EXTHI 0 "=r,r"))]
- "rs6000_gen_cell_microcode"
+ ""
"@
andi. %0,%1,0xffff
#"
(const_int 0)))
(set (match_operand:EXTHI 0 "gpc_reg_operand" "=r,r")
(zero_extend:EXTHI (match_dup 1)))]
- "rs6000_gen_cell_microcode"
+ ""
"@
andi. %0,%1,0xffff
#"
(compare:CC (zero_extend:EXTSI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:EXTSI 0 "=r,r"))]
- "rs6000_gen_cell_microcode"
+ ""
"@
rldicl. %0,%1,0,32
#"
(const_int 0)))
(set (match_operand:EXTSI 0 "gpc_reg_operand" "=r,r")
(zero_extend:EXTSI (match_dup 1)))]
- "rs6000_gen_cell_microcode"
+ ""
"@
rldicl. %0,%1,0,32
#"
(compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:EXTQI 0 "=r,r"))]
- "rs6000_gen_cell_microcode"
+ ""
"@
extsb. %0,%1
#"
(const_int 0)))
(set (match_operand:EXTQI 0 "gpc_reg_operand" "=r,r")
(sign_extend:EXTQI (match_dup 1)))]
- "rs6000_gen_cell_microcode"
+ ""
"@
extsb. %0,%1
#"
(define_insn "*extendhi<mode>2"
[(set (match_operand:EXTHI 0 "gpc_reg_operand" "=r,r,?*wK,?*wK")
(sign_extend:EXTHI (match_operand:HI 1 "reg_or_mem_operand" "m,r,Z,wK")))]
- "rs6000_gen_cell_microcode || TARGET_VSX_SMALL_INTEGER"
+ ""
"@
lha%U1%X1 %0,%1
extsh %0,%1
operands[2] = gen_rtx_REG (HImode, REGNO (operands[1]));
})
-(define_insn "*extendhi<mode>2_noload"
- [(set (match_operand:EXTHI 0 "gpc_reg_operand" "=r")
- (sign_extend:EXTHI (match_operand:HI 1 "gpc_reg_operand" "r")))]
- "!rs6000_gen_cell_microcode"
- "extsh %0,%1"
- [(set_attr "type" "exts")])
-
(define_insn_and_split "*extendhi<mode>2_dot"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(compare:CC (sign_extend:EXTHI (match_operand:HI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:EXTHI 0 "=r,r"))]
- "rs6000_gen_cell_microcode"
+ ""
"@
extsh. %0,%1
#"
(const_int 0)))
(set (match_operand:EXTHI 0 "gpc_reg_operand" "=r,r")
(sign_extend:EXTHI (match_dup 1)))]
- "rs6000_gen_cell_microcode"
+ ""
"@
extsh. %0,%1
#"
(compare:CC (sign_extend:EXTSI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:EXTSI 0 "=r,r"))]
- "rs6000_gen_cell_microcode"
+ ""
"@
extsw. %0,%1
#"
(const_int 0)))
(set (match_operand:EXTSI 0 "gpc_reg_operand" "=r,r")
(sign_extend:EXTSI (match_dup 1)))]
- "rs6000_gen_cell_microcode"
+ ""
"@
extsw. %0,%1
#"
(compare:CC (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
not. %0,%1
#"
(const_int 0)))
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(not:GPR (match_dup 1)))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
not. %0,%1
#"
(match_operand:GPR 2 "gpc_reg_operand" "r,r"))
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
mull<wd>. %0,%1,%2
#"
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(mult:GPR (match_dup 1)
(match_dup 2)))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
mull<wd>. %0,%1,%2
#"
DONE;
}
- if (logical_const_operand (operands[2], <MODE>mode)
- && rs6000_gen_cell_microcode)
+ if (logical_const_operand (operands[2], <MODE>mode))
{
emit_insn (gen_and<mode>3_imm (operands[0], operands[1], operands[2]));
DONE;
(and:GPR (match_operand:GPR 1 "gpc_reg_operand" "%r")
(match_operand:GPR 2 "logical_const_operand" "n")))
(clobber (match_scratch:CC 3 "=x"))]
- "rs6000_gen_cell_microcode
- && !rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
+ "!rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
"andi%e2. %0,%1,%u2"
[(set_attr "type" "logical")
(set_attr "dot" "yes")])
(clobber (match_scratch:GPR 0 "=r,r"))
(clobber (match_scratch:CC 4 "=X,x"))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& !rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
"@
andi%e2. %0,%1,%u2
(match_dup 2)))
(clobber (match_scratch:CC 4 "=X,x"))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& !rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
"@
andi%e2. %0,%1,%u2
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
"@
andi%e2. %0,%1,%u2
(and:GPR (match_dup 1)
(match_dup 2)))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
"@
andi%e2. %0,%1,%u2
<< INTVAL (operands[4])),
DImode)
&& (<MODE>mode == Pmode
- || (UINTVAL (operands[2]) << INTVAL (operands[4])) <= 0x7fffffff)
- && rs6000_gen_cell_microcode"
+ || (UINTVAL (operands[2]) << INTVAL (operands[4])) <= 0x7fffffff)"
{
operands[2] = GEN_INT (UINTVAL (operands[2]) << INTVAL (operands[4]));
return "andi%e2. %0,%1,%u2";
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& !logical_const_operand (operands[2], <MODE>mode)
&& rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
{
(and:GPR (match_dup 1)
(match_dup 2)))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& !logical_const_operand (operands[2], <MODE>mode)
&& rs6000_is_valid_and_mask (operands[2], <MODE>mode)"
{
(match_operand:GPR 2 "const_int_operand" "n")))]
"rs6000_is_valid_2insn_and (operands[2], <MODE>mode)
&& !(rs6000_is_valid_and_mask (operands[2], <MODE>mode)
- || (logical_const_operand (operands[2], <MODE>mode)
- && rs6000_gen_cell_microcode))"
+ || logical_const_operand (operands[2], <MODE>mode))"
"#"
"&& 1"
[(pc)]
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& rs6000_is_valid_2insn_and (operands[2], <MODE>mode)
&& !(rs6000_is_valid_and_mask (operands[2], <MODE>mode)
- || (logical_const_operand (operands[2], <MODE>mode)
- && rs6000_gen_cell_microcode))"
+ || logical_const_operand (operands[2], <MODE>mode))"
"#"
"&& reload_completed"
[(pc)]
(and:GPR (match_dup 1)
(match_dup 2)))]
"(<MODE>mode == Pmode || UINTVAL (operands[2]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& rs6000_is_valid_2insn_and (operands[2], <MODE>mode)
&& !(rs6000_is_valid_and_mask (operands[2], <MODE>mode)
- || (logical_const_operand (operands[2], <MODE>mode)
- && rs6000_gen_cell_microcode))"
+ || logical_const_operand (operands[2], <MODE>mode))"
"#"
"&& reload_completed"
[(pc)]
(match_operand:GPR 2 "gpc_reg_operand" "r,r")])
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
%q3. %0,%1,%2
#"
(const_int 0)))
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(match_dup 3))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
%q3. %0,%1,%2
#"
(match_operand:GPR 1 "gpc_reg_operand" "r,r")])
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
%q3. %0,%1,%2
#"
(const_int 0)))
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(match_dup 3))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
%q3. %0,%1,%2
#"
(not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r"))])
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
%q3. %0,%1,%2
#"
(const_int 0)))
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(match_dup 3))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
%q3. %0,%1,%2
#"
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
"(<MODE>mode == Pmode || UINTVAL (operands[3]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& rs6000_is_valid_shift_mask (operands[3], operands[4], <MODE>mode)"
{
if (which_alternative == 0)
(and:GPR (match_dup 4)
(match_dup 3)))]
"(<MODE>mode == Pmode || UINTVAL (operands[3]) <= 0x7fffffff)
- && rs6000_gen_cell_microcode
&& rs6000_is_valid_shift_mask (operands[3], operands[4], <MODE>mode)"
{
if (which_alternative == 0)
(match_operand:SI 2 "reg_or_cint_operand" "rn,rn"))
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
rotl<wd>%I2. %0,%1,%<hH>2
#"
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(rotate:GPR (match_dup 1)
(match_dup 2)))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
rotl<wd>%I2. %0,%1,%<hH>2
#"
(match_operand:SI 2 "reg_or_cint_operand" "rn,rn"))
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
sl<wd>%I2. %0,%1,%<hH>2
#"
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(ashift:GPR (match_dup 1)
(match_dup 2)))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
sl<wd>%I2. %0,%1,%<hH>2
#"
(match_operand:SI 2 "reg_or_cint_operand" "rn,rn"))
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
sr<wd>%I2. %0,%1,%<hH>2
#"
(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
(lshiftrt:GPR (match_dup 1)
(match_dup 2)))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
sr<wd>%I2. %0,%1,%<hH>2
#"
(const_int 0)))
(clobber (match_scratch:GPR 0 "=r,r"))
(clobber (reg:GPR CA_REGNO))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
sra<wd>%I2. %0,%1,%<hH>2
#"
(ashiftrt:GPR (match_dup 1)
(match_dup 2)))
(clobber (reg:GPR CA_REGNO))]
- "<MODE>mode == Pmode && rs6000_gen_cell_microcode"
+ "<MODE>mode == Pmode"
"@
sra<wd>%I2. %0,%1,%<hH>2
#"
(set_attr "length" "4,4,8")])
(define_split
- [(set (match_operand:CC 2 "cc_reg_not_micro_cr0_operand" "")
- (compare:CC (match_operand:P 1 "gpc_reg_operand" "")
+ [(set (match_operand:CC 2 "cc_reg_not_cr0_operand")
+ (compare:CC (match_operand:P 1 "gpc_reg_operand")
(const_int 0)))
- (set (match_operand:P 0 "gpc_reg_operand" "") (match_dup 1))]
+ (set (match_operand:P 0 "gpc_reg_operand") (match_dup 1))]
"reload_completed"
[(set (match_dup 0) (match_dup 1))
(set (match_dup 2)
(match_operand:DI 2 "gpc_reg_operand" "r")))))
(set (match_operand:DI 0 "gpc_reg_operand" "=b")
(plus:DI (match_dup 1) (match_dup 2)))]
- "TARGET_POWERPC64 && rs6000_gen_cell_microcode
- && !avoiding_indexed_address_p (DImode)"
+ "TARGET_POWERPC64 && !avoiding_indexed_address_p (DImode)"
"lwaux %3,%0,%2"
[(set_attr "type" "load")
(set_attr "sign_extend" "yes")
(match_operand:SI 2 "reg_or_short_operand" "r,I")))))
(set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
(plus:SI (match_dup 1) (match_dup 2)))]
- "TARGET_UPDATE && rs6000_gen_cell_microcode
- && (!avoiding_indexed_address_p (SImode)
- || !gpc_reg_operand (operands[2], SImode))"
+ "TARGET_UPDATE
+ && !(avoiding_indexed_address_p (SImode)
+ && gpc_reg_operand (operands[2], SImode))"
"@
lhaux %3,%0,%2
lhau %3,%2(%0)"
(set_attr "length" "8,16")])
(define_split
- [(set (match_operand:CC 0 "cc_reg_not_micro_cr0_operand" "")
+ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand")
(compare:CC
(ashift:SI (match_operator:SI 1 "scc_comparison_operator"
- [(match_operand 2 "cc_reg_operand" "")
+ [(match_operand 2 "cc_reg_operand")
(const_int 0)])
- (match_operand:SI 3 "const_int_operand" ""))
+ (match_operand:SI 3 "const_int_operand"))
(const_int 0)))
- (set (match_operand:SI 4 "gpc_reg_operand" "")
+ (set (match_operand:SI 4 "gpc_reg_operand")
(ashift:SI (match_op_dup 1 [(match_dup 2) (const_int 0)])
(match_dup 3)))]
"reload_completed"