mm3dnow.h revision 360660
138363Swpaul/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------===
238363Swpaul *
338363Swpaul * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
438363Swpaul * See https://llvm.org/LICENSE.txt for license information.
538363Swpaul * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
638363Swpaul *
738363Swpaul *===-----------------------------------------------------------------------===
838363Swpaul */
938363Swpaul
1038363Swpaul#ifndef _MM3DNOW_H_INCLUDED
1138363Swpaul#define _MM3DNOW_H_INCLUDED
1238363Swpaul
1338363Swpaul#include <mmintrin.h>
1438363Swpaul#include <prfchwintrin.h>
1538363Swpaul
1638363Swpaultypedef float __v2sf __attribute__((__vector_size__(8)));
1738363Swpaul
1838363Swpaul/* Define the default attributes for the functions in this file. */
1938363Swpaul#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"), __min_vector_width__(64)))
2038363Swpaul
2138363Swpaulstatic __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("3dnow")))
2238363Swpaul_m_femms(void) {
2338363Swpaul  __builtin_ia32_femms();
2438363Swpaul}
2538363Swpaul
2638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
2738363Swpaul_m_pavgusb(__m64 __m1, __m64 __m2) {
2838363Swpaul  return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2);
2938363Swpaul}
3038363Swpaul
3138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
3250477Speter_m_pf2id(__m64 __m) {
3338363Swpaul  return (__m64)__builtin_ia32_pf2id((__v2sf)__m);
3438363Swpaul}
3538363Swpaul
3638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
3738363Swpaul_m_pfacc(__m64 __m1, __m64 __m2) {
3838363Swpaul  return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2);
3938363Swpaul}
4038363Swpaul
4138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
4238363Swpaul_m_pfadd(__m64 __m1, __m64 __m2) {
4338363Swpaul  return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2);
4438363Swpaul}
4538363Swpaul
4638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
4738363Swpaul_m_pfcmpeq(__m64 __m1, __m64 __m2) {
4838363Swpaul  return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2);
4938363Swpaul}
5038363Swpaul
5138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
5238363Swpaul_m_pfcmpge(__m64 __m1, __m64 __m2) {
5338363Swpaul  return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2);
5438363Swpaul}
5538363Swpaul
5638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
5738363Swpaul_m_pfcmpgt(__m64 __m1, __m64 __m2) {
5838363Swpaul  return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2);
5938363Swpaul}
6038363Swpaul
6138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
6238363Swpaul_m_pfmax(__m64 __m1, __m64 __m2) {
6338363Swpaul  return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2);
6438363Swpaul}
6538363Swpaul
6638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
6738363Swpaul_m_pfmin(__m64 __m1, __m64 __m2) {
6838363Swpaul  return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2);
6938363Swpaul}
7038363Swpaul
7138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
7238363Swpaul_m_pfmul(__m64 __m1, __m64 __m2) {
7338363Swpaul  return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2);
7438363Swpaul}
7538363Swpaul
7638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
7738363Swpaul_m_pfrcp(__m64 __m) {
7838363Swpaul  return (__m64)__builtin_ia32_pfrcp((__v2sf)__m);
7938363Swpaul}
8038363Swpaul
8138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
8238363Swpaul_m_pfrcpit1(__m64 __m1, __m64 __m2) {
8338363Swpaul  return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2);
8438363Swpaul}
8538363Swpaul
8638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
8738363Swpaul_m_pfrcpit2(__m64 __m1, __m64 __m2) {
8838363Swpaul  return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2);
8938363Swpaul}
9038363Swpaul
9138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
9238363Swpaul_m_pfrsqrt(__m64 __m) {
9338363Swpaul  return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m);
9438363Swpaul}
9538363Swpaul
9638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
9738363Swpaul_m_pfrsqrtit1(__m64 __m1, __m64 __m2) {
9838363Swpaul  return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2);
9938363Swpaul}
10038363Swpaul
10138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
10238363Swpaul_m_pfsub(__m64 __m1, __m64 __m2) {
10338363Swpaul  return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2);
10438363Swpaul}
10538363Swpaul
10638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
10738363Swpaul_m_pfsubr(__m64 __m1, __m64 __m2) {
10838363Swpaul  return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2);
10938363Swpaul}
11038363Swpaul
11138363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
11238363Swpaul_m_pi2fd(__m64 __m) {
11338363Swpaul  return (__m64)__builtin_ia32_pi2fd((__v2si)__m);
11438363Swpaul}
11538363Swpaul
11638363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
11738363Swpaul_m_pmulhrw(__m64 __m1, __m64 __m2) {
11838363Swpaul  return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2);
11938363Swpaul}
12038363Swpaul
12138363Swpaul/* Handle the 3dnowa instructions here. */
12238363Swpaul#undef __DEFAULT_FN_ATTRS
12338363Swpaul#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa"), __min_vector_width__(64)))
12438363Swpaul
12538363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
12638363Swpaul_m_pf2iw(__m64 __m) {
12738363Swpaul  return (__m64)__builtin_ia32_pf2iw((__v2sf)__m);
12838363Swpaul}
12938363Swpaul
13038363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
13138363Swpaul_m_pfnacc(__m64 __m1, __m64 __m2) {
13238363Swpaul  return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2);
13338363Swpaul}
13438363Swpaul
13538363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
13638363Swpaul_m_pfpnacc(__m64 __m1, __m64 __m2) {
13738363Swpaul  return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2);
13838363Swpaul}
13938363Swpaul
14038363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
14138363Swpaul_m_pi2fw(__m64 __m) {
14238363Swpaul  return (__m64)__builtin_ia32_pi2fw((__v2si)__m);
14338363Swpaul}
14438363Swpaul
14538363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
14638363Swpaul_m_pswapdsf(__m64 __m) {
14738363Swpaul  return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m);
14838363Swpaul}
14938363Swpaul
15038363Swpaulstatic __inline__ __m64 __DEFAULT_FN_ATTRS
15138363Swpaul_m_pswapdsi(__m64 __m) {
15238363Swpaul  return (__m64)__builtin_ia32_pswapdsi((__v2si)__m);
15338363Swpaul}
15438363Swpaul
15538363Swpaul#undef __DEFAULT_FN_ATTRS
15638363Swpaul
15738363Swpaul#endif
15838363Swpaul