+2014-09-21 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_expand_call): Generate MS->SYSV extra
+ clobbered registers using clobber_reg. Remove UNSPEC decoration.
+ * config/i386/i386.md (unspec) <UNSPEC_MS_TO_SYSV_CALL>: Remove.
+ (*call_rex64_ms_sysv): Remove.
+ (*call_value_rex64_ms_sysv): Ditto.
+ * config/i386/predicates.md (call_rex64_ms_sysv_operation): Remove.
+
2014-09-20 Joern Rennecke <joern.rennecke@embecosm.com>
* config/epiphany/epiphany.md (sub_f_add_imm): Change constraint of
rtx callarg2,
rtx pop, bool sibcall)
{
- unsigned int const cregs_size
- = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers);
- rtx vec[3 + cregs_size];
+ rtx vec[3];
rtx use = NULL, call;
unsigned int vec_len = 0;
if (TARGET_64BIT_MS_ABI
&& (!callarg2 || INTVAL (callarg2) != -2))
{
- unsigned i;
-
- vec[vec_len++] = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, const0_rtx),
- UNSPEC_MS_TO_SYSV_CALL);
+ int const cregs_size
+ = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers);
+ int i;
for (i = 0; i < cregs_size; i++)
{
int regno = x86_64_ms_sysv_extra_clobbered_registers[i];
enum machine_mode mode = SSE_REGNO_P (regno) ? TImode : DImode;
- vec[vec_len++]
- = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (mode, regno));
+ clobber_reg (&use, gen_rtx_REG (mode, regno));
}
}
UNSPEC_LD_MPIC ; load_macho_picbase
UNSPEC_TRUNC_NOOP
UNSPEC_DIV_ALREADY_SPLIT
- UNSPEC_MS_TO_SYSV_CALL
UNSPEC_PAUSE
UNSPEC_LEA_ADDR
UNSPEC_XBEGIN_ABORT
"* return ix86_output_call_insn (insn, operands[0]);"
[(set_attr "type" "call")])
-(define_insn "*call_rex64_ms_sysv"
- [(match_parallel 2 "call_rex64_ms_sysv_operation"
- [(call (mem:QI (match_operand:DI 0 "call_insn_operand" "rBwBz"))
- (match_operand 1))
- (unspec [(const_int 0)] UNSPEC_MS_TO_SYSV_CALL)])]
- "TARGET_64BIT && !SIBLING_CALL_P (insn)"
- "* return ix86_output_call_insn (insn, operands[0]);"
- [(set_attr "type" "call")])
-
(define_insn "*sibcall"
[(call (mem:QI (match_operand:W 0 "sibcall_insn_operand" "UBsBz"))
(match_operand 1))]
(match_dup 3)))
(unspec [(const_int 0)] UNSPEC_PEEPSIB)])])
-(define_insn "*call_value_rex64_ms_sysv"
- [(match_parallel 3 "call_rex64_ms_sysv_operation"
- [(set (match_operand 0)
- (call (mem:QI (match_operand:DI 1 "call_insn_operand" "rBwBz"))
- (match_operand 2)))
- (unspec [(const_int 0)] UNSPEC_MS_TO_SYSV_CALL)])]
- "TARGET_64BIT && !SIBLING_CALL_P (insn)"
- "* return ix86_output_call_insn (insn, operands[1]);"
- [(set_attr "type" "callv")])
-
(define_expand "call_value_pop"
[(parallel [(set (match_operand 0)
(call (match_operand:QI 1)
(and (not (match_test "TARGET_X32"))
(match_operand 0 "sibcall_memory_operand"))))
-;; Return true if OP is a call from MS ABI to SYSV ABI function.
-(define_predicate "call_rex64_ms_sysv_operation"
- (match_code "parallel")
-{
- unsigned creg_size = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers);
- unsigned i;
-
- if ((unsigned) XVECLEN (op, 0) != creg_size + 2)
- return false;
-
- for (i = 0; i < creg_size; i++)
- {
- rtx elt = XVECEXP (op, 0, i+2);
- enum machine_mode mode;
- unsigned regno;
-
- if (GET_CODE (elt) != CLOBBER
- || GET_CODE (SET_DEST (elt)) != REG)
- return false;
-
- regno = x86_64_ms_sysv_extra_clobbered_registers[i];
- mode = SSE_REGNO_P (regno) ? TImode : DImode;
-
- if (GET_MODE (SET_DEST (elt)) != mode
- || REGNO (SET_DEST (elt)) != regno)
- return false;
- }
- return true;
-})
-
;; Match exactly zero.
(define_predicate "const0_operand"
(match_code "const_int,const_double,const_vector")
+2014-09-21 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/avx-vzeroupper-16.c (dg-final): Remove check
+ for call_value_rex64_ms_sysv.
+ * gcc.target/i386/avx-vzeroupper-17.c (dg-final): Ditto.
+ * gcc.target/i386/avx-vzeroupper-18.c (dg-final): Remove check
+ for call_rex64_ms_sysv.
+
2014-09-20 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
Tobias Burnus <burnus@net-b.de>
}
/* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */
-/* { dg-final { scan-assembler-times "\\*call_value_rex64_ms_sysv" 1 } } */
}
/* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */
-/* { dg-final { scan-assembler-times "\\*call_value_rex64_ms_sysv" 1 } } */
}
/* { dg-final { scan-assembler-not "avx_vzeroupper" } } */
-/* { dg-final { scan-assembler-times "\\*call_rex64_ms_sysv" 1 } } */