From ca43f0efca4d2a74447d0e150730f6869877f374 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 17 Dec 2009 09:34:27 +0100 Subject: [PATCH] sync.md (IMODE): Remove mode iterator. * config/i386/sync.md (IMODE): Remove mode iterator. (modesuffix): Remove mode attribute. (modeconstraint): Ditto. (immconstraint): Ditto. (*sync_compare_and_swap): Use SWI mode iterator instead of IMODE mode iterator, imodesuffix mode attribute instead of modesuffix, mode attribute instead of modeconstraint and mode attribute instead of immconstraint. (sync_double_compare_and_swap): Ditto. (sync_old_add): Ditto. (sync_lock_test_and_set): Ditto. (sync_add): Ditto. (sync_sub): Ditto. (sync_and): Ditto. (sync_ior): Ditto. (sync_xor): Ditto. (sync_): Macroize insn pattern from sync_{and,ior,xor} using any_logic code iterator. From-SVN: r155304 --- gcc/ChangeLog | 21 ++++++++ gcc/config/i386/sync.md | 106 ++++++++++++++++------------------------ 2 files changed, 62 insertions(+), 65 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b38240c70a7..8f921a415d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2009-12-17 Uros Bizjak + + * config/i386/sync.md (IMODE): Remove mode iterator. + (modesuffix): Remove mode attribute. + (modeconstraint): Ditto. + (immconstraint): Ditto. + (*sync_compare_and_swap): Use SWI mode iterator instead of + IMODE mode iterator, imodesuffix mode attribute instead of modesuffix, + mode attribute instead of modeconstraint and mode attribute + instead of immconstraint. + (sync_double_compare_and_swap): Ditto. + (sync_old_add): Ditto. + (sync_lock_test_and_set): Ditto. + (sync_add): Ditto. + (sync_sub): Ditto. + (sync_and): Ditto. + (sync_ior): Ditto. + (sync_xor): Ditto. + (sync_): Macroize insn pattern from + sync_{and,ior,xor} using any_logic code iterator. + 2009-12-17 Shujing Zhao PR c/40885 diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md index 7167a71932a..0df85c73037 100644 --- a/gcc/config/i386/sync.md +++ b/gcc/config/i386/sync.md @@ -18,13 +18,9 @@ ;; along with GCC; see the file COPYING3. If not see ;; . -(define_mode_iterator IMODE [QI HI SI (DI "TARGET_64BIT")]) -(define_mode_attr modesuffix [(QI "b") (HI "w") (SI "l") (DI "q")]) -(define_mode_attr modeconstraint [(QI "q") (HI "r") (SI "r") (DI "r")]) -(define_mode_attr immconstraint [(QI "i") (HI "i") (SI "i") (DI "e")]) - -(define_mode_iterator CASMODE [QI HI SI (DI "TARGET_64BIT || TARGET_CMPXCHG8B") - (TI "TARGET_64BIT && TARGET_CMPXCHG16B")]) +(define_mode_iterator CASMODE + [QI HI SI (DI "TARGET_64BIT || TARGET_CMPXCHG8B") + (TI "TARGET_64BIT && TARGET_CMPXCHG16B")]) (define_mode_iterator DCASMODE [(DI "!TARGET_64BIT && TARGET_CMPXCHG8B && !flag_pic") (TI "TARGET_64BIT && TARGET_CMPXCHG16B")]) @@ -105,21 +101,21 @@ }) (define_insn "*sync_compare_and_swap" - [(set (match_operand:IMODE 0 "register_operand" "=a") - (match_operand:IMODE 1 "memory_operand" "+m")) + [(set (match_operand:SWI 0 "register_operand" "=a") + (match_operand:SWI 1 "memory_operand" "+m")) (set (match_dup 1) - (unspec_volatile:IMODE + (unspec_volatile:SWI [(match_dup 1) - (match_operand:IMODE 2 "register_operand" "a") - (match_operand:IMODE 3 "register_operand" "")] + (match_operand:SWI 2 "register_operand" "a") + (match_operand:SWI 3 "register_operand" "")] UNSPECV_CMPXCHG)) (set (reg:CCZ FLAGS_REG) (compare:CCZ - (unspec_volatile:IMODE + (unspec_volatile:SWI [(match_dup 1) (match_dup 2) (match_dup 3)] UNSPECV_CMPXCHG) (match_dup 2)))] "TARGET_CMPXCHG" - "lock{%;| }cmpxchg{}\t{%3, %1|%1, %3}") + "lock{%;| }cmpxchg{}\t{%3, %1|%1, %3}") (define_insn "sync_double_compare_and_swap" [(set (match_operand:DCASMODE 0 "register_operand" "=A") @@ -169,31 +165,31 @@ "xchg{l}\t%%ebx, %3\;lock{%;| }cmpxchg8b\t%1\;xchg{l}\t%%ebx, %3") (define_insn "sync_old_add" - [(set (match_operand:IMODE 0 "register_operand" "=") - (unspec_volatile:IMODE - [(match_operand:IMODE 1 "memory_operand" "+m")] UNSPECV_XCHG)) + [(set (match_operand:SWI 0 "register_operand" "=") + (unspec_volatile:SWI + [(match_operand:SWI 1 "memory_operand" "+m")] UNSPECV_XCHG)) (set (match_dup 1) - (plus:IMODE (match_dup 1) - (match_operand:IMODE 2 "register_operand" "0"))) + (plus:SWI (match_dup 1) + (match_operand:SWI 2 "register_operand" "0"))) (clobber (reg:CC FLAGS_REG))] "TARGET_XADD" - "lock{%;| }xadd{}\t{%0, %1|%1, %0}") + "lock{%;| }xadd{}\t{%0, %1|%1, %0}") ;; Recall that xchg implicitly sets LOCK#, so adding it again wastes space. (define_insn "sync_lock_test_and_set" - [(set (match_operand:IMODE 0 "register_operand" "=") - (unspec_volatile:IMODE - [(match_operand:IMODE 1 "memory_operand" "+m")] UNSPECV_XCHG)) + [(set (match_operand:SWI 0 "register_operand" "=") + (unspec_volatile:SWI + [(match_operand:SWI 1 "memory_operand" "+m")] UNSPECV_XCHG)) (set (match_dup 1) - (match_operand:IMODE 2 "register_operand" "0"))] + (match_operand:SWI 2 "register_operand" "0"))] "" - "xchg{}\t{%1, %0|%0, %1}") + "xchg{}\t{%1, %0|%0, %1}") (define_insn "sync_add" - [(set (match_operand:IMODE 0 "memory_operand" "+m") - (unspec_volatile:IMODE - [(plus:IMODE (match_dup 0) - (match_operand:IMODE 1 "nonmemory_operand" ""))] + [(set (match_operand:SWI 0 "memory_operand" "+m") + (unspec_volatile:SWI + [(plus:SWI (match_dup 0) + (match_operand:SWI 1 "nonmemory_operand" ""))] UNSPECV_LOCK)) (clobber (reg:CC FLAGS_REG))] "" @@ -201,19 +197,19 @@ if (TARGET_USE_INCDEC) { if (operands[1] == const1_rtx) - return "lock{%;| }inc{}\t%0"; + return "lock{%;| }inc{}\t%0"; if (operands[1] == constm1_rtx) - return "lock{%;| }dec{}\t%0"; + return "lock{%;| }dec{}\t%0"; } - return "lock{%;| }add{}\t{%1, %0|%0, %1}"; + return "lock{%;| }add{}\t{%1, %0|%0, %1}"; }) (define_insn "sync_sub" - [(set (match_operand:IMODE 0 "memory_operand" "+m") - (unspec_volatile:IMODE - [(minus:IMODE (match_dup 0) - (match_operand:IMODE 1 "nonmemory_operand" ""))] + [(set (match_operand:SWI 0 "memory_operand" "+m") + (unspec_volatile:SWI + [(minus:SWI (match_dup 0) + (match_operand:SWI 1 "nonmemory_operand" ""))] UNSPECV_LOCK)) (clobber (reg:CC FLAGS_REG))] "" @@ -221,40 +217,20 @@ if (TARGET_USE_INCDEC) { if (operands[1] == const1_rtx) - return "lock{%;| }dec{}\t%0"; + return "lock{%;| }dec{}\t%0"; if (operands[1] == constm1_rtx) - return "lock{%;| }inc{}\t%0"; + return "lock{%;| }inc{}\t%0"; } - return "lock{%;| }sub{}\t{%1, %0|%0, %1}"; + return "lock{%;| }sub{}\t{%1, %0|%0, %1}"; }) -(define_insn "sync_ior" - [(set (match_operand:IMODE 0 "memory_operand" "+m") - (unspec_volatile:IMODE - [(ior:IMODE (match_dup 0) - (match_operand:IMODE 1 "nonmemory_operand" ""))] - UNSPECV_LOCK)) - (clobber (reg:CC FLAGS_REG))] - "" - "lock{%;| }or{}\t{%1, %0|%0, %1}") - -(define_insn "sync_and" - [(set (match_operand:IMODE 0 "memory_operand" "+m") - (unspec_volatile:IMODE - [(and:IMODE (match_dup 0) - (match_operand:IMODE 1 "nonmemory_operand" ""))] - UNSPECV_LOCK)) - (clobber (reg:CC FLAGS_REG))] - "" - "lock{%;| }and{}\t{%1, %0|%0, %1}") - -(define_insn "sync_xor" - [(set (match_operand:IMODE 0 "memory_operand" "+m") - (unspec_volatile:IMODE - [(xor:IMODE (match_dup 0) - (match_operand:IMODE 1 "nonmemory_operand" ""))] +(define_insn "sync_" + [(set (match_operand:SWI 0 "memory_operand" "+m") + (unspec_volatile:SWI + [(any_logic:SWI (match_dup 0) + (match_operand:SWI 1 "nonmemory_operand" ""))] UNSPECV_LOCK)) (clobber (reg:CC FLAGS_REG))] "" - "lock{%;| }xor{}\t{%1, %0|%0, %1}") + "lock{%;| }{}\t{%1, %0|%0, %1}") -- 2.30.2