aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2013-10-07 07:50:25 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2013-10-07 07:50:25 +0000
commitee163e721aed1e4f732ad5ca447a0797a9318e23 (patch)
tree644e37d1107cff6b03cc1ec491d9e08343ab9a94 /gcc
parent2a1a5775d94b931c52693410393e8ec1b460ddfd (diff)
downloadgcc-ee163e721aed1e4f732ad5ca447a0797a9318e23.zip
gcc-ee163e721aed1e4f732ad5ca447a0797a9318e23.tar.gz
gcc-ee163e721aed1e4f732ad5ca447a0797a9318e23.tar.bz2
2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.md ("tbegin", "tbegin_nofloat", "tbegin_retry") ("tbegin_retry_nofloat", "tend", "tabort", "tx_assist"): Remove constraint letters from expanders. ("tbegin_retry", "tbegin_retry_nofloat"): Change predicate of the retry count to general_operand. ("tabort"): Give operand 0 a mode. ("tabort_1"): Add mode and constraint letter for operand 0. * doc/extend.texi: Fix protoype of __builtin_non_tx_store. 2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * gcc.target/s390/htm-1.c: Add more tests to cover different operand types. From-SVN: r203239
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/s390/s390.md28
-rw-r--r--gcc/doc/extend.texi2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/s390/htm-1.c48
5 files changed, 73 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf4a45c..d91beec 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.md ("tbegin", "tbegin_nofloat", "tbegin_retry")
+ ("tbegin_retry_nofloat", "tend", "tabort", "tx_assist"): Remove
+ constraint letters from expanders.
+ ("tbegin_retry", "tbegin_retry_nofloat"): Change predicate of the
+ retry count to general_operand.
+ ("tabort"): Give operand 0 a mode.
+ ("tabort_1"): Add mode and constraint letter for operand 0.
+ * doc/extend.texi: Fix protoype of __builtin_non_tx_store.
+
2013-10-04 Jeff Law <law@redhat.com>
* tree-ssa-threadedge.c: Fix some trailing whitespace problems.
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index cf9ef77..bb1408e 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -9962,8 +9962,8 @@
; Non-constrained transaction begin
(define_expand "tbegin"
- [(match_operand:SI 0 "register_operand" "=d")
- (match_operand:BLK 1 "memory_operand" "=Q")]
+ [(match_operand:SI 0 "register_operand" "")
+ (match_operand:BLK 1 "memory_operand" "")]
"TARGET_HTM"
{
s390_expand_tbegin (operands[0], operands[1], NULL_RTX, true);
@@ -9971,8 +9971,8 @@
})
(define_expand "tbegin_nofloat"
- [(match_operand:SI 0 "register_operand" "=d")
- (match_operand:BLK 1 "memory_operand" "=Q")]
+ [(match_operand:SI 0 "register_operand" "")
+ (match_operand:BLK 1 "memory_operand" "")]
"TARGET_HTM"
{
s390_expand_tbegin (operands[0], operands[1], NULL_RTX, false);
@@ -9980,9 +9980,9 @@
})
(define_expand "tbegin_retry"
- [(match_operand:SI 0 "register_operand" "=d")
- (match_operand:BLK 1 "memory_operand" "=Q")
- (match_operand 2 "const_int_operand")]
+ [(match_operand:SI 0 "register_operand" "")
+ (match_operand:BLK 1 "memory_operand" "")
+ (match_operand:SI 2 "general_operand" "")]
"TARGET_HTM"
{
s390_expand_tbegin (operands[0], operands[1], operands[2], true);
@@ -9990,9 +9990,9 @@
})
(define_expand "tbegin_retry_nofloat"
- [(match_operand:SI 0 "register_operand" "=d")
- (match_operand:BLK 1 "memory_operand" "=Q")
- (match_operand 2 "const_int_operand")]
+ [(match_operand:SI 0 "register_operand" "")
+ (match_operand:BLK 1 "memory_operand" "")
+ (match_operand:SI 2 "general_operand" "")]
"TARGET_HTM"
{
s390_expand_tbegin (operands[0], operands[1], operands[2], false);
@@ -10059,7 +10059,7 @@
(define_expand "tend"
[(set (reg:CCRAW CC_REGNUM)
(unspec_volatile:CCRAW [(const_int 0)] UNSPECV_TEND))
- (set (match_operand:SI 0 "register_operand" "=d")
+ (set (match_operand:SI 0 "register_operand" "")
(unspec:SI [(reg:CCRAW CC_REGNUM)] UNSPEC_CC_TO_INT))]
"TARGET_HTM"
"")
@@ -10074,7 +10074,7 @@
; Transaction abort
(define_expand "tabort"
- [(unspec_volatile [(match_operand 0 "shift_count_or_setmem_operand" "")]
+ [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "")]
UNSPECV_TABORT)]
"TARGET_HTM && operands != NULL"
{
@@ -10089,7 +10089,7 @@
})
(define_insn "*tabort_1"
- [(unspec_volatile [(match_operand 0 "shift_count_or_setmem_operand" "")]
+ [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "Y")]
UNSPECV_TABORT)]
"TARGET_HTM && operands != NULL"
"tabort\t%Y0"
@@ -10118,7 +10118,7 @@
(define_expand "tx_assist"
[(set (match_dup 1) (const_int 0))
- (unspec_volatile [(match_operand:SI 0 "register_operand" "d")
+ (unspec_volatile [(match_operand:SI 0 "register_operand" "")
(match_dup 1)
(const_int 1)]
UNSPECV_PPA)]
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index d722774..782c55e 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -15046,7 +15046,7 @@ depth is returned as integer value. For a nesting depth of 0 the code
is not executed as part of an transaction.
@end deftypefn
-@deftypefn {Built-in Function} void __builtin_non_tx_store (unsigned long long *, unsigned long long)
+@deftypefn {Built-in Function} void __builtin_non_tx_store (uint64_t *, uint64_t)
Generates the @code{ntstg} machine instruction. The second argument
is written to the first arguments location. The store operation will
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 016545a..5dccbe7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * gcc.target/s390/htm-1.c: Add more tests to cover different
+ operand types.
+
2013-10-06 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58126
diff --git a/gcc/testsuite/gcc.target/s390/htm-1.c b/gcc/testsuite/gcc.target/s390/htm-1.c
index e6321de..245ba2c 100644
--- a/gcc/testsuite/gcc.target/s390/htm-1.c
+++ b/gcc/testsuite/gcc.target/s390/htm-1.c
@@ -7,11 +7,12 @@
#include <stdint.h>
#include <htmintrin.h>
-int a = 0;
+int global = 0;
uint64_t g;
+struct __htm_tdb global_tdb;
int
-foo (struct __htm_tdb* tdb)
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
{
int cc;
@@ -19,19 +20,54 @@ foo (struct __htm_tdb* tdb)
cc = __builtin_tbegin (0);
cc = __builtin_tbegin (tdb);
+ cc = __builtin_tbegin (&global_tdb);
+
cc = __builtin_tbegin_nofloat (0);
- cc = __builtin_tbegin_nofloat (tdb);
+ cc = __builtin_tbegin_nofloat (&global_tdb);
+
cc = __builtin_tbegin_retry (0, 42);
+ cc = __builtin_tbegin_retry (0, reg);
+ cc = __builtin_tbegin_retry (0, *mem);
+ cc = __builtin_tbegin_retry (0, global);
cc = __builtin_tbegin_retry (tdb, 42);
+ cc = __builtin_tbegin_retry (&global_tdb, 42);
+
cc = __builtin_tbegin_retry_nofloat (0, 42);
- cc = __builtin_tbegin_retry_nofloat (tdb, 42);
+ cc = __builtin_tbegin_retry_nofloat (0, reg);
+ cc = __builtin_tbegin_retry_nofloat (0, *mem);
+ cc = __builtin_tbegin_retry_nofloat (0, global);
+ cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
+
__builtin_tbeginc ();
+
n = __builtin_tx_nesting_depth();
- __builtin_non_tx_store(&g, n);
+
+ __builtin_non_tx_store(&g, 23);
+ __builtin_non_tx_store(mem64, 23);
+ __builtin_non_tx_store(&g, reg);
+ __builtin_non_tx_store(&g, *mem);
+ __builtin_non_tx_store(&g, global);
+
__builtin_tabort (42 + 255);
+ __builtin_tabort (reg);
+ /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
+ __builtin_tabort (reg + 255);
+ __builtin_tabort (*mem);
+ __builtin_tabort (global);
+ /* Here global + 255 gets reloaded into a reg. Better would be to
+ just reload global or *mem and get the +255 for free as address
+ arithmetic. */
+ __builtin_tabort (*mem + 255);
+ __builtin_tabort (global + 255);
+
__builtin_tend();
+
__builtin_tx_assist (23);
+ __builtin_tx_assist (reg);
+ __builtin_tx_assist (*mem);
+ __builtin_tx_assist (global);
}
+
/* Make sure the tdb NULL argument ends up as immediate value in the
instruction. */
-/* { dg-final { scan-assembler-times "tbegin\t0," 4 } } */
+/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */