Update patches for clang 3.9
Patches 1-2 are just rebased from the earlier version for clang 3.8, no changes in surrounding code there. Patch 3 is necessary to fix a regression in assembling standalone assembly files in 3.9. Patch 4 makes clang work in MSVC mode with the MSVC SDK for ARM (to simplify testing of the toolchain in that mode).
This commit is contained in:
1 parent
5e1fbce075
commit
feac2f56ba
4 files changed
+188
-10
No files matched your search
@@ -0,0 +1,126 @@
|
||||
From b9f0418bc4b3f7869d549bb020271c19e69cce26 Mon Sep 17 00:00:00 2001
|
||||
From: Saleem Abdulrasool <compnerd@compnerd.org>
|
||||
Date: Sat, 6 Aug 2016 17:58:24 +0000
|
||||
Subject: [PATCH 4/4] Headers: Add ARM support to intrin.h for MSVC
|
||||
compatibility
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This fixes compiling with headers from the Windows SDK for ARM, where the
|
||||
YieldProcessor function (in winnt.h) refers to _ARM_BARRIER_ISHST.
|
||||
|
||||
The actual MSVC armintr.h contains a lot more definitions, but this is enough to
|
||||
build code that uses the Windows SDK but doesn't use ARM intrinsics directly.
|
||||
|
||||
An alternative would to just keep the addition to intrin.h (to include
|
||||
armintr.h), but not actually ship armintr.h, instead having clang's intrin.h
|
||||
include armintr.h from MSVC's include directory. (That one works fine with
|
||||
clang, at least for building code that uses the Windows SDK.)
|
||||
|
||||
Patch by Martin Storsjö!
|
||||
|
||||
Cherry-picked from SVN trunk commit 277928, git mirror commit
|
||||
cfc8939a5f1.
|
||||
---
|
||||
lib/Headers/CMakeLists.txt | 1 +
|
||||
lib/Headers/armintr.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
lib/Headers/intrin.h | 4 ++++
|
||||
test/Headers/ms-intrin.cpp | 4 ++++
|
||||
4 files changed, 54 insertions(+)
|
||||
create mode 100644 lib/Headers/armintr.h
|
||||
|
||||
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt
|
||||
index 657ef7e..600fece 100644
|
||||
--- a/lib/Headers/CMakeLists.txt
|
||||
+++ b/lib/Headers/CMakeLists.txt
|
||||
@@ -3,6 +3,7 @@ set(files
|
||||
altivec.h
|
||||
ammintrin.h
|
||||
arm_acle.h
|
||||
+ armintr.h
|
||||
avx2intrin.h
|
||||
avx512bwintrin.h
|
||||
avx512cdintrin.h
|
||||
diff --git a/lib/Headers/armintr.h b/lib/Headers/armintr.h
|
||||
new file mode 100644
|
||||
index 0000000..933afcb
|
||||
--- /dev/null
|
||||
+++ b/lib/Headers/armintr.h
|
||||
@@ -0,0 +1,45 @@
|
||||
+/*===---- armintr.h - ARM Windows intrinsics -------------------------------===
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
+ * of this software and associated documentation files (the "Software"), to deal
|
||||
+ * in the Software without restriction, including without limitation the rights
|
||||
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
+ * copies of the Software, and to permit persons to whom the Software is
|
||||
+ * furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
+ * THE SOFTWARE.
|
||||
+ *
|
||||
+ *===-----------------------------------------------------------------------===
|
||||
+ */
|
||||
+
|
||||
+/* Only include this if we're compiling for the windows platform. */
|
||||
+#ifndef _MSC_VER
|
||||
+#include_next <armintr.h>
|
||||
+#else
|
||||
+
|
||||
+#ifndef __ARMINTR_H
|
||||
+#define __ARMINTR_H
|
||||
+
|
||||
+typedef enum
|
||||
+{
|
||||
+ _ARM_BARRIER_SY = 0xF,
|
||||
+ _ARM_BARRIER_ST = 0xE,
|
||||
+ _ARM_BARRIER_ISH = 0xB,
|
||||
+ _ARM_BARRIER_ISHST = 0xA,
|
||||
+ _ARM_BARRIER_NSH = 0x7,
|
||||
+ _ARM_BARRIER_NSHST = 0x6,
|
||||
+ _ARM_BARRIER_OSH = 0x3,
|
||||
+ _ARM_BARRIER_OSHST = 0x2
|
||||
+} _ARMINTR_BARRIER_TYPE;
|
||||
+
|
||||
+#endif /* __ARMINTR_H */
|
||||
+#endif /* _MSC_VER */
|
||||
diff --git a/lib/Headers/intrin.h b/lib/Headers/intrin.h
|
||||
index f18711a..268ac4a 100644
|
||||
--- a/lib/Headers/intrin.h
|
||||
+++ b/lib/Headers/intrin.h
|
||||
@@ -34,6 +34,10 @@
|
||||
#include <x86intrin.h>
|
||||
#endif
|
||||
|
||||
+#if defined(__arm__)
|
||||
+#include <armintr.h>
|
||||
+#endif
|
||||
+
|
||||
/* For the definition of jmp_buf. */
|
||||
#if __STDC_HOSTED__
|
||||
#include <setjmp.h>
|
||||
diff --git a/test/Headers/ms-intrin.cpp b/test/Headers/ms-intrin.cpp
|
||||
index c697428..25c5531 100644
|
||||
--- a/test/Headers/ms-intrin.cpp
|
||||
+++ b/test/Headers/ms-intrin.cpp
|
||||
@@ -60,4 +60,8 @@ void f() {
|
||||
__readcr3();
|
||||
__writecr3(0);
|
||||
#endif
|
||||
+
|
||||
+#ifdef _M_ARM
|
||||
+ __dmb(_ARM_BARRIER_ISHST);
|
||||
+#endif
|
||||
}
|
||||
--
|
||||
2.7.4
|
||||
|
||||
Reference in new issue
Block a user