re PR middle-end/37908 (atomic NAND op generate wrong code; __sync_nand_and_fetch...
authorUros Bizjak <uros@gcc.gnu.org>
Fri, 21 Nov 2008 07:28:27 +0000 (08:28 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 21 Nov 2008 07:28:27 +0000 (08:28 +0100)
commit974920dc2411fd05a1ff946e30ad76f396f8fca9
tree44c85f248e4d5e6310554b3a6ed9ba19321e9597
parent941bcbde52dcef1efc4184d83832a1cb0787c2e4
re PR middle-end/37908 (atomic NAND op generate wrong code; __sync_nand_and_fetch, __sync_fetch_and_nand)

PR middle-end/37908
* config/ia64/ia64.c (ia64_expand_atomic_ope): Properly handle NAND
case by calculating ~(new_reg & val) instead of (~new_reg & val).
* config/ia64/sync.md (sync_nand<mode>): Change insn RTX
to (not:IMODE (and:IMODE (...))).
(sync_old_nand<mode>): Ditto.
(sync_new_nand<mode>): Ditto.

From-SVN: r142082
gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/config/ia64/sync.md
gcc/testsuite/ChangeLog