brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 985f857 Raw
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