aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/sync.md
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2010-04-06 20:18:42 +0200
committerUros Bizjak <uros@gcc.gnu.org>2010-04-06 20:18:42 +0200
commitd079b87fab5e8de93c897940b750286d31d5d003 (patch)
tree63fdad1fa0b970340be7cdd0dec1efa5a59642e2 /gcc/config/i386/sync.md
parentbe59db2d47d5de2c73132b9ea45bdfa7692a4bd8 (diff)
downloadgcc-d079b87fab5e8de93c897940b750286d31d5d003.zip
gcc-d079b87fab5e8de93c897940b750286d31d5d003.tar.gz
gcc-d079b87fab5e8de93c897940b750286d31d5d003.tar.bz2
i386-protos.h (x86_maybe_negate_const_int): Declare.
* config/i386/i386-protos.h (x86_maybe_negate_const_int): Declare. * config/i386/i386.c (x86_maybe_negate_const_int): New. (x86_output_mi_thunk): Use x86_maybe_negate_const_int. * config/i386/i386.md (*add<mode>_1, *addsi_1_zext, *addhi_1, *addhi_1_lea, *addqi_1, *addqi_1_lea, *addqi_1_slp, *add<mode>_2, *addsi_2_zext, *addhi_2, *addqi_2, *add<mode>_3, *addsi_3_zext, *addhi_3, *addqi_3,*add<mode>_5, *addhi_5, *addqi_5): Use x86_maybe_negate_const_int to output insn mnemonic. (*adddi_4, *addsi_4, *addhi_4, *addqi_4): Ditto. Remove overflow check from instruction predicate. Update comments. * config/i386/sync.md (sync_add<mode>): Use x86_maybe_negate_const_int to output insn mnemonic. From-SVN: r158013
Diffstat (limited to 'gcc/config/i386/sync.md')
-rw-r--r--gcc/config/i386/sync.md3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md
index 0df85c7..feea161 100644
--- a/gcc/config/i386/sync.md
+++ b/gcc/config/i386/sync.md
@@ -202,6 +202,9 @@
return "lock{%;| }dec{<imodesuffix>}\t%0";
}
+ if (x86_maybe_negate_const_int (&operands[1], <MODE>mode))
+ return "lock{%;| }sub{<imodesuffix>}\t{%1, %0|%0, %1}";
+
return "lock{%;| }add{<imodesuffix>}\t{%1, %0|%0, %1}";
})