diff options
author | Dominik Vogt <vogt@linux.vnet.ibm.com> | 2014-11-06 17:00:13 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2014-11-06 17:00:13 +0000 |
commit | 4ad4ebfeae632ead1aa06203690ec7701569bb2f (patch) | |
tree | 621d9340f7661e102a0c50897112ac42be195aee /libgo/runtime/runtime.c | |
parent | 5c2648fb01c1476f9d71c8388089e0c5afa07091 (diff) | |
download | gcc-4ad4ebfeae632ead1aa06203690ec7701569bb2f.zip gcc-4ad4ebfeae632ead1aa06203690ec7701569bb2f.tar.gz gcc-4ad4ebfeae632ead1aa06203690ec7701569bb2f.tar.bz2 |
runtime: Use stckf unconditionally on s390.
2014-11-05 Dominik Vogt <vogt@linux.vnet.ibm.com>
* libgo/runtime/runtime.c (runtime_cputicks): s390: use stckf
unconditionally
From-SVN: r217195
Diffstat (limited to 'libgo/runtime/runtime.c')
-rw-r--r-- | libgo/runtime/runtime.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libgo/runtime/runtime.c b/libgo/runtime/runtime.c index abc1aff..496e77b 100644 --- a/libgo/runtime/runtime.c +++ b/libgo/runtime/runtime.c @@ -195,12 +195,12 @@ runtime_cputicks(void) asm("rdtsc" : "=a" (low), "=d" (high)); return (int64)(((uint64)high << 32) | (uint64)low); #elif defined (__s390__) || defined (__s390x__) - uint64 clock; -#ifdef S390_HAVE_STCKF - asm("stckf\t%0" : "=Q" (clock) : : ); -#else - clock = 0; -#endif + uint64 clock = 0; + /* stckf may not write the return variable in case of a clock error, so make + it read-write to prevent that the initialisation is optimised out. + Note: Targets below z9-109 will crash when executing store clock fast, i.e. + we don't support Go for machines older than that. */ + asm volatile(".insn s,0xb27c0000,%0" /* stckf */ : "+Q" (clock) : : "cc" ); return (int64)clock; #else // FIXME: implement for other processors. |