57 lines · c
1// RUN: %clang_cc1 -ffreestanding -triple=x86_64-apple-darwin -target-cpu skx %s -emit-llvm -o - | FileCheck %s2#include <xmmintrin.h>3// This test is complemented by the .ll test under llvm/test/MC/X86/. 4// At this level we can only check if the constarints are passed correctly5// from inline asm to llvm IR.6 7// CHECK-LABEL: @f_Ym8void f_Ym(__m64 m)9 {10 // CHECK: movq $0, %mm111 // CHECK-SAME: "=^Ym,~{dirflag},~{fpsr},~{flags}"12 __asm__ volatile ("movq %0, %%mm1\n\t"13 :"=Ym" (m));14}15 16// CHECK-LABEL: f_Yi17void f_Yi(__m128 x, __m128 y, __m128 z)18 {19 // CHECK: vpaddq20 // CHECK-SAME: "=^Yi,^Yi,^Yi,~{dirflag},~{fpsr},~{flags}"21 __asm__ volatile ("vpaddq %0, %1, %2\n\t"22 :"=Yi" (x)23 :"Yi" (y),"Yi"(z));24}25 26// CHECK-LABEL: f_Yt27void f_Yt(__m128 x, __m128 y, __m128 z)28 {29 // CHECK: vpaddq30 // CHECK-SAME: "=^Yt,^Yt,^Yt,~{dirflag},~{fpsr},~{flags}"31 __asm__ volatile ("vpaddq %0, %1, %2\n\t"32 :"=Yt" (x)33 :"Yt" (y),"Yt"(z));34}35 36// CHECK-LABEL: f_Y237void f_Y2(__m128 x, __m128 y, __m128 z)38 {39 // CHECK: vpaddq40 // CHECK-SAME: "=^Y2,^Y2,^Y2,~{dirflag},~{fpsr},~{flags}"41 __asm__ volatile ("vpaddq %0, %1, %2\n\t"42 :"=Y2" (x)43 :"Y2" (y),"Y2"(z));44}45 46// CHECK-LABEL: f_Yz47void f_Yz(__m128 x, __m128 y, __m128 z)48 {49 // CHECK: vpaddq50 // CHECK-SAME: vpaddq51 // CHECK-SAME: "=^Yi,=^Yz,^Yi,0,~{dirflag},~{fpsr},~{flags}"52 __asm__ volatile ("vpaddq %0,%2,%1\n\t"53 "vpaddq %1,%0,%2\n\t"54 :"+Yi"(z),"=Yz" (x)55 :"Yi" (y) );56}57