re PR middle-end/37908 (atomic NAND op generate wrong code; __sync_nand_and_fetch...
authorUros Bizjak <ubizjak@gmail.com>
Mon, 1 Dec 2008 13:48:52 +0000 (14:48 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 1 Dec 2008 13:48:52 +0000 (14:48 +0100)
commitd04dceb5ff1668e6e4bb5177f9f619f5e5fffa82
treec667331d49e01b6b4de3bf8926b7b75e73632ccd
parentd40ba0b60d7c55a72392d27f2a0cf142d37a9a3e
re PR middle-end/37908 (atomic NAND op generate wrong code; __sync_nand_and_fetch, __sync_fetch_and_nand)

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

From-SVN: r142313
gcc/ChangeLog
gcc/config/alpha/alpha.c
gcc/config/alpha/sync.md