Description
@mtak- mentioned _xbegin
recently, we should probably expose them all via core::arch
.
The Intel RTM (Restricted Transactional Memory) intrinsics (Intel Intrinsic Guide, clang header, CPUID: RTM, EAX=7, ECX=0: Extended Features, EBX=11):
void _xabort (const unsigned int imm8)
(assert_instr(xabort)
, `llvm.x86.xabort)unsigned int _xbegin (void)
(assert_instr(xbegin)
, llvm.x86.xbegin, note: can return multiple times)void _xend (void)
(assert_instr(xend)
, llvm.x86.xend)unsigned char _xtest (void)
(assert_instr(xtest)
, llvm.x86.xtest)
We'd need to whitelist the rtm
feature in rust-lang/rust as part of this.
I've asked on the LLVM bugzilla whether xbegin
needs to be marked returns_twice
: https://bugs.llvm.org/show_bug.cgi?id=41493, Craig Topper suggested on IRC to submit an LLVM patch to mark this intrinsic / clang intrinsic as returns_twice
(cc @ctopper - hope I get the github id right), but @TNorthover mentioned that this might not be necessary or enough. We don't have to figure this out for the initial implementation, as @mtack- mentions, clang does not do this, but we should not forget about this issue.