Re: [PATCH] D24986: Headers: Add iso_volatile load/store intrinsics

2016-09-27 Thread David Majnemer via cfe-commits
majnemer added a comment.

IMO, this should be implemented in clang CodeGen so that we don't get extra 
acquire/release barriers with /volatile:ms but that might be overkill; feel 
free to disregard this.


https://reviews.llvm.org/D24986



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D24986: Headers: Add iso_volatile load/store intrinsics

2016-09-27 Thread Martin Storsjö via cfe-commits
mstorsjo created this revision.
mstorsjo added a reviewer: majnemer.
mstorsjo added a subscriber: cfe-commits.
Herald added a subscriber: aemerson.

This implements what is missing for PR30394, making it possible to compile C++ 
for ARM in MSVC mode with MSVC headers.

https://reviews.llvm.org/D24986

Files:
  lib/Headers/intrin.h

Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -1248,6 +1248,42 @@
 }
 #endif
 
+#if defined(__arm__) || defined(__aarch64__)
+static __inline__ char __DEFAULT_FN_ATTRS
+__iso_volatile_load8(const char volatile *_Src) {
+  return *_Src;
+}
+static __inline__ short __DEFAULT_FN_ATTRS
+__iso_volatile_load16(const short volatile *_Src) {
+  return *_Src;
+}
+static __inline__ int __DEFAULT_FN_ATTRS
+__iso_volatile_load32(const int volatile *_Src) {
+  return *_Src;
+}
+static __inline__ __int64 __DEFAULT_FN_ATTRS
+__iso_volatile_load64(const __int64 volatile *_Src) {
+  return *_Src;
+}
+
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store8(char volatile *_Dest, char _Value) {
+  *_Dest = _Value;
+}
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store16(short volatile *_Dest, short _Value) {
+  *_Dest = _Value;
+}
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store32(int volatile *_Dest, int _Value) {
+  *_Dest = _Value;
+}
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store64(__int64 volatile *_Dest, __int64 _Value) {
+  *_Dest = _Value;
+}
+#endif
+
 #ifdef __cplusplus
 }
 #endif


Index: lib/Headers/intrin.h
===
--- lib/Headers/intrin.h
+++ lib/Headers/intrin.h
@@ -1248,6 +1248,42 @@
 }
 #endif
 
+#if defined(__arm__) || defined(__aarch64__)
+static __inline__ char __DEFAULT_FN_ATTRS
+__iso_volatile_load8(const char volatile *_Src) {
+  return *_Src;
+}
+static __inline__ short __DEFAULT_FN_ATTRS
+__iso_volatile_load16(const short volatile *_Src) {
+  return *_Src;
+}
+static __inline__ int __DEFAULT_FN_ATTRS
+__iso_volatile_load32(const int volatile *_Src) {
+  return *_Src;
+}
+static __inline__ __int64 __DEFAULT_FN_ATTRS
+__iso_volatile_load64(const __int64 volatile *_Src) {
+  return *_Src;
+}
+
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store8(char volatile *_Dest, char _Value) {
+  *_Dest = _Value;
+}
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store16(short volatile *_Dest, short _Value) {
+  *_Dest = _Value;
+}
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store32(int volatile *_Dest, int _Value) {
+  *_Dest = _Value;
+}
+static __inline__ void __DEFAULT_FN_ATTRS
+__iso_volatile_store64(__int64 volatile *_Dest, __int64 _Value) {
+  *_Dest = _Value;
+}
+#endif
+
 #ifdef __cplusplus
 }
 #endif
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits