Mercurial > hg > CbC > CbC_gcc
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 |