84 lines · cpp
1// RUN: %clang_cc1 -triple i386-pc-win32 -target-cpu pentium4 \2// RUN: -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \3// RUN: -ffreestanding -fsyntax-only -Werror -Wsystem-headers \4// RUN: -isystem %S/Inputs/include %s5 6// RUN: %clang_cc1 -triple i386-pc-win32 -target-cpu broadwell \7// RUN: -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \8// RUN: -ffreestanding -emit-obj -o /dev/null -Werror -Wsystem-headers \9// RUN: -isystem %S/Inputs/include %s10 11// RUN: %clang_cc1 -triple x86_64-pc-win32 \12// RUN: -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \13// RUN: -ffreestanding -emit-obj -o /dev/null -Werror -Wsystem-headers \14// RUN: -isystem %S/Inputs/include %s15 16// RUN: %clang_cc1 -triple thumbv7--windows \17// RUN: -fms-compatibility -fms-compatibility-version=17.00 \18// RUN: -ffreestanding -fsyntax-only -Werror -Wsystem-headers \19// RUN: -isystem %S/Inputs/include %s20 21// RUN: %clang_cc1 -triple aarch64--windows \22// RUN: -fms-compatibility -fms-compatibility-version=17.00 \23// RUN: -ffreestanding -fsyntax-only -Werror -Wsystem-headers \24// RUN: -isystem %S/Inputs/include %s25 26// RUN: %clang_cc1 -triple arm64ec--windows \27// RUN: -fms-compatibility -fms-compatibility-version=17.00 \28// RUN: -ffreestanding -fsyntax-only -Werror -Wsystem-headers \29// RUN: -isystem %S/Inputs/include %s30 31// REQUIRES: x86-registered-target32 33// intrin.h needs size_t, but -ffreestanding prevents us from getting it from34// stddef.h. Work around it with this typedef.35typedef __SIZE_TYPE__ size_t;36 37#include <intrin.h>38 39#ifdef __ARM_ACLE40#include <arm_acle.h>41#endif42 43// Use some C++ to make sure we closed the extern "C" brackets.44template <typename T>45void foo(T V) {}46 47// __asm__ blocks are only checked for inline functions that end up being48// emitted, so call functions with __asm__ blocks to make sure their inline49// assembly parses.50void f() {51 __movsb(0, 0, 0);52 __movsd(0, 0, 0);53 __movsw(0, 0, 0);54 55 __stosd(0, 0, 0);56 __stosw(0, 0, 0);57 58#if defined(_M_X64) && !defined(_M_ARM64EC)59 __movsq(0, 0, 0);60 __stosq(0, 0, 0);61#endif62 63 int info[4];64 __cpuid(info, 0);65 __cpuidex(info, 0, 0);66#if (defined(_M_X64) && !defined(_M_ARM64EC)) || defined(_M_IX86)67 _xgetbv(0);68#endif69 __halt();70 __nop();71 __readmsr(0);72 73 __readcr3();74 __writecr3(0);75 76#ifdef _M_ARM77 __dmb(_ARM_BARRIER_ISHST);78#endif79 80#ifdef _M_ARM6481 __dmb(_ARM64_BARRIER_SY);82#endif83}84