Clang Project

clang_source_code/test/CodeGen/avx512-kconstraints-att_inline_asm.c
1// RUN: %clang_cc1 %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror |opt -instnamer -S |FileCheck %s
2// This test checks validity of att\gcc style inline assmebly for avx512 k and Yk constraints.
3// Also checks mask register allows flexible type (size <= 64 bit)
4
5void mask_Yk_i8(char msk){ 
6//CHECK: vpaddb\09 %xmm1, %xmm0, %xmm1 {$0}\09
7 asm ("vpaddb\t %%xmm1, %%xmm0, %%xmm1 %{%0%}\t"
8       :                //output
9       : "Yk" (msk));   //inputs
10}
11
12void mask_Yk_i16(short msk){
13//CHECK: vpaddb\09 %xmm1, %xmm0, %xmm1 {$0}\09
14 asm ("vpaddb\t %%xmm1, %%xmm0, %%xmm1 %{%0%}\t"
15       :                //output
16       :  "Yk" (msk));  //inputs
17}
18
19void mask_Yk_i32(int msk){
20//CHECK: vpaddb\09 %xmm1, %xmm0, %xmm1 {$0}\09
21    asm ("vpaddb\t %%xmm1, %%xmm0, %%xmm1 %{%0%}\t"
22       :                //output
23       :  "Yk" (msk));   //inputs
24}
25
26void mask_Yk_i64(long long msk){
27//CHECK: vpaddb\09 %xmm1, %xmm0, %xmm1 {$0}\09
28 asm ("vpaddb\t %%xmm1, %%xmm0, %%xmm1 %{%0%}\t"
29       :                //output
30       :  "Yk" (msk));   //inputs
31}
32
33void k_wise_op_i8(char msk_dst,char msk_src1,char msk_src2){
34//CHECK: kandw\09$2, $1, $0
35 asm ("kandw\t%2, %1, %0"
36       : "=k" (msk_dst)
37       : "k" (msk_src1), "k" (msk_src2));
38}
39
40void k_wise_op_i16(short msk_dst, short msk_src1, short msk_src2){
41//CHECK: kandw\09$2, $1, $0
42  asm ("kandw\t%2, %1, %0"
43       : "=k" (msk_dst)
44       : "k" (msk_src1), "k" (msk_src2));
45}
46
47void k_wise_op_i32(int msk_dst, int msk_src1, int msk_src2){
48//CHECK: kandw\09$2, $1, $0
49  asm ("kandw\t%2, %1, %0"
50       : "=k" (msk_dst)
51       : "k" (msk_src1), "k" (msk_src2));
52}
53
54void k_wise_op_i64(long long msk_dst, long long msk_src1, long long msk_src2){
55//CHECK: kandw\09$2, $1, $0
56  asm ("kandw\t%2, %1, %0"
57       : "=k" (msk_dst)
58       : "k" (msk_src1), "k" (msk_src2));
59}
60