⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 altivec.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 2 页
字号:
#define vec_sr __builtin_vec_sr#define vec_sra __builtin_vec_sra#define vec_srl __builtin_vec_srl#define vec_sro __builtin_vec_sro#define vec_st __builtin_vec_st#define vec_ste __builtin_vec_ste#define vec_stl __builtin_vec_stl#define vec_stvebx __builtin_vec_stvebx#define vec_stvehx __builtin_vec_stvehx#define vec_stvewx __builtin_vec_stvewx#define vec_sub __builtin_vec_sub#define vec_subs __builtin_vec_subs#define vec_sum __builtin_vec_sum#define vec_unpackh __builtin_vec_unpackh#define vec_unpackl __builtin_vec_unpackl#define vec_vaddubm __builtin_vec_vaddubm#define vec_vaddubs __builtin_vec_vaddubs#define vec_vadduhm __builtin_vec_vadduhm#define vec_vadduhs __builtin_vec_vadduhs#define vec_vadduwm __builtin_vec_vadduwm#define vec_vadduws __builtin_vec_vadduws#define vec_vcmpequb __builtin_vec_vcmpequb#define vec_vcmpequh __builtin_vec_vcmpequh#define vec_vcmpequw __builtin_vec_vcmpequw#define vec_vmaxub __builtin_vec_vmaxub#define vec_vmaxuh __builtin_vec_vmaxuh#define vec_vmaxuw __builtin_vec_vmaxuw#define vec_vminub __builtin_vec_vminub#define vec_vminuh __builtin_vec_vminuh#define vec_vminuw __builtin_vec_vminuw#define vec_vmrghb __builtin_vec_vmrghb#define vec_vmrghh __builtin_vec_vmrghh#define vec_vmrghw __builtin_vec_vmrghw#define vec_vmrglb __builtin_vec_vmrglb#define vec_vmrglh __builtin_vec_vmrglh#define vec_vmrglw __builtin_vec_vmrglw#define vec_vpkuhum __builtin_vec_vpkuhum#define vec_vpkuwum __builtin_vec_vpkuwum#define vec_vrlb __builtin_vec_vrlb#define vec_vrlh __builtin_vec_vrlh#define vec_vrlw __builtin_vec_vrlw#define vec_vslb __builtin_vec_vslb#define vec_vslh __builtin_vec_vslh#define vec_vslw __builtin_vec_vslw#define vec_vspltb __builtin_vec_vspltb#define vec_vsplth __builtin_vec_vsplth#define vec_vspltw __builtin_vec_vspltw#define vec_vsrab __builtin_vec_vsrab#define vec_vsrah __builtin_vec_vsrah#define vec_vsraw __builtin_vec_vsraw#define vec_vsrb __builtin_vec_vsrb#define vec_vsrh __builtin_vec_vsrh#define vec_vsrw __builtin_vec_vsrw#define vec_vsububs __builtin_vec_vsububs#define vec_vsububm __builtin_vec_vsububm#define vec_vsubuhm __builtin_vec_vsubuhm#define vec_vsubuhs __builtin_vec_vsubuhs#define vec_vsubuwm __builtin_vec_vsubuwm#define vec_vsubuws __builtin_vec_vsubuws#define vec_xor __builtin_vec_xor/* Predicates.   For C++, we use templates in order to allow non-parenthesized arguments.   For C, instead, we use macros since non-parenthesized arguments were   not allowed even in older GCC implementation of AltiVec.   In the future, we may add more magic to the back-end, so that no   one- or two-argument macros are used.  */#ifdef __cplusplus__#define __altivec_unary_pred(NAME, CALL) \template <class T> int NAME (T a1) { return CALL; }#define __altivec_scalar_pred(NAME, CALL) \template <class T, class U> int NAME (T a1, U a2) { return CALL; }/* Given the vec_step of a type, return the corresponding bool type.  */template <int STEP> class __altivec_bool_ret { };template <> class __altivec_bool_ret <4> {  typedef __vector __bool int __ret;};template <> class __altivec_bool_ret <8> {  typedef __vector __bool short __ret;};template <> class __altivec_bool_ret <16> {  typedef __vector __bool char __ret;};/* Be very liberal in the pairs we accept.  Mistakes such as passing   a `vector char' and `vector short' will be caught by the middle-end,   while any attempt to detect them here would produce hard to understand   error messages involving the implementation details of AltiVec.  */#define __altivec_binary_pred(NAME, CALL) \template <class T, class U> \typename __altivec_bool_ret <vec_step (T)>::__ret \NAME (T a1, U a2) \{ \  return CALL; \}__altivec_binary_pred(vec_cmplt,  __builtin_vec_cmpgt (a2, a1))__altivec_binary_pred(vec_cmple,  __builtin_altivec_cmpge (a2, a1))__altivec_scalar_pred(vec_all_in,  __builtin_altivec_vcmpbfp_p (__CR6_EQ, a1, a2))__altivec_scalar_pred(vec_any_out,  __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2))__altivec_unary_pred(vec_all_nan,  __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1))__altivec_unary_pred(vec_any_nan,  __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1))__altivec_unary_pred(vec_all_numeric,  __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a1))__altivec_unary_pred(vec_any_numeric,  __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a1))__altivec_scalar_pred(vec_all_eq,  __builtin_vec_vcmpeq_p (__CR6_LT, a1, a2))__altivec_scalar_pred(vec_all_ne,  __builtin_vec_vcmpeq_p (__CR6_EQ, a1, a2))__altivec_scalar_pred(vec_any_eq,  __builtin_vec_vcmpeq_p (__CR6_EQ_REV, a1, a2))__altivec_scalar_pred(vec_any_ne,  __builtin_vec_vcmpeq_p (__CR6_LT_REV, a1, a2))__altivec_scalar_pred(vec_all_gt,  __builtin_vec_vcmpgt_p (__CR6_LT, a1, a2))__altivec_scalar_pred(vec_all_lt,  __builtin_vec_vcmpgt_p (__CR6_LT, a2, a1))__altivec_scalar_pred(vec_any_gt,  __builtin_vec_vcmpgt_p (__CR6_EQ_REV, a1, a2))__altivec_scalar_pred(vec_any_lt,  __builtin_vec_vcmpgt_p (__CR6_EQ_REV, a2, a1))__altivec_scalar_pred(vec_all_ngt,  __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a1, a2))__altivec_scalar_pred(vec_all_nlt,  __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a2, a1))__altivec_scalar_pred(vec_any_ngt,  __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a1, a2))__altivec_scalar_pred(vec_any_nlt,  __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a2, a1))/* __builtin_vec_vcmpge_p is vcmpgefp for floating-point vector types,   while for integer types it is converted to __builtin_vec_vcmpgt_p,   with inverted args and condition code.  */__altivec_scalar_pred(vec_all_le,  __builtin_vec_vcmpge_p (__CR6_LT, a2, a1))__altivec_scalar_pred(vec_all_ge,  __builtin_vec_vcmpge_p (__CR6_LT, a1, a2))__altivec_scalar_pred(vec_any_le,  __builtin_vec_vcmpge_p (__CR6_EQ_REV, a2, a1))__altivec_scalar_pred(vec_any_ge,  __builtin_vec_vcmpge_p (__CR6_EQ_REV, a1, a2))__altivec_scalar_pred(vec_all_nge,  __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2))__altivec_scalar_pred(vec_all_nle,  __builtin_altivec_vcmpgefp_p (__CR6_EQ, a2, a1))__altivec_scalar_pred(vec_any_nge,  __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a1, a2))__altivec_scalar_pred(vec_any_nle,  __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1))#undef __altivec_scalar_pred#undef __altivec_unary_pred#undef __altivec_binary_pred#else#define vec_cmplt(a1, a2) __builtin_vec_cmpgt ((a2), (a1))#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a2), (a1))#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2))#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2))#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (a1), (a1))#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1))#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1))#define vec_all_eq(a1, a2) __builtin_vec_vcmpeq_p (__CR6_LT, (a1), (a2))#define vec_all_ne(a1, a2) __builtin_vec_vcmpeq_p (__CR6_EQ, (a1), (a2))#define vec_any_eq(a1, a2) __builtin_vec_vcmpeq_p (__CR6_EQ_REV, (a1), (a2))#define vec_any_ne(a1, a2) __builtin_vec_vcmpeq_p (__CR6_LT_REV, (a1), (a2))#define vec_all_gt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_LT, (a1), (a2))#define vec_all_lt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_LT, (a2), (a1))#define vec_any_gt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_EQ_REV, (a1), (a2))#define vec_any_lt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_EQ_REV, (a2), (a1))#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2))#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1))#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2))#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1))/* __builtin_vec_vcmpge_p is vcmpgefp for floating-point vector types,   while for integer types it is converted to __builtin_vec_vcmpgt_p,   with inverted args and condition code.  */#define vec_all_le(a1, a2) __builtin_vec_vcmpge_p (__CR6_LT, (a2), (a1))#define vec_all_ge(a1, a2) __builtin_vec_vcmpge_p (__CR6_LT, (a1), (a2))#define vec_any_le(a1, a2) __builtin_vec_vcmpge_p (__CR6_EQ_REV, (a2), (a1))#define vec_any_ge(a1, a2) __builtin_vec_vcmpge_p (__CR6_EQ_REV, (a1), (a2))#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2))#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1))#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2))#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1))#endif/* These do not accept vectors, so they do not have a __builtin_vec_*   counterpart.  */#define vec_dss(x) __builtin_altivec_dss((x))#define vec_dssall() __builtin_altivec_dssall ()#define vec_mfvscr() ((__vector unsigned short) __builtin_altivec_mfvscr ())#define vec_splat_s8(x) __builtin_altivec_vspltisb ((x))#define vec_splat_s16(x) __builtin_altivec_vspltish ((x))#define vec_splat_s32(x) __builtin_altivec_vspltisw ((x))#define vec_splat_u8(x) ((__vector unsigned char) vec_splat_s8 ((x)))#define vec_splat_u16(x) ((__vector unsigned short) vec_splat_s16 ((x)))#define vec_splat_u32(x) ((__vector unsigned int) vec_splat_s32 ((x)))/* This also accepts a type for its parameter, so it is not enough   to #define vec_step to __builtin_vec_step.  */#define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)#endif /* _ALTIVEC_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -