comparison gcc/config/i386/fma4intrin.h @ 67:f6334be47118

update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Mar 2011 17:18:12 +0900
parents 77e2b8dfacca
children 04ced10e8804
comparison
equal deleted inserted replaced
65:65488c3d617d 67:f6334be47118
1 /* Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. 1 /* Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
2 2
3 This file is part of GCC. 3 This file is part of GCC.
4 4
5 GCC is free software; you can redistribute it and/or modify 5 GCC is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
62 62
63 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 63 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
64 _mm_msub_ps (__m128 __A, __m128 __B, __m128 __C) 64 _mm_msub_ps (__m128 __A, __m128 __B, __m128 __C)
65 65
66 { 66 {
67 return (__m128) __builtin_ia32_vfmsubps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 67 return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
68 } 68 }
69 69
70 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 70 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
71 _mm_msub_pd (__m128d __A, __m128d __B, __m128d __C) 71 _mm_msub_pd (__m128d __A, __m128d __B, __m128d __C)
72 { 72 {
73 return (__m128d) __builtin_ia32_vfmsubpd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 73 return (__m128d) __builtin_ia32_vfmaddpd ((__v2df)__A, (__v2df)__B, -(__v2df)__C);
74 } 74 }
75 75
76 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 76 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
77 _mm_msub_ss (__m128 __A, __m128 __B, __m128 __C) 77 _mm_msub_ss (__m128 __A, __m128 __B, __m128 __C)
78 { 78 {
79 return (__m128) __builtin_ia32_vfmsubss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 79 return (__m128) __builtin_ia32_vfmaddss ((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
80 } 80 }
81 81
82 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 82 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
83 _mm_msub_sd (__m128d __A, __m128d __B, __m128d __C) 83 _mm_msub_sd (__m128d __A, __m128d __B, __m128d __C)
84 { 84 {
85 return (__m128d) __builtin_ia32_vfmsubsd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 85 return (__m128d) __builtin_ia32_vfmaddsd ((__v2df)__A, (__v2df)__B, -(__v2df)__C);
86 } 86 }
87 87
88 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 88 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
89 _mm_nmacc_ps (__m128 __A, __m128 __B, __m128 __C) 89 _mm_nmacc_ps (__m128 __A, __m128 __B, __m128 __C)
90 { 90 {
91 return (__m128) __builtin_ia32_vfnmaddps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 91 return (__m128) __builtin_ia32_vfmaddps (-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
92 } 92 }
93 93
94 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 94 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
95 _mm_nmacc_pd (__m128d __A, __m128d __B, __m128d __C) 95 _mm_nmacc_pd (__m128d __A, __m128d __B, __m128d __C)
96 { 96 {
97 return (__m128d) __builtin_ia32_vfnmaddpd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 97 return (__m128d) __builtin_ia32_vfmaddpd (-(__v2df)__A, (__v2df)__B, (__v2df)__C);
98 } 98 }
99 99
100 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 100 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
101 _mm_nmacc_ss (__m128 __A, __m128 __B, __m128 __C) 101 _mm_nmacc_ss (__m128 __A, __m128 __B, __m128 __C)
102 { 102 {
103 return (__m128) __builtin_ia32_vfnmaddss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 103 return (__m128) __builtin_ia32_vfmaddss (-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
104 } 104 }
105 105
106 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 106 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
107 _mm_nmacc_sd (__m128d __A, __m128d __B, __m128d __C) 107 _mm_nmacc_sd (__m128d __A, __m128d __B, __m128d __C)
108 { 108 {
109 return (__m128d) __builtin_ia32_vfnmaddsd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 109 return (__m128d) __builtin_ia32_vfmaddsd (-(__v2df)__A, (__v2df)__B, (__v2df)__C);
110 } 110 }
111 111
112 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 112 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
113 _mm_nmsub_ps (__m128 __A, __m128 __B, __m128 __C) 113 _mm_nmsub_ps (__m128 __A, __m128 __B, __m128 __C)
114 { 114 {
115 return (__m128) __builtin_ia32_vfnmsubps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 115 return (__m128) __builtin_ia32_vfmaddps (-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
116 } 116 }
117 117
118 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 118 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
119 _mm_nmsub_pd (__m128d __A, __m128d __B, __m128d __C) 119 _mm_nmsub_pd (__m128d __A, __m128d __B, __m128d __C)
120 { 120 {
121 return (__m128d) __builtin_ia32_vfnmsubpd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 121 return (__m128d) __builtin_ia32_vfmaddpd (-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
122 } 122 }
123 123
124 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 124 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
125 _mm_nmsub_ss (__m128 __A, __m128 __B, __m128 __C) 125 _mm_nmsub_ss (__m128 __A, __m128 __B, __m128 __C)
126 { 126 {
127 return (__m128) __builtin_ia32_vfnmsubss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 127 return (__m128) __builtin_ia32_vfmaddss (-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
128 } 128 }
129 129
130 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 130 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
131 _mm_nmsub_sd (__m128d __A, __m128d __B, __m128d __C) 131 _mm_nmsub_sd (__m128d __A, __m128d __B, __m128d __C)
132 { 132 {
133 return (__m128d) __builtin_ia32_vfnmsubsd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 133 return (__m128d) __builtin_ia32_vfmaddsd (-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
134 } 134 }
135 135
136 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 136 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
137 _mm_maddsub_ps (__m128 __A, __m128 __B, __m128 __C) 137 _mm_maddsub_ps (__m128 __A, __m128 __B, __m128 __C)
138 { 138 {
146 } 146 }
147 147
148 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 148 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
149 _mm_msubadd_ps (__m128 __A, __m128 __B, __m128 __C) 149 _mm_msubadd_ps (__m128 __A, __m128 __B, __m128 __C)
150 { 150 {
151 return (__m128) __builtin_ia32_vfmsubaddps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C); 151 return (__m128) __builtin_ia32_vfmaddsubps ((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
152 } 152 }
153 153
154 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 154 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
155 _mm_msubadd_pd (__m128d __A, __m128d __B, __m128d __C) 155 _mm_msubadd_pd (__m128d __A, __m128d __B, __m128d __C)
156 { 156 {
157 return (__m128d) __builtin_ia32_vfmsubaddpd ((__v2df)__A, (__v2df)__B, (__v2df)__C); 157 return (__m128d) __builtin_ia32_vfmaddsubpd ((__v2df)__A, (__v2df)__B, -(__v2df)__C);
158 } 158 }
159 159
160 /* 256b Floating point multiply/add type instructions. */ 160 /* 256b Floating point multiply/add type instructions. */
161 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 161 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
162 _mm256_macc_ps (__m256 __A, __m256 __B, __m256 __C) 162 _mm256_macc_ps (__m256 __A, __m256 __B, __m256 __C)
172 172
173 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 173 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
174 _mm256_msub_ps (__m256 __A, __m256 __B, __m256 __C) 174 _mm256_msub_ps (__m256 __A, __m256 __B, __m256 __C)
175 175
176 { 176 {
177 return (__m256) __builtin_ia32_vfmsubps256 ((__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 177 return (__m256) __builtin_ia32_vfmaddps256 ((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
178 } 178 }
179 179
180 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 180 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
181 _mm256_msub_pd (__m256d __A, __m256d __B, __m256d __C) 181 _mm256_msub_pd (__m256d __A, __m256d __B, __m256d __C)
182 { 182 {
183 return (__m256d) __builtin_ia32_vfmsubpd256 ((__v4df)__A, (__v4df)__B, (__v4df)__C); 183 return (__m256d) __builtin_ia32_vfmaddpd256 ((__v4df)__A, (__v4df)__B, -(__v4df)__C);
184 } 184 }
185 185
186 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 186 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
187 _mm256_nmacc_ps (__m256 __A, __m256 __B, __m256 __C) 187 _mm256_nmacc_ps (__m256 __A, __m256 __B, __m256 __C)
188 { 188 {
189 return (__m256) __builtin_ia32_vfnmaddps256 ((__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 189 return (__m256) __builtin_ia32_vfmaddps256 (-(__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
190 } 190 }
191 191
192 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 192 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
193 _mm256_nmacc_pd (__m256d __A, __m256d __B, __m256d __C) 193 _mm256_nmacc_pd (__m256d __A, __m256d __B, __m256d __C)
194 { 194 {
195 return (__m256d) __builtin_ia32_vfnmaddpd256 ((__v4df)__A, (__v4df)__B, (__v4df)__C); 195 return (__m256d) __builtin_ia32_vfmaddpd256 (-(__v4df)__A, (__v4df)__B, (__v4df)__C);
196 } 196 }
197 197
198 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 198 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
199 _mm256_nmsub_ps (__m256 __A, __m256 __B, __m256 __C) 199 _mm256_nmsub_ps (__m256 __A, __m256 __B, __m256 __C)
200 { 200 {
201 return (__m256) __builtin_ia32_vfnmsubps256 ((__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 201 return (__m256) __builtin_ia32_vfmaddps256 (-(__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
202 } 202 }
203 203
204 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 204 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
205 _mm256_nmsub_pd (__m256d __A, __m256d __B, __m256d __C) 205 _mm256_nmsub_pd (__m256d __A, __m256d __B, __m256d __C)
206 { 206 {
207 return (__m256d) __builtin_ia32_vfnmsubpd256 ((__v4df)__A, (__v4df)__B, (__v4df)__C); 207 return (__m256d) __builtin_ia32_vfmaddpd256 (-(__v4df)__A, (__v4df)__B, -(__v4df)__C);
208 } 208 }
209 209
210 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 210 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
211 _mm256_maddsub_ps (__m256 __A, __m256 __B, __m256 __C) 211 _mm256_maddsub_ps (__m256 __A, __m256 __B, __m256 __C)
212 { 212 {
220 } 220 }
221 221
222 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 222 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
223 _mm256_msubadd_ps (__m256 __A, __m256 __B, __m256 __C) 223 _mm256_msubadd_ps (__m256 __A, __m256 __B, __m256 __C)
224 { 224 {
225 return (__m256) __builtin_ia32_vfmsubaddps256 ((__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 225 return (__m256) __builtin_ia32_vfmaddsubps256 ((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
226 } 226 }
227 227
228 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 228 extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
229 _mm256_msubadd_pd (__m256d __A, __m256d __B, __m256d __C) 229 _mm256_msubadd_pd (__m256d __A, __m256d __B, __m256d __C)
230 { 230 {
231 return (__m256d) __builtin_ia32_vfmsubaddpd256 ((__v4df)__A, (__v4df)__B, (__v4df)__C); 231 return (__m256d) __builtin_ia32_vfmaddsubpd256 ((__v4df)__A, (__v4df)__B, -(__v4df)__C);
232 } 232 }
233 233
234 #endif 234 #endif
235 235
236 #endif 236 #endif