(loaddi_via_fpu): Use UNSPEC_FILD_ATOMIC.
(storedi_via_fpu): Use UNSPEC_FIST_ATOMIC.
* reg-stack.c (get_true_reg): Change UNSPEC_LDA to UNSPEC_FILD_ATOMIC.
(subst_stack_regs_pat): Change UNSPEC_STA to UNSPEC_FIST_ATOMIC.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221830
138bc75d-0d04-0410-961f-
82ee72b054a4
+2015-04-02 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sync.md (UNSPEC_FILD_ATOMIC, UNSPEC_FIST_ATOMIC): New.
+ (loaddi_via_fpu): Use UNSPEC_FILD_ATOMIC.
+ (storedi_via_fpu): Use UNSPEC_FIST_ATOMIC.
+ * reg-stack.c (get_true_reg): Change UNSPEC_LDA to UNSPEC_FILD_ATOMIC.
+ (subst_stack_regs_pat): Change UNSPEC_STA to UNSPEC_FIST_ATOMIC.
+
2015-04-01 Uros Bizjak <ubizjak@gmail.com>
* config/i386/sync.md (UNSPEC_MOVA): Remove.
UNSPEC_SFENCE
UNSPEC_MFENCE
+ UNSPEC_FILD_ATOMIC
+ UNSPEC_FIST_ATOMIC
+
;; __atomic support
UNSPEC_LDA
UNSPEC_STA
(define_insn "loaddi_via_fpu"
[(set (match_operand:DF 0 "register_operand" "=f")
- (unspec:DF [(match_operand:DI 1 "memory_operand" "m")] UNSPEC_LDA))]
+ (unspec:DF [(match_operand:DI 1 "memory_operand" "m")]
+ UNSPEC_FILD_ATOMIC))]
"TARGET_80387"
"fild%Z1\t%1"
[(set_attr "type" "fmov")
(define_insn "storedi_via_fpu"
[(set (match_operand:DI 0 "memory_operand" "=m")
- (unspec:DI [(match_operand:DF 1 "register_operand" "f")] UNSPEC_STA))]
+ (unspec:DI [(match_operand:DF 1 "register_operand" "f")]
+ UNSPEC_FIST_ATOMIC))]
"TARGET_80387"
{
gcc_assert (find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != NULL_RTX);
case UNSPEC:
if (XINT (*pat, 1) == UNSPEC_TRUNC_NOOP
- || XINT (*pat, 1) == UNSPEC_LDA)
+ || XINT (*pat, 1) == UNSPEC_FILD_ATOMIC)
pat = & XVECEXP (*pat, 0, 0);
return pat;
case UNSPEC:
switch (XINT (pat_src, 1))
{
- case UNSPEC_STA:
case UNSPEC_FIST:
+ case UNSPEC_FIST_ATOMIC:
case UNSPEC_FIST_FLOOR:
case UNSPEC_FIST_CEIL: