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