[PATCH] Add implementations of __readfs{byte, word, dword, qword} to Intrin.h
Hans Wennborg
hans at chromium.org
Thu Jan 23 11:20:44 PST 2014
Uploading patch that uses the address_space attribute instead of inline asm.
Please take another look.
Hi rnk, whunt,
http://llvm-reviews.chandlerc.com/D2606
CHANGE SINCE LAST DIFF
http://llvm-reviews.chandlerc.com/D2606?vs=6607&id=6611#toc
Files:
lib/Headers/Intrin.h
Index: lib/Headers/Intrin.h
===================================================================
--- lib/Headers/Intrin.h
+++ lib/Headers/Intrin.h
@@ -101,9 +101,13 @@
unsigned long __readcr8(void);
unsigned int __readdr(unsigned int);
unsigned int __readeflags(void);
+static __inline__
unsigned char __readfsbyte(unsigned long);
+static __inline__
unsigned long __readfsdword(unsigned long);
+static __inline__
unsigned __int64 __readfsqword(unsigned long);
+static __inline__
unsigned short __readfsword(unsigned long);
unsigned __int64 __readmsr(unsigned long);
unsigned __int64 __readpmc(unsigned long);
@@ -767,6 +771,26 @@
__asm__ volatile ("" : : : "memory");
}
/*----------------------------------------------------------------------------*\
+|* readfs
+|* (Pointers in address space #257 are relative to the FS segment register.)
+\*----------------------------------------------------------------------------*/
+static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
+__readfsbyte(unsigned long __offset) {
+ return *((unsigned char __attribute__((address_space(257)))*) __offset);
+}
+static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
+__readfsdword(unsigned long __offset) {
+ return *((unsigned long __attribute__((address_space(257)))*) __offset);
+}
+static __inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__))
+__readfsqword(unsigned long __offset) {
+ return *((unsigned __int64 __attribute__((address_space(257)))*) __offset);
+}
+static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__))
+__readfsword(unsigned long __offset) {
+ return *((unsigned short __attribute__((address_space(257)))*) __offset);
+}
+/*----------------------------------------------------------------------------*\
|* Misc
\*----------------------------------------------------------------------------*/
static __inline__ void * __attribute__((__always_inline__, __nodebug__))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D2606.3.patch
Type: text/x-patch
Size: 1993 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140123/9906fa85/attachment.bin>
More information about the cfe-commits
mailing list