summaryrefslogtreecommitdiff
path: root/libitm/config/x86
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-11-09 19:51:49 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-11-09 19:51:49 +0000
commitf3210a53394de39a8aa74ec9dcb23f2cc0551322 (patch)
tree5eb7fbe12a188f836f5b73e1ad1f49fdf125139c /libitm/config/x86
parent57df6e5819addfc5c860d0b15fd2f0cde055a8fa (diff)
downloadgcc-f3210a53394de39a8aa74ec9dcb23f2cc0551322.tar.gz
libitm: Avoid non-portable x86 branch prediction mnemonic.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181233 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libitm/config/x86')
-rw-r--r--libitm/config/x86/cacheline.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/libitm/config/x86/cacheline.h b/libitm/config/x86/cacheline.h
index 15a95b0be5b..f91d7ccb802 100644
--- a/libitm/config/x86/cacheline.h
+++ b/libitm/config/x86/cacheline.h
@@ -144,7 +144,7 @@ gtm_cacheline::operator= (const gtm_cacheline & __restrict s)
}
#endif
-// ??? Support masked integer stores more efficiently with an unlocked cmpxchg
+// Support masked integer stores more efficiently with an unlocked cmpxchg
// insn. My reasoning is that while we write to locations that we do not wish
// to modify, we do it in an uninterruptable insn, and so we either truely
// write back the original data or the insn fails -- unlike with a
@@ -171,7 +171,8 @@ gtm_cacheline::store_mask (uint32_t *d, uint32_t s, uint8_t m)
"and %[m], %[n]\n\t"
"or %[s], %[n]\n\t"
"cmpxchg %[n], %[d]\n\t"
- "jnz,pn 0b"
+ ".byte 0x2e\n\t" // predict not-taken, aka jnz,pn
+ "jnz 0b"
: [d] "+m"(*d), [n] "=&r" (n), [o] "+a"(o)
: [s] "r" (s & bm), [m] "r" (~bm));
}
@@ -198,7 +199,8 @@ gtm_cacheline::store_mask (uint64_t *d, uint64_t s, uint8_t m)
"and %[m], %[n]\n\t"
"or %[s], %[n]\n\t"
"cmpxchg %[n], %[d]\n\t"
- "jnz,pn 0b"
+ ".byte 0x2e\n\t" // predict not-taken, aka jnz,pn
+ "jnz 0b"
: [d] "+m"(*d), [n] "=&r" (n), [o] "+a"(o)
: [s] "r" (s & bm), [m] "r" (~bm));
#else