Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 215427) +++ config/i386/i386.c (working copy) @@ -24865,9 +24865,7 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx call 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; @@ -24930,18 +24928,16 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx call if (TARGET_64BIT_MS_ABI && (!callarg2 || INTVAL (callarg2) != -2)) { - unsigned i; + int const cregs_size + = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); + int i; - vec[vec_len++] = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, const0_rtx), - UNSPEC_MS_TO_SYSV_CALL); - 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)); } } Index: config/i386/i386.md =================================================================== --- config/i386/i386.md (revision 215427) +++ config/i386/i386.md (working copy) @@ -106,7 +106,6 @@ 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 @@ -11477,15 +11476,6 @@ "* 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))] @@ -11693,16 +11683,6 @@ (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) Index: config/i386/predicates.md =================================================================== --- config/i386/predicates.md (revision 215427) +++ config/i386/predicates.md (working copy) @@ -609,36 +609,6 @@ (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") Index: testsuite/gcc.target/i386/avx-vzeroupper-16.c =================================================================== --- testsuite/gcc.target/i386/avx-vzeroupper-16.c (revision 215427) +++ testsuite/gcc.target/i386/avx-vzeroupper-16.c (working copy) @@ -14,4 +14,3 @@ foo (void) } /* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */ -/* { dg-final { scan-assembler-times "\\*call_value_rex64_ms_sysv" 1 } } */ Index: testsuite/gcc.target/i386/avx-vzeroupper-17.c =================================================================== --- testsuite/gcc.target/i386/avx-vzeroupper-17.c (revision 215427) +++ testsuite/gcc.target/i386/avx-vzeroupper-17.c (working copy) @@ -14,4 +14,3 @@ foo (void) } /* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */ -/* { dg-final { scan-assembler-times "\\*call_value_rex64_ms_sysv" 1 } } */ Index: testsuite/gcc.target/i386/avx-vzeroupper-18.c =================================================================== --- testsuite/gcc.target/i386/avx-vzeroupper-18.c (revision 215427) +++ testsuite/gcc.target/i386/avx-vzeroupper-18.c (working copy) @@ -14,4 +14,3 @@ foo (void) } /* { dg-final { scan-assembler-not "avx_vzeroupper" } } */ -/* { dg-final { scan-assembler-times "\\*call_rex64_ms_sysv" 1 } } */