Clang Project

clang_source_code/test/CodeGen/3dnow-builtins.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +3dnowa -emit-llvm -o - -Wall -Werror | FileCheck %s -check-prefix=GCC -check-prefix=CHECK
2// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-scei-ps4 -target-feature +3dnowa -emit-llvm -o - -Wall -Werror | FileCheck %s -check-prefix=PS4 -check-prefix=CHECK
3
4
5#include <x86intrin.h>
6
7__m64 test_m_pavgusb(__m64 m1, __m64 m2) {
8  // PS4-LABEL: define i64 @test_m_pavgusb
9  // GCC-LABEL: define double @test_m_pavgusb
10  // CHECK: @llvm.x86.3dnow.pavgusb
11  return _m_pavgusb(m1, m2);
12}
13
14__m64 test_m_pf2id(__m64 m) {
15  // PS4-LABEL: define i64 @test_m_pf2id
16  // GCC-LABEL: define double @test_m_pf2id
17  // CHECK: @llvm.x86.3dnow.pf2id
18  return _m_pf2id(m);
19}
20
21__m64 test_m_pfacc(__m64 m1, __m64 m2) {
22  // PS4-LABEL: define i64 @test_m_pfacc
23  // GCC-LABEL: define double @test_m_pfacc
24  // CHECK: @llvm.x86.3dnow.pfacc
25  return _m_pfacc(m1, m2);
26}
27
28__m64 test_m_pfadd(__m64 m1, __m64 m2) {
29  // PS4-LABEL: define i64 @test_m_pfadd
30  // GCC-LABEL: define double @test_m_pfadd
31  // CHECK: @llvm.x86.3dnow.pfadd
32  return _m_pfadd(m1, m2);
33}
34
35__m64 test_m_pfcmpeq(__m64 m1, __m64 m2) {
36  // PS4-LABEL: define i64 @test_m_pfcmpeq
37  // GCC-LABEL: define double @test_m_pfcmpeq
38  // CHECK: @llvm.x86.3dnow.pfcmpeq
39  return _m_pfcmpeq(m1, m2);
40}
41
42__m64 test_m_pfcmpge(__m64 m1, __m64 m2) {
43  // PS4-LABEL: define i64 @test_m_pfcmpge
44  // GCC-LABEL: define double @test_m_pfcmpge
45  // CHECK: @llvm.x86.3dnow.pfcmpge
46  return _m_pfcmpge(m1, m2);
47}
48
49__m64 test_m_pfcmpgt(__m64 m1, __m64 m2) {
50  // PS4-LABEL: define i64 @test_m_pfcmpgt
51  // GCC-LABEL: define double @test_m_pfcmpgt
52  // CHECK: @llvm.x86.3dnow.pfcmpgt
53  return _m_pfcmpgt(m1, m2);
54}
55
56__m64 test_m_pfmax(__m64 m1, __m64 m2) {
57  // PS4-LABEL: define i64 @test_m_pfmax
58  // GCC-LABEL: define double @test_m_pfmax
59  // CHECK: @llvm.x86.3dnow.pfmax
60  return _m_pfmax(m1, m2);
61}
62
63__m64 test_m_pfmin(__m64 m1, __m64 m2) {
64  // PS4-LABEL: define i64 @test_m_pfmin
65  // GCC-LABEL: define double @test_m_pfmin
66  // CHECK: @llvm.x86.3dnow.pfmin
67  return _m_pfmin(m1, m2);
68}
69
70__m64 test_m_pfmul(__m64 m1, __m64 m2) {
71  // PS4-LABEL: define i64 @test_m_pfmul
72  // GCC-LABEL: define double @test_m_pfmul
73  // CHECK: @llvm.x86.3dnow.pfmul
74  return _m_pfmul(m1, m2);
75}
76
77__m64 test_m_pfrcp(__m64 m) {
78  // PS4-LABEL: define i64 @test_m_pfrcp
79  // GCC-LABEL: define double @test_m_pfrcp
80  // CHECK: @llvm.x86.3dnow.pfrcp
81  return _m_pfrcp(m);
82}
83
84__m64 test_m_pfrcpit1(__m64 m1, __m64 m2) {
85  // PS4-LABEL: define i64 @test_m_pfrcpit1
86  // GCC-LABEL: define double @test_m_pfrcpit1
87  // CHECK: @llvm.x86.3dnow.pfrcpit1
88  return _m_pfrcpit1(m1, m2);
89}
90
91__m64 test_m_pfrcpit2(__m64 m1, __m64 m2) {
92  // PS4-LABEL: define i64 @test_m_pfrcpit2
93  // GCC-LABEL: define double @test_m_pfrcpit2
94  // CHECK: @llvm.x86.3dnow.pfrcpit2
95  return _m_pfrcpit2(m1, m2);
96}
97
98__m64 test_m_pfrsqrt(__m64 m) {
99  // PS4-LABEL: define i64 @test_m_pfrsqrt
100  // GCC-LABEL: define double @test_m_pfrsqrt
101  // CHECK: @llvm.x86.3dnow.pfrsqrt
102  return _m_pfrsqrt(m);
103}
104
105__m64 test_m_pfrsqrtit1(__m64 m1, __m64 m2) {
106  // PS4-LABEL: define i64 @test_m_pfrsqrtit1
107  // GCC-LABEL: define double @test_m_pfrsqrtit1
108  // CHECK: @llvm.x86.3dnow.pfrsqit1
109  return _m_pfrsqrtit1(m1, m2);
110}
111
112__m64 test_m_pfsub(__m64 m1, __m64 m2) {
113  // PS4-LABEL: define i64 @test_m_pfsub
114  // GCC-LABEL: define double @test_m_pfsub
115  // CHECK: @llvm.x86.3dnow.pfsub
116  return _m_pfsub(m1, m2);
117}
118
119__m64 test_m_pfsubr(__m64 m1, __m64 m2) {
120  // PS4-LABEL: define i64 @test_m_pfsubr
121  // GCC-LABEL: define double @test_m_pfsubr
122  // CHECK: @llvm.x86.3dnow.pfsubr
123  return _m_pfsubr(m1, m2);
124}
125
126__m64 test_m_pi2fd(__m64 m) {
127  // PS4-LABEL: define i64 @test_m_pi2fd
128  // GCC-LABEL: define double @test_m_pi2fd
129  // CHECK: @llvm.x86.3dnow.pi2fd
130  return _m_pi2fd(m);
131}
132
133__m64 test_m_pmulhrw(__m64 m1, __m64 m2) {
134  // PS4-LABEL: define i64 @test_m_pmulhrw
135  // GCC-LABEL: define double @test_m_pmulhrw
136  // CHECK: @llvm.x86.3dnow.pmulhrw
137  return _m_pmulhrw(m1, m2);
138}
139
140__m64 test_m_pf2iw(__m64 m) {
141  // PS4-LABEL: define i64 @test_m_pf2iw
142  // GCC-LABEL: define double @test_m_pf2iw
143  // CHECK: @llvm.x86.3dnowa.pf2iw
144  return _m_pf2iw(m);
145}
146
147__m64 test_m_pfnacc(__m64 m1, __m64 m2) {
148  // PS4-LABEL: define i64 @test_m_pfnacc
149  // GCC-LABEL: define double @test_m_pfnacc
150  // CHECK: @llvm.x86.3dnowa.pfnacc
151  return _m_pfnacc(m1, m2);
152}
153
154__m64 test_m_pfpnacc(__m64 m1, __m64 m2) {
155  // PS4-LABEL: define i64 @test_m_pfpnacc
156  // GCC-LABEL: define double @test_m_pfpnacc
157  // CHECK: @llvm.x86.3dnowa.pfpnacc
158  return _m_pfpnacc(m1, m2);
159}
160
161__m64 test_m_pi2fw(__m64 m) {
162  // PS4-LABEL: define i64 @test_m_pi2fw
163  // GCC-LABEL: define double @test_m_pi2fw
164  // CHECK: @llvm.x86.3dnowa.pi2fw
165  return _m_pi2fw(m);
166}
167
168__m64 test_m_pswapdsf(__m64 m) {
169  // PS4-LABEL: define i64 @test_m_pswapdsf
170  // GCC-LABEL: define double @test_m_pswapdsf
171  // CHECK: @llvm.x86.3dnowa.pswapd
172  return _m_pswapdsf(m);
173}
174
175__m64 test_m_pswapdsi(__m64 m) {
176  // PS4-LABEL: define i64 @test_m_pswapdsi
177  // GCC-LABEL: define double @test_m_pswapdsi
178  // CHECK: @llvm.x86.3dnowa.pswapd
179  return _m_pswapdsi(m);
180}
181