diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-04-02 07:56:05 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-04-02 07:56:05 +0000 |
commit | cb5d0a18ce433c9e3dfd0f782c0eaded09a53088 (patch) | |
tree | 05245162db6486007dff32f20190cb633afcab28 /gcc/config/i386/sync.md | |
parent | c28f0245e206e28e55e6e38cd28579bc5e32fac0 (diff) | |
download | gcc-cb5d0a18ce433c9e3dfd0f782c0eaded09a53088.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221830 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/sync.md')
-rw-r--r-- | gcc/config/i386/sync.md | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md index 3ef580be94d..61a2a819260 100644 --- a/gcc/config/i386/sync.md +++ b/gcc/config/i386/sync.md @@ -22,6 +22,9 @@ UNSPEC_SFENCE UNSPEC_MFENCE + UNSPEC_FILD_ATOMIC + UNSPEC_FIST_ATOMIC + ;; __atomic support UNSPEC_LDA UNSPEC_STA @@ -302,7 +305,8 @@ (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") @@ -311,7 +315,8 @@ (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); |