}
static __inline__ void __DEFAULT_FN_ATTRS
__movsw(unsigned short *__dst, unsigned short const *__src, size_t __n) {
- __asm__("rep movsh" : : "D"(__dst), "S"(__src), "c"(__n)
+ __asm__("rep movsw" : : "D"(__dst), "S"(__src), "c"(__n)
: "%edi", "%esi", "%ecx");
}
static __inline__ void __DEFAULT_FN_ATTRS
}
static __inline__ void __DEFAULT_FN_ATTRS
__stosw(unsigned short *__dst, unsigned short __x, size_t __n) {
- __asm__("rep stosh" : : "D"(__dst), "a"(__x), "c"(__n)
+ __asm__("rep stosw" : : "D"(__dst), "a"(__x), "c"(__n)
: "%edi", "%ecx");
}
#endif
// RUN: %clang_cc1 -triple i386-pc-win32 -target-cpu broadwell \
// RUN: -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
-// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -ffreestanding -emit-obj -o /dev/null -Werror \
// RUN: -isystem %S/Inputs/include %s
// RUN: %clang_cc1 -triple x86_64-pc-win32 \
// RUN: -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
-// RUN: -ffreestanding -fsyntax-only -Werror \
+// RUN: -ffreestanding -emit-obj -o /dev/null -Werror \
// RUN: -isystem %S/Inputs/include %s
// RUN: %clang_cc1 -triple thumbv7--windows \
// Use some C++ to make sure we closed the extern "C" brackets.
template <typename T>
void foo(T V) {}
+
+// __asm__ blocks are only checked for inline functions that end up being
+// emitted, so call functions with __asm__ blocks to make sure their inline
+// assembly parses.
+void f() {
+ __movsb(0, 0, 0);
+ __movsd(0, 0, 0);
+ __movsw(0, 0, 0);
+
+ __stosb(0, 0, 0);
+ __stosd(0, 0, 0);
+ __stosw(0, 0, 0);
+
+#ifdef _M_X64
+ __movsq(0, 0, 0);
+ __stosq(0, 0, 0);
+#endif
+
+ int info[4];
+ __cpuid(info, 0);
+ __cpuidex(info, 0, 0);
+ _xgetbv(0);
+ __halt();
+ __readmsr(0);
+
+ // FIXME: Call these in 64-bit too once the intrinsics have been fixed to
+ // work there.
+#ifndef _M_X64
+ __readcr3();
+ __writecr3(0);
+#endif
+}