POWER Vector Library Manual
1.0.4
|
Go to the documentation of this file.
3638 #ifndef VEC_F128_PPC_H_
3639 #define VEC_F128_PPC_H_
3743 #if defined (_ARCH_PWR8)
3751 signmask = vec_sl (q_ones, q_ones);
3752 signmask = vec_sld (q_zero, signmask, 1);
3776 signmask = vec_sl (q_ones, q_ones);
3777 return vec_sld (q_zero, signmask, 1);
3811 expmask = (
vui32_t) vec_splat_u8 (-8);
3812 expmask = vec_sld (q_zero, expmask, 4);
3813 return (
vui64_t) vec_packpx (expmask, expmask);
3835 expmask = (
vui32_t) vec_splat_u8 (-8);
3836 expmask = vec_sld (expmask, q_zero, 12);
3837 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
3838 return (
vui32_t) vec_packpx (q_zero, expmask);
3840 return (
vui32_t) vec_packpx (expmask, q_zero);
3883 return vec_sld (q_zero, q_ones, 14);
3905 signmask = vec_sl (q_ones, q_ones);
3906 return vec_sld (signmask, q_zero, 12);
3926 vui32_t carry = vec_splat_u32 (2);
3927 return vec_sld (carry, q_zero, 14);
3947 vui32_t hidden = vec_splat_u32 (1);
3948 return vec_sld (hidden, q_zero, 14);
3970 QNaNbit = vec_sl (q_ones, q_ones);
3971 return vec_sld (QNaNbit, q_zero, 10);
3994 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
3995 && !defined (_ARCH_PWR9)
4000 "xxsel %x0,%x1,%x2,%x3"
4002 :
"wa" (vfa),
"wa" (vfb),
"wa" (mask)
4008 :
"v" (vfa),
"v" (vfb),
"v" (mask)
4043 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4044 && !defined (_ARCH_PWR9)
4048 "xxland %x0,%x1,%x2"
4050 :
"wa" (f128),
"wa" (mask)
4056 :
"v" (f128),
"v" (mask)
4064 result = (vec_and (vunion.
vx4, mask));
4088 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4089 && !defined (_ARCH_PWR9)
4093 "xxlandc %x0,%x1,%x2"
4095 :
"wa" (f128),
"wa" (mask)
4101 :
"v" (f128),
"v" (mask)
4109 result = (vec_andc (vunion.
vx4, mask));
4133 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4134 && !defined (_ARCH_PWR9)
4140 :
"wa" (f128),
"wa" (mask)
4146 :
"v" (f128),
"v" (mask)
4154 result = (vec_or (vunion.
vx4, mask));
4178 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4179 && !defined (_ARCH_PWR9)
4183 "xxlxor %x0,%x1,%x2"
4185 :
"wa" (f128),
"wa" (mask)
4191 :
"v" (f128),
"v" (mask)
4199 result = (vec_xor (vunion.
vx4, mask));
4223 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4224 && !defined (_ARCH_PWR9)
4228 "xxlandc %x0,%x1,%x2"
4230 :
"wa" (f128),
"wa" (mask)
4236 :
"v" (f128),
"v" (mask)
4266 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4267 && !defined (_ARCH_PWR9)
4287 result = (vunion.
vx16);
4312 return (vunion.
vx8);
4332 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4333 && !defined (_ARCH_PWR9)
4353 result = (vunion.
vx4);
4377 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4378 && !defined (_ARCH_PWR9) && defined (__VSX__)
4381 "xxmrghd %x0,%x1,%x2"
4383 :
"wa" (vfa),
"wa" (vfb)
4415 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4416 && !defined (_ARCH_PWR9) && defined (__VSX__)
4419 "xxmrgld %x0,%x1,%x2"
4421 :
"wa" (vfa),
"wa" (vfb)
4451 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4452 && !defined (_ARCH_PWR9)
4472 result = (vunion.
vx2);
4494 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && (__GNUC__ > 7) \
4495 && !defined (_ARCH_PWR9)
4515 result = (vunion.
vx1);
4540 return (vunion.
vf1);
4563 return (vunion.
vf1);
4586 return (vunion.
vf1);
4609 return (vunion.
vf1);
4632 return (vunion.
vf1);
4693 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
4694 return !scalar_test_data_class (f128, 0x70);
4700 return !vec_all_eq(tmp, expmask);
4725 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
4726 return scalar_test_data_class (f128, 0x30);
4739 return vec_all_eq(tmp, expmask);
4765 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
4766 return scalar_test_data_class (f128, 0x40);
4767 #elif defined (_ARCH_PWR8)
4781 return (vec_all_eq (tmp2, expmask) && vec_any_gt(tmp, expmask));
4809 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
4810 return !scalar_test_data_class (f128, 0x7f);
4817 return !(vec_all_eq (tmp, expmask) || vec_all_eq(tmp, vec_zero));
4843 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
4844 return scalar_test_data_class (f128, 0x03);
4908 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
4909 return scalar_test_data_class (f128, 0x0c);
4918 return vec_all_eq(tmp2, vec_zero);
4955 "xscpsgnqp %0,%1,%2;\n"
4957 :
"v" (f128x),
"v" (f128y)
4965 tmp = vec_sel (tmpy, tmpx, signmask);
5054 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5056 "xscmpeqqp %0,%1,%2;\n"
5058 :
"v" (vfa),
"v" (vfb)
5060 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5061 result= (
vb128_t) vec_splat_u32 (0);
5063 result= (
vb128_t) vec_splat_s32 (-1);
5064 #else // defined( _ARCH_PWR8 )
5109 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5111 "xscmpeqqp %0,%1,%2;\n"
5113 :
"v" (vfa),
"v" (vfb)
5115 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5116 result = (
vb128_t) vec_splat_u32 (0);
5118 result = (
vb128_t) vec_splat_s32 (-1);
5119 #else // defined( _ARCH_PWR8 )
5127 or_ab = (
vb128_t) vec_or ( vra, vrb );
5172 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5174 "xscmpeqqp %0,%1,%2;\n"
5176 :
"v" (vfa),
"v" (vfb)
5178 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5179 result = (
vb128_t) vec_splat_u32 (0);
5181 result = (
vb128_t) vec_splat_s32 (-1);
5182 #else // defined( _ARCH_PWR8 )
5192 or_ab = (
vb128_t) vec_or ( vra, vrb );
5238 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5240 "xscmpgeqp %0,%1,%2;\n"
5242 :
"v" (vfa),
"v" (vfb)
5244 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5245 result= (
vb128_t) vec_splat_u32 (0);
5247 result= (
vb128_t) vec_splat_s32 (-1);
5248 #else // defined( _ARCH_PWR8 )
5252 const vui8_t shift = vec_splat_u8 (7);
5260 signbool = (
vb128_t) vec_sra (splatvfa, shift);
5307 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5309 "xscmpgeqp %0,%1,%2;\n"
5311 :
"v" (vfa),
"v" (vfb)
5313 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5314 result = (
vb128_t) vec_splat_u32 (0);
5316 result = (
vb128_t) vec_splat_s32 (-1);
5317 #else // defined( _ARCH_PWR8 )
5381 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5383 "xscmpgeqp %0,%1,%2;\n"
5385 :
"v" (vfa),
"v" (vfb)
5387 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5388 result= (
vb128_t) vec_splat_u32 (0);
5390 result= (
vb128_t) vec_splat_s32 (-1);
5391 #else // defined( _ARCH_PWR8 )
5458 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5460 "xscmpgtqp %0,%1,%2;\n"
5462 :
"v" (vfa),
"v" (vfb)
5464 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5465 result= (
vb128_t) vec_splat_u32 (0);
5467 result= (
vb128_t) vec_splat_s32 (-1);
5468 #else // defined( _ARCH_PWR8 )
5472 const vui8_t shift = vec_splat_u8 (7);
5480 signbool = (
vb128_t) vec_sra (splatvfa, shift);
5527 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5529 "xscmpgtqp %0,%1,%2;\n"
5531 :
"v" (vfa),
"v" (vfb)
5533 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5534 result = (
vb128_t) vec_splat_u32 (0);
5536 result = (
vb128_t) vec_splat_s32 (-1);
5537 #else // defined( _ARCH_PWR8 )
5601 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5603 "xscmpgtqp %0,%1,%2;\n"
5605 :
"v" (vfa),
"v" (vfb)
5607 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5608 result= (
vb128_t) vec_splat_u32 (0);
5610 result= (
vb128_t) vec_splat_s32 (-1);
5611 #else // defined( _ARCH_PWR8 )
5678 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5680 "xscmpgeqp %0,%2,%1;\n"
5682 :
"v" (vfa),
"v" (vfb)
5684 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5685 result= (
vb128_t) vec_splat_u32 (0);
5687 result= (
vb128_t) vec_splat_s32 (-1);
5688 #else // defined( _ARCH_PWR8 )
5692 const vui8_t shift = vec_splat_u8 (7);
5700 signbool = (
vb128_t) vec_sra (splatvfa, shift);
5747 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5749 "xscmpgeqp %0,%2,%1;\n"
5751 :
"v" (vfa),
"v" (vfb)
5753 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5754 result = (
vb128_t) vec_splat_u32 (0);
5756 result = (
vb128_t) vec_splat_s32 (-1);
5757 #else // defined( _ARCH_PWR8 )
5821 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5823 "xscmpgeqp %0,%2,%1;\n"
5825 :
"v" (vfa),
"v" (vfb)
5827 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5828 result= (
vb128_t) vec_splat_u32 (0);
5830 result= (
vb128_t) vec_splat_s32 (-1);
5831 #else // defined( _ARCH_PWR8 )
5898 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5900 "xscmpgtqp %0,%2,%1;\n"
5902 :
"v" (vfa),
"v" (vfb)
5904 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5905 result= (
vb128_t) vec_splat_u32 (0);
5907 result= (
vb128_t) vec_splat_s32 (-1);
5908 #else // defined( _ARCH_PWR8 )
5912 const vui8_t shift = vec_splat_u8 (7);
5920 signbool = (
vb128_t) vec_sra (splatvfa, shift);
5967 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
5969 "xscmpgtqp %0,%2,%1;\n"
5971 :
"v" (vfa),
"v" (vfb)
5973 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
5974 result = (
vb128_t) vec_splat_u32 (0);
5976 result = (
vb128_t) vec_splat_s32 (-1);
5977 #else // defined( _ARCH_PWR8 )
6041 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
6043 "xscmpgtqp %0,%2,%1;\n"
6045 :
"v" (vfa),
"v" (vfb)
6047 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6048 result= (
vb128_t) vec_splat_u32 (0);
6050 result= (
vb128_t) vec_splat_s32 (-1);
6051 #else // defined( _ARCH_PWR8 )
6116 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
6118 "xscmpeqqp %0,%1,%2;\n"
6120 :
"v" (vfa),
"v" (vfb)
6123 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6124 result= (
vb128_t) vec_splat_u32 (0);
6126 result= (
vb128_t) vec_splat_s32 (-1);
6127 #else // defined( _ARCH_PWR8 )
6172 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
6174 "xscmpeqqp %0,%1,%2;\n"
6176 :
"v" (vfa),
"v" (vfb)
6179 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6180 result = (
vb128_t) vec_splat_u32 (0);
6182 result = (
vb128_t) vec_splat_s32 (-1);
6183 #else // defined( _ARCH_PWR8 )
6191 or_ab = (
vb128_t) vec_or ( vra, vrb );
6236 #if defined (_ARCH_PWR10) && defined (__FLOAT128__) && (__GNUC__ >= 10)
6238 "xscmpeqqp %0,%1,%2;\n"
6240 :
"v" (vfa),
"v" (vfb)
6243 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6244 result = (
vb128_t) vec_splat_u32 (0);
6246 result = (
vb128_t) vec_splat_s32 (-1);
6247 #else // defined( _ARCH_PWR8 )
6258 or_ab = (
vb128_t) vec_or ( vra, vrb );
6300 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6301 result= (vfa == vfb);
6302 #else // defined( _ARCH_PWR8 )
6345 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6346 result = (vfa == vfb);
6347 #else // defined( _ARCH_PWR8 )
6355 or_ab = (
vb128_t) vec_or ( vra, vrb );
6397 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6398 result = (vfa == vfb);
6399 #else // defined( _ARCH_PWR8 )
6407 or_ab = (
vb128_t) vec_or ( vra, vrb );
6450 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6451 result = (vfa >= vfb);
6452 #else // defined( _ARCH_PWR8 )
6456 const vui8_t shift = vec_splat_u8 (7);
6466 signbool = (
vb128_t) vec_sra (splatvfa, shift);
6471 result = vec_all_ne (togt, zeros);
6512 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6513 result = (vfa >= vfb);
6514 #else // defined( _ARCH_PWR8 )
6576 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6577 result = (vfa >= vfb);
6578 #else // defined( _ARCH_PWR8 )
6640 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6641 result = (vfa > vfb);
6642 #else // defined( _ARCH_PWR8 )
6646 const vui8_t shift = vec_splat_u8 (7);
6656 signbool = (
vb128_t) vec_sra (splatvfa, shift);
6661 result = vec_all_ne (togt, zeros);
6702 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6703 result = (vfa > vfb);
6704 #else // defined( _ARCH_PWR8 )
6766 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6767 result = (vfa > vfb);
6768 #else // defined( _ARCH_PWR8 )
6829 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6830 result = (vfa <= vfb);
6831 #else // defined( _ARCH_PWR8 )
6835 const vui8_t shift = vec_splat_u8 (7);
6845 signbool = (
vb128_t) vec_sra (splatvfa, shift);
6850 result = vec_all_ne (tolt, zeros);
6891 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6892 result = (vfa <= vfb);
6893 #else // defined( _ARCH_PWR8 )
6955 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
6956 result = (vfa <= vfb);
6957 #else // defined( _ARCH_PWR8 )
7019 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
7020 result = (vfa < vfb);
7021 #else // defined( _ARCH_PWR8 )
7025 const vui8_t shift = vec_splat_u8 (7);
7035 signbool = (
vb128_t) vec_sra (splatvfa, shift);
7040 result = vec_all_ne (tolt, zeros);
7081 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
7082 result = (vfa < vfb);
7083 #else // defined( _ARCH_PWR8 )
7145 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
7146 result = (vfa < vfb);
7147 #else // defined( _ARCH_PWR8 )
7207 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
7208 result= (vfa != vfb);
7209 #else // defined( _ARCH_PWR8 )
7252 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
7253 result = (vfa != vfb);
7254 #else // defined( _ARCH_PWR8 )
7262 or_ab = (
vb128_t) vec_or ( vra, vrb );
7304 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
7305 result = (vfa != vfb);
7306 #else // defined( _ARCH_PWR8 )
7314 or_ab = (
vb128_t) vec_or ( vra, vrb );
7355 #if defined (_ARCH_PWR9) && defined (scalar_cmp_exp_gt) \
7356 && defined (__FLOAT128__) && (__GNUC__ >= 9)
7357 return scalar_cmp_exp_eq (vfa, vfb);
7402 #if defined (_ARCH_PWR9) && defined (scalar_cmp_exp_gt) \
7403 && defined (__FLOAT128__) && (__GNUC__ >= 9)
7404 return scalar_cmp_exp_gt (vfa, vfb);
7449 #if defined (_ARCH_PWR9) && defined (scalar_cmp_exp_gt) \
7450 && defined (__FLOAT128__) && (__GNUC__ >= 9)
7451 return scalar_cmp_exp_lt (vfa, vfb);
7496 #if defined (_ARCH_PWR9) && defined (scalar_cmp_exp_gt) \
7497 && defined (__FLOAT128__) && (__GNUC__ >= 9)
7498 return scalar_cmp_exp_unordered (vfa, vfb);
7533 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7536 if (scalar_test_data_class (f128, 0x70))
7546 tmp2 = (
vb128_t) vec_cmpeq (tmp, expmask);
7579 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7580 if (scalar_test_data_class (f128, 0x20))
7582 else if (scalar_test_data_class (f128, 0x10))
7594 if (vec_all_eq(tmp, expmask))
7596 if (vec_any_gt(t128, expmask))
7628 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7631 if (scalar_test_data_class (f128, 0x30))
7668 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7671 if (scalar_test_data_class (f128, 0x40))
7707 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7710 if (scalar_test_data_class (f128, 0x7f))
7721 result = (
vb128_t) vec_nor (vec_cmpeq (tmp, expmask),
7722 vec_cmpeq (tmp, vec_zero));
7749 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7752 if (scalar_test_data_class (f128, 0x03))
7767 return (
vb128_t) vec_andc (tmp2, tmpz);
7821 #if defined (_ARCH_PWR9) && defined (scalar_test_data_class) && defined (__FLOAT128__) && (__GNUC__ > 7)
7824 if (scalar_test_data_class (f128, 0x0c))
7889 #if defined (_ARCH_PWR9) && (__GNUC__ > 6)
7890 #if defined (__FLOAT128__) && (__GNUC__ > 7)
7956 #if defined (_ARCH_PWR10) && (__GNUC__ >= 10)
7962 #elif defined (_ARCH_PWR9) && defined (scalar_test_neg) && (__GNUC__ > 7)
7963 result = (
vb128_t) {(__int128) 0};
7965 if (scalar_test_neg (f128))
7966 result = (
vb128_t) {(__int128)-1};
7970 const vui8_t shift = vec_splat_u8 (7);
7974 result = (
vb128_t) vec_sra (splat, shift);
7998 #if defined (_ARCH_PWR9) && defined (scalar_test_neg) && (__GNUC__ > 7)
7999 return scalar_test_neg (f128);
8005 return vec_all_eq(tmp, signmask);
8038 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
8039 #if defined (__FLOAT128__) && (__GNUC__ > 8)
8041 result = __builtin_addf128_round_to_odd (vfa, vfb);
8047 :
"v" (vfa),
"v" (vfb)
8051 #else // defined (_ARCH_PWR7)
8052 vui64_t q_exp, a_exp, b_exp, x_exp;
8053 vui128_t q_sig, a_sig, b_sig, p_tmp, p_odd;
8055 vui32_t q_sign, a_sign, b_sign;
8075 const vui8_t t_sig_L = vec_splat_u8 (7);
8076 const vui8_t t_sig_C = vec_splat_u8 (15);
8077 const vui64_t exp_one = exp_min;
8084 vui32_t a_norm, b_norm, x_norm;
8090 a_s32 = vec_and ((
vui32_t) a_mag, sigmask);
8091 b_s32 = vec_and ((
vui32_t) b_mag, sigmask);
8095 a_norm = vec_splat (x_norm,
VEC_WE_1);
8096 b_norm = vec_splat (x_norm,
VEC_WE_3);
8098 a_sig = (
vui128_t) vec_sel (a_s32, a_norm, hidden);
8099 b_sig = (
vui128_t) vec_sel (b_s32, b_norm, hidden);
8105 q_sign = vec_xor (a_sign, b_sign);
8124 q_sign = vec_sel (a_sign, b_sign, (
vui32_t) a_lt_b);
8155 x_bits =
vec_seluq (b_sig, x_bits, exp_mask);
8168 q_sign = vec_sel (a_sign, (
vui32_t) q_zero, diff_sign);
8173 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
8179 if (vec_all_gt (t_sig, t_sig_C))
8187 if (vec_all_le (t_sig, t_sig_L))
8208 q_exp =
vec_selud (exp_dnrm, q_exp, exp_mask);
8306 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
8307 #if defined (__FLOAT128__) && (__GNUC__ > 8)
8309 result = __builtin_subf128_round_to_odd (vfa, vfb);
8315 :
"v" (vfa),
"v" (vfb)
8319 #else // defined (_ARCH_PWR7)
8320 vui64_t q_exp, a_exp, b_exp, x_exp;
8321 vui128_t q_sig, a_sig, b_sig, p_tmp, p_odd;
8323 vui32_t q_sign, a_sign, b_sign;
8343 const vui8_t t_sig_L = vec_splat_u8 (7);
8344 const vui8_t t_sig_C = vec_splat_u8 (15);
8345 const vui64_t exp_one = exp_min;
8348 const vui32_t signmask = vec_nor(magmask, magmask);
8354 vui32_t a_norm, b_norm, x_norm;
8360 a_s32 = vec_and ((
vui32_t) a_mag, sigmask);
8361 b_s32 = vec_and ((
vui32_t) b_mag, sigmask);
8365 a_norm = vec_splat (x_norm,
VEC_WE_1);
8366 b_norm = vec_splat (x_norm,
VEC_WE_3);
8368 a_sig = (
vui128_t) vec_sel (a_s32, a_norm, hidden);
8369 b_sig = (
vui128_t) vec_sel (b_s32, b_norm, hidden);
8375 b_sign = vec_xor (signmask, b_sign);
8377 q_sign = vec_xor (a_sign, b_sign);
8396 q_sign = vec_sel (a_sign, b_sign, (
vui32_t) a_lt_b);
8427 x_bits =
vec_seluq (b_sig, x_bits, exp_mask);
8440 q_sign = vec_sel (a_sign, (
vui32_t) q_zero, diff_sign);
8445 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
8451 if (vec_all_gt (t_sig, t_sig_C))
8459 if (vec_all_le (t_sig, t_sig_L))
8480 q_exp =
vec_selud (exp_dnrm, q_exp, exp_mask);
8575 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
8576 #if defined (__FLOAT128__) && (__GNUC__ > 9)
8587 #elif defined (_ARCH_PWR8)
8601 q_sign = vec_and ((
vui32_t) f64, signmask);
8678 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
8679 #if defined (__FLOAT128__) && (__GNUC__ > 9)
8682 result = (
vf64_t) { 0.0, 0.0 };
8683 result [
VEC_DW_H] = __builtin_truncf128_round_to_odd (f128);
8692 #else // defined (_ARCH_PWR8)
8810 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
8817 vui64_t q_exp, q_delta, x_exp;
8820 const vui64_t q_zero = { 0, 0 };
8821 const vui64_t q_ones = { -1, -1 };
8894 #if defined (_ARCH_PWR10) && (__GNUC__ >= 10)
8901 vui64_t q_exp, q_delta, x_exp;
8977 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
8978 #if defined (__FLOAT128__) && (__GNUC__ > 9)
8989 #elif defined (_ARCH_PWR8)
8990 vui64_t d_sig, q_exp, d_sign, d_neg;
9011 q_sign = vec_and ((
vui32_t) int64, signmask);
9057 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
9058 #if defined (__FLOAT128__) && (__GNUC__ > 9)
9069 #elif defined (_ARCH_PWR8)
9133 #if defined (_ARCH_PWR10) && (__GNUC__ >= 10)
9139 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
9148 q_sign = vec_and ((
vui32_t) int128, signmask);
9159 result = (hi64 * two64) + lo64;
9162 #elif defined (_ARCH_PWR8)
9180 q_sign = vec_and ((
vui32_t) int128, signmask);
9213 q_odd = vec_and (q_odd, lowmask);
9222 q_sigc =
vec_sldqi (q_carry, q_sig, 112);
9274 #if defined (_ARCH_PWR10) && (__GNUC__ >= 10)
9280 #elif defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
9286 result = (hi64 * two64) + lo64;
9287 #elif defined (_ARCH_PWR8)
9329 q_odd = vec_and (q_odd, lowmask);
9338 q_sigc =
vec_sldqi (q_carry, q_sig, 112);
9383 #if defined (_ARCH_PWR9) && (__GNUC__ > 7)
9384 #if defined (__FLOAT128__) && (__GNUC__ > 8)
9386 result = __builtin_mulf128_round_to_odd (vfa, vfb);
9392 :
"v" (vfa),
"v" (vfb)
9396 #else //_ARCH_PWR8 or _ARCH_PWR7
9397 vui64_t q_exp, a_exp, b_exp, x_exp;
9398 vui128_t q_sig, a_sig, b_sig, p_sig_h, p_sig_l, p_odd;
9399 vui32_t q_sign, a_sign, b_sign;
9414 q_sign = vec_xor (a_sign, b_sign);
9420 vui64_t exp_min, exp_one, exp_bias;
9428 vui16_t a_e16, b_e16, x_hidden;
9432 x_hidden = vec_splat_u16(1);
9443 a_norm = vec_cmpgt (a_e16, (
vui16_t) q_zero);
9444 b_norm = vec_cmpgt (b_e16, (
vui16_t) q_zero);
9462 p_sig_l =
vec_muludq (&p_sig_h, a_sig, b_sig);
9465 if (__builtin_expect (
9494 vui16_t sig_l_mask = vec_splat_u16(1);
9496 carry_mask = (
vb128_t) vec_cmpgt (t_sig, sig_l_mask);
9498 p_tmp =
vec_sldqi (p_sig_h, p_sig_l, 120);
9504 p_sig_h =
vec_seluq (p_sig_h, sig_h, carry_mask);
9505 p_sig_l =
vec_seluq (p_sig_l, sig_l, carry_mask);
9517 if (__builtin_expect (
9556 tmp = vec_and ((
vui32_t) p_sig_l, xmask);
9574 if (__builtin_expect ((vec_all_eq(t_sig, (
vui16_t ) q_zero)), 0))
9601 q_exp =
vec_selud (exp_dnrm, q_exp, exp_mask);
9631 tmp = vec_sld ((
vui32_t) q_exp, q_zero, 14);
9632 t128 = vec_sel ((
vui32_t) q_sig, tmp, expmask);
9719 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
9723 :
"v" (sig),
"v" (exp)
9731 t128 = vec_sel ((
vui32_t) sig, tmp, expmask);
9768 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
9780 result = (
vui64_t) vec_sld (tmp, tmp, 10);
9817 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
9840 normal = (
vui32_t) vec_nor (vec_cmpeq (tmp, expmask),
9841 vec_cmpeq (tmp, zero));
9843 result = (
vui128_t) vec_sel (t128, normal, hidden);
9874 #if defined (_ARCH_PWR9) && defined (__FLOAT128__) && (__GNUC__ > 7)
9879 :
"=v" (exp_a),
"=v" (exp_b)
9880 :
"v" (vfa),
"v" (vfb)
9888 rtmp = vec_sld (tmp, tmp, 10);
9889 result = (
vui64_t) vec_and (rtmp, exp_mask);
static vb128_t vec_cmpltuq(vui128_t vra, vui128_t vrb)
Vector Compare Less Than Unsigned Quadword.
Definition: vec_int128_ppc.h:3406
static __binary128 vec_absf128(__binary128 f128)
Absolute Quad-Precision.
Definition: vec_f128_ppc.h:4650
static int vec_cmpqp_all_uzgt(__binary128 vfa, __binary128 vfb)
Vector Compare all Greater Than (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6699
static vb128_t vec_isinff128(__binary128 f128)
Return a 128-bit vector boolean true if the __float128 value is infinity.
Definition: vec_f128_ppc.h:7626
static int vec_cmpqp_exp_lt(__binary128 vfa, __binary128 vfb)
Vector Compare Exponents Quad-Precision for Less Than.
Definition: vec_f128_ppc.h:7447
#define VEC_W_H
Element index for highest order word.
Definition: vec_common_ppc.h:326
static vb128_t vec_cmplesq(vi128_t vra, vi128_t vrb)
Vector Compare Less Than or Equal Signed Quadword.
Definition: vec_int128_ppc.h:3267
static int vec_cmpud_all_le(vui64_t a, vui64_t b)
Vector Compare all Less than equal Unsigned Doubleword.
Definition: vec_int64_ppc.h:2287
static int vec_cmpqp_all_uzne(__binary128 vfa, __binary128 vfb)
Vector Compare all Not-Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:7249
static vb128_t vec_cmpgtuq(vui128_t vra, vui128_t vrb)
Vector Compare Greater Than Unsigned Quadword.
Definition: vec_int128_ppc.h:3227
static __binary128 vec_xfer_vui32t_2_bin128(vui32_t f128)
Transfer a vector unsigned int to __binary128 scalar.
Definition: vec_f128_ppc.h:4580
static vui128_t vec_subuqm(vui128_t vra, vui128_t vrb)
Vector Subtract Unsigned Quadword Modulo.
Definition: vec_int128_ppc.h:7439
static vi128_t vec_negsq(vi128_t int128)
Vector Negate Signed Quadword.
Definition: vec_int128_ppc.h:6234
static int vec_cmpuq_all_lt(vui128_t vra, vui128_t vrb)
Vector Compare any Less Than Unsigned Quadword.
Definition: vec_int128_ppc.h:3980
static int vec_cmpqp_all_gt(__binary128 vfa, __binary128 vfb)
Vector Compare all Greater Than (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6763
static vb128_t vec_issubnormalf128(__binary128 f128)
Return 128-bit vector boolean true value, if the __float128 value is subnormal (denormal).
Definition: vec_f128_ppc.h:7747
__vector __bool int vb32_t
vector of 32-bit bool int elements.
Definition: vec_common_ppc.h:228
static vui32_t vec_mask128_f128Qbit(void)
Generate Quadword QNaN-bit mask Immediate.
Definition: vec_f128_ppc.h:3964
static vui64_t vec_xvxexpdp(vf64_t vrb)
Vector Extract Exponent Double-Precision.
Definition: vec_f64_ppc.h:1713
static vb128_t vec_cmpgtsq(vi128_t vra, vi128_t vrb)
Vector Compare Greater Than Signed Quadword.
Definition: vec_int128_ppc.h:3178
#define VEC_BYTE_H
Element index for highest order byte.
Definition: vec_common_ppc.h:350
static __binary128 vec_xfer_vui64t_2_bin128(vui64_t f128)
Transfer a vector unsigned long long to __binary128 scalar.
Definition: vec_f128_ppc.h:4603
__vector __bool __int128 vb128_t
vector of one 128-bit bool __int128 element.
Definition: vec_common_ppc.h:240
static vui128_t vec_sldq(vui128_t vrw, vui128_t vrx, vui128_t vrb)
Vector Shift Left Double Quadword.
Definition: vec_int128_ppc.h:6613
static vui64_t vec_xfer_bin128_2_vui64t(__binary128 f128)
Transfer function from a __binary128 scalar to a vector long long int.
Definition: vec_f128_ppc.h:4448
static vb128_t vec_cmpeqtoqp(__binary128 vfa, __binary128 vfb)
Vector Compare Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:5051
static vb128_t vec_iszerof128(__binary128 f128)
Return 128-bit vector boolean true value, if the value that is +-0.0.
Definition: vec_f128_ppc.h:7819
static vb128_t vec_cmpneuq(vui128_t vra, vui128_t vrb)
Vector Compare Not Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3475
static __binary128 vec_xscvuqqp(vui128_t int128)
VSX Scalar Convert Unsigned-Quadword to Quad-Precision format.
Definition: vec_f128_ppc.h:9271
static int vec_cmpqp_all_uzeq(__binary128 vfa, __binary128 vfb)
Vector Compare all Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6342
static vui32_t vec_mask128_f128sign(void)
Generate Quadword Quad-Precision Sign-bit mask.
Definition: vec_f128_ppc.h:3899
static vb128_t vec_cmpgeuqp(__binary128 vfa, __binary128 vfb)
Vector Compare Greater Than or Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5378
static int vec_cmpuq_all_ge(vui128_t vra, vui128_t vrb)
Vector Compare any Greater Than or Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3848
static int vec_cmpud_all_lt(vui64_t a, vui64_t b)
Vector Compare all Less than Unsigned Doubleword.
Definition: vec_int64_ppc.h:2311
static int vec_cmpqp_all_toge(__binary128 vfa, __binary128 vfb)
Vector Compare all Greater Than Or Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:6447
static vui64_t vec_minud(vui64_t vra, vui64_t vrb)
Vector Minimum Unsigned Doubleword.
Definition: vec_int64_ppc.h:2663
static __binary128 vec_xsiexpqp(vui128_t sig, vui64_t exp)
Scalar Insert Exponent Quad-Precision.
Definition: vec_f128_ppc.h:9716
static vb128_t vec_cmpltuzqp(__binary128 vfa, __binary128 vfb)
Vector Compare Less Than (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5964
#define CONST_VINT128_W(__w0, __w1, __w2, __w3)
Arrange word elements of a unsigned int initializer in high->low order. May require an explicit cast.
Definition: vec_common_ppc.h:304
static int vec_cmpqp_exp_unordered(__binary128 vfa, __binary128 vfb)
Vector Compare Exponents Quad-Precision for Unordered.
Definition: vec_f128_ppc.h:7494
static int vec_cmpqp_all_uzlt(__binary128 vfa, __binary128 vfb)
Vector Compare all Less Than (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:7078
static vf64_t vec_xviexpdp(vui64_t sig, vui64_t exp)
Vector Insert Exponent Double-Precision.
Definition: vec_f64_ppc.h:1665
static vb128_t vec_isnormalf128(__binary128 f128)
Return 128-bit vector boolean true if the __float128 value is normal (Not NaN, Inf,...
Definition: vec_f128_ppc.h:7705
static vb128_t vec_cmpgetoqp(__binary128 vfa, __binary128 vfb)
Vector Compare Greater Than or Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:5235
static int vec_cmpqp_all_tone(__binary128 vfa, __binary128 vfb)
Vector Compare all Not-Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:7204
Union used to transfer 128-bit data between vector and __float128 types.
Definition: vec_f128_ppc.h:3694
static vb128_t vec_cmpequzqp(__binary128 vfa, __binary128 vfb)
Vector Compare Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5106
static int vec_cmpuq_all_ne(vui128_t vra, vui128_t vrb)
Vector Compare all Not Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:4025
#define CONST_VINT64_DW(__dw0, __dw1)
Arrange elements of dword initializer in high->low order.
Definition: vec_common_ppc.h:295
vui16_t vx8
union field of vector unsigned short elements.
Definition: vec_f128_ppc.h:3699
__vector unsigned short vui16_t
vector of 16-bit unsigned short elements.
Definition: vec_common_ppc.h:204
static vui128_t vec_xfer_bin128_2_vui128t(__binary128 f128)
Transfer function from a __binary128 scalar to a vector __int128.
Definition: vec_f128_ppc.h:4491
static __binary128 vec_xscvudqp(vui64_t int64)
VSX Scalar Convert Unsigned-Doubleword to Quad-Precision format.
Definition: vec_f128_ppc.h:9054
unsigned __int128 ix1
union field of __int128 elements.
Definition: vec_f128_ppc.h:3711
static vb128_t vec_isfinitef128(__binary128 f128)
Return 128-bit vector boolean true if the __float128 value is Finite (Not NaN nor Inf).
Definition: vec_f128_ppc.h:7531
static vb128_t vec_cmpleuqp(__binary128 vfa, __binary128 vfb)
Vector Compare Less Than or Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5818
static int vec_cmpuq_all_eq(vui128_t vra, vui128_t vrb)
Vector Compare all Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3804
static vb128_t vec_cmpletoqp(__binary128 vfa, __binary128 vfb)
Vector Compare Less Than or Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:5675
__vector __int128 vi128_t
vector of one 128-bit signed __int128 element.
Definition: vec_common_ppc.h:235
static int vec_cmpud_all_eq(vui64_t a, vui64_t b)
Vector Compare all Equal Unsigned Doubleword.
Definition: vec_int64_ppc.h:2193
static vb128_t vec_isnanf128(__binary128 f128)
Return 128-bit vector boolean true if the __float128 value is Not a Number (NaN).
Definition: vec_f128_ppc.h:7666
static vb128_t vec_cmpltuqp(__binary128 vfa, __binary128 vfb)
Vector Compare Less Than (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6038
static int vec_all_isfinitef128(__binary128 f128)
Return true if the __float128 value is Finite (Not NaN nor Inf).
Definition: vec_f128_ppc.h:4691
static vui64_t vec_xxxexpqpp(__binary128 vfa, __binary128 vfb)
Vector Extract Exponent Quad-Precision Pair.
Definition: vec_f128_ppc.h:9871
static vb128_t vec_cmpgtuzqp(__binary128 vfa, __binary128 vfb)
Vector Compare Greater Than (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5524
vf128_t __binary128
Define __binary128 if not defined by the compiler. Same as __float128 for PPC.
Definition: vec_f128_ppc.h:3680
static int vec_cmpqp_all_tolt(__binary128 vfa, __binary128 vfb)
Vector Compare All Less Than (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:7016
__binary128 vf1
union field of __float128 elements.
Definition: vec_f128_ppc.h:3709
static vui32_t vec_mask128_f128Cbit(void)
Generate Quadword C-bit mask Immediate.
Definition: vec_f128_ppc.h:3922
__vector unsigned long long vui64_t
vector of 64-bit unsigned long long elements.
Definition: vec_common_ppc.h:208
vui128_t vx1
union field of vector unsigned __int128 elements.
Definition: vec_f128_ppc.h:3705
Common definitions and typedef used by the collection of Power Vector Library (pveclib) headers.
static vui64_t vec_splatd(vui64_t vra, const int ctl)
Vector splat doubleword. Duplicate the selected doubleword element across the doubleword elements of ...
Definition: vec_int64_ppc.h:3382
static vui64_t vec_mask64_f128exp(void)
Generate Doubleword Quad-Precision exponent mask.
Definition: vec_f128_ppc.h:3806
__vector unsigned char vui8_t
vector of 8-bit unsigned char elements.
Definition: vec_common_ppc.h:202
static __binary128 vec_nabsf128(__binary128 f128)
Negative Absolute value Quad-Precision.
Definition: vec_f128_ppc.h:7854
static int vec_cmpud_all_gt(vui64_t a, vui64_t b)
Vector Compare all Greater Than Unsigned Doubleword.
Definition: vec_int64_ppc.h:2255
static int vec_cmpqp_all_ne(__binary128 vfa, __binary128 vfb)
Vector Compare all Not-Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:7301
static int vec_cmpqp_all_ge(__binary128 vfa, __binary128 vfb)
Vector Compare all Greater Than Or Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6573
static vui128_t vec_xscvqpuqz(__binary128 f128)
VSX Scalar Convert with round to zero Quad-Precision to Unsigned Quadword.
Definition: vec_f128_ppc.h:8891
static vui64_t vec_subudm(vui64_t a, vui64_t b)
Vector Subtract Unsigned Doubleword Modulo.
Definition: vec_int64_ppc.h:3746
static int vec_cmpqp_exp_eq(__binary128 vfa, __binary128 vfb)
Vector Compare Quad-Precision Exponents for Equal.
Definition: vec_f128_ppc.h:7353
static vui64_t vec_vsld(vui64_t vra, vui64_t vrb)
Vector Shift Left Doubleword.
Definition: vec_int64_ppc.h:4238
static vui128_t vec_xsxsigqp(__binary128 f128)
Scalar Extract Significand Quad-Precision.
Definition: vec_f128_ppc.h:9814
Header package containing a collection of 128-bit computation functions implemented with PowerISA VMX...
static vui128_t vec_srqi(vui128_t vra, const unsigned int shb)
Vector Shift Right Quadword Immediate.
Definition: vec_int128_ppc.h:7154
static __binary128 vec_const_huge_valf128()
return a positive infinity.
Definition: vec_f128_ppc.h:4976
vui8_t vx16
union field of vector unsigned char elements.
Definition: vec_f128_ppc.h:3697
static vb128_t vec_cmpneuzqp(__binary128 vfa, __binary128 vfb)
Vector Compare Not Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6169
static vui128_t vec_splat_u128(const int sim)
Vector Splat Immediate Unsigned Quadword. Extend a unsigned integer constant across the quadword elem...
Definition: vec_int128_ppc.h:6914
static vui16_t vec_srhi(vui16_t vra, const unsigned int shb)
Vector Shift Right Halfword Immediate.
Definition: vec_int16_ppc.h:1093
static vui128_t vec_clzq(vui128_t vra)
Vector Count Leading Zeros Quadword for unsigned __int128 elements.
Definition: vec_int128_ppc.h:2918
static vui32_t vec_xor_bin128_2_vui32t(__binary128 f128, vui32_t mask)
Transfer a quadword from a __binary128 scalar to a vector int and logical Exclusive OR with mask.
Definition: vec_f128_ppc.h:4175
static vui32_t vec_mask128_f128Lbit(void)
Generate Quadword L-bit mask Immediate.
Definition: vec_f128_ppc.h:3943
static vui32_t vec_mask128_f128exp(void)
Generate Quadword Quad-Precision exponent mask.
Definition: vec_f128_ppc.h:3829
static vui64_t vec_mrgh_bin128_2_vui64t(__binary128 vfa, __binary128 vfb)
Merge High and Transfer function from a pair of __binary128 scalars to a vector long long int.
Definition: vec_f128_ppc.h:4374
static vui128_t vec_muludq(vui128_t *mulu, vui128_t a, vui128_t b)
Vector Multiply Unsigned Double Quadword.
Definition: vec_int128_ppc.h:5734
static int vec_cmpud_any_eq(vui64_t a, vui64_t b)
Vector Compare any Equal Unsigned Doubleword.
Definition: vec_int64_ppc.h:2365
#define VEC_WE_3
Element index for vector splat word 3.
Definition: vec_common_ppc.h:336
static vui32_t vec_mask128_f128sig(void)
Generate Quadword Quad-Precision significand mask.
Definition: vec_f128_ppc.h:3878
static __binary128 vec_xssubqpo(__binary128 vfa, __binary128 vfb)
VSX Scalar Subtract Quad-Precision using round to Odd.
Definition: vec_f128_ppc.h:8303
static int vec_cmpqp_all_toeq(__binary128 vfa, __binary128 vfb)
Vector Compare all Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:6297
static vui128_t vec_addcuq(vui128_t a, vui128_t b)
Vector Add & write Carry Unsigned Quadword.
Definition: vec_int128_ppc.h:2568
static int vec_cmpuq_all_le(vui128_t vra, vui128_t vrb)
Vector Compare any Less Than or Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3936
static __binary128 vec_xscvsdqp(vi64_t int64)
VSX Scalar Convert Signed-Doubleword to Quad-Precision format.
Definition: vec_f128_ppc.h:8974
__vector unsigned __int128 vui128_t
vector of one 128-bit unsigned __int128 element.
Definition: vec_common_ppc.h:237
__vector __bool long long vb64_t
vector of 64-bit bool long long elements.
Definition: vec_common_ppc.h:230
vf128_t __Float128
Define __Float128 if not defined by the compiler. Same as __float128 for PPC.
Definition: vec_f128_ppc.h:3677
static vb128_t vec_cmpnetoqp(__binary128 vfa, __binary128 vfb)
Vector Compare Not Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:6113
vui32_t vx4
union field of vector unsigned int elements.
Definition: vec_f128_ppc.h:3701
static vui64_t vec_clzd(vui64_t vra)
Vector Count Leading Zeros Doubleword for unsigned long long elements.
Definition: vec_int64_ppc.h:1313
static vui128_t vec_andc_bin128_2_vui128t(__binary128 f128, vui128_t mask)
Transfer a quadword from a __binary128 scalar to a vector __int128 and logical AND Compliment with ma...
Definition: vec_f128_ppc.h:4220
static vb128_t vec_cmpltsq(vi128_t vra, vi128_t vrb)
Vector Compare Less Than Signed Quadword.
Definition: vec_int128_ppc.h:3357
static int vec_all_isinff128(__binary128 f128)
Return true if the __float128 value is infinity.
Definition: vec_f128_ppc.h:4723
static vb128_t vec_setb_cyq(vui128_t vcy)
Vector Set Bool from Quadword Carry.
Definition: vec_int128_ppc.h:6509
__vector long long vi64_t
vector of 64-bit signed long long elements.
Definition: vec_common_ppc.h:217
static vui32_t vec_or_bin128_2_vui32t(__binary128 f128, vui32_t mask)
Transfer a quadword from a __binary128 scalar to a vector int and logical OR with mask.
Definition: vec_f128_ppc.h:4130
static vui16_t vec_xfer_bin128_2_vui16t(__binary128 f128)
Transfer function from a __binary128 scalar to a vector short int.
Definition: vec_f128_ppc.h:4306
#define CONST_VINT128_DW(__dw0, __dw1)
Initializer for 128-bits vector, as two unsigned long long elements in high->low order....
Definition: vec_common_ppc.h:298
static vui64_t vec_const64_f128_128(void)
Generate doubleword splat constant 128.
Definition: vec_f128_ppc.h:3739
static vb128_t vec_cmpgttoqp(__binary128 vfa, __binary128 vfb)
Vector Compare Greater Than (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:5455
__vector __bool short vb16_t
vector of 16-bit bool short elements.
Definition: vec_common_ppc.h:226
static vui64_t vec_vsrd(vui64_t vra, vui64_t vrb)
Vector Shift Right Doubleword.
Definition: vec_int64_ppc.h:4377
static vui32_t vec_andc_bin128_2_vui32t(__binary128 f128, vui32_t mask)
Transfer a quadword from a __binary128 scalar to a vector int and logical AND Compliment with mask.
Definition: vec_f128_ppc.h:4085
static vb128_t vec_setb_qp(__binary128 f128)
Vector Set Bool from Quadword Floating-point.
Definition: vec_f128_ppc.h:7953
static int vec_cmpuq_all_gt(vui128_t vra, vui128_t vrb)
Vector Compare any Greater Than Unsigned Quadword.
Definition: vec_int128_ppc.h:3892
static vui32_t vec_const128_f128_128(void)
Generate Quadword constant 128.
Definition: vec_f128_ppc.h:3770
static vb64_t vec_cmpgtsd(vi64_t a, vi64_t b)
Vector Compare Greater Than Signed Doubleword.
Definition: vec_int64_ppc.h:1571
static __binary128 vec_xfer_vui16t_2_bin128(vui16_t f128)
Transfer a vector unsigned short to __binary128 scalar.
Definition: vec_f128_ppc.h:4557
static vui64_t vec_xvxsigdp(vf64_t vrb)
Vector Extract Significand Double-Precision.
Definition: vec_f64_ppc.h:1762
static vb128_t vec_setb_sq(vi128_t vra)
Vector Set Bool from Signed Quadword.
Definition: vec_int128_ppc.h:6576
static int vec_cmpqp_all_uzge(__binary128 vfa, __binary128 vfb)
Vector Compare all Greater Than Or Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6509
static vb128_t vec_cmplttoqp(__binary128 vfa, __binary128 vfb)
Vector Compare Less Than (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:5895
#define VEC_DW_L
Element index for low order dword.
Definition: vec_common_ppc.h:324
static vb128_t vec_cmpgeuzqp(__binary128 vfa, __binary128 vfb)
Vector Compare Greater Than Or Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5304
vui128_t vf128_t
vector of 128-bit binary128 element. Same as __float128 for PPC.
Definition: vec_f128_ppc.h:3674
static __binary128 vec_sel_bin128_2_bin128(__binary128 vfa, __binary128 vfb, vb128_t mask)
Select and Transfer from one of two __binary128 scalars under a 128-bit mask. The result is a __binar...
Definition: vec_f128_ppc.h:3992
static vui64_t vec_selud(vui64_t vra, vui64_t vrb, vb64_t vrc)
Vector Select Unsigned Doubleword.
Definition: vec_int64_ppc.h:3354
static __binary128 vec_xscvsqqp(vi128_t int128)
VSX Scalar Convert Signed-Quadword to Quad-Precision format.
Definition: vec_f128_ppc.h:9130
static __binary128 vec_const_inff128()
return a positive infinity.
Definition: vec_f128_ppc.h:4988
static int vec_cmpqp_all_tole(__binary128 vfa, __binary128 vfb)
Vector Compare All Less Than Or Equal (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:6826
#define VEC_WE_1
Element index for vector splat word 1.
Definition: vec_common_ppc.h:332
Header package containing a collection of 128-bit SIMD operations over 64-bit double-precision floati...
static vb128_t vec_cmpequq(vui128_t vra, vui128_t vrb)
Vector Compare Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3043
static vb128_t vec_cmpleuq(vui128_t vra, vui128_t vrb)
Vector Compare Less Than or Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3316
vb128_t vbool1
union field of vector __bool __int128 elements.
Definition: vec_f128_ppc.h:3707
static int vec_cmpqp_all_eq(__binary128 vfa, __binary128 vfb)
Vector Compare all Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6394
static vui32_t vec_mask128_f128mag(void)
Generate Quadword Quad-Precision magnitude mask.
Definition: vec_f128_ppc.h:3858
static int vec_cmpud_any_ne(vui64_t a, vui64_t b)
Vector Compare any Not Equal Unsigned Doubleword.
Definition: vec_int64_ppc.h:2508
static vui64_t vec_mrgald(vui128_t vra, vui128_t vrb)
Vector Merge Algebraic Low Doublewords.
Definition: vec_int64_ppc.h:2736
static vb128_t vec_cmpgtuqp(__binary128 vfa, __binary128 vfb)
Vector Compare Greater Than (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5598
static int vec_cmpqp_exp_gt(__binary128 vfa, __binary128 vfb)
Vector Compare Exponents Quad-Precision for Greater Than.
Definition: vec_f128_ppc.h:7400
static __binary128 vec_negf128(__binary128 f128)
Negate the sign bit of a __float128 input and return the resulting __float128 value.
Definition: vec_f128_ppc.h:7886
static vui8_t vec_xfer_bin128_2_vui8t(__binary128 f128)
Transfer function from a __binary128 scalar to a vector char.
Definition: vec_f128_ppc.h:4263
static int vec_all_issubnormalf128(__binary128 f128)
Return true if the __float128 value is subnormal (denormal).
Definition: vec_f128_ppc.h:4841
static vb128_t vec_cmpequqp(__binary128 vfa, __binary128 vfb)
Vector Compare Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5169
static vui64_t vec_mrgahd(vui128_t vra, vui128_t vrb)
Vector Merge Algebraic High Doublewords.
Definition: vec_int64_ppc.h:2710
static int vec_isinf_signf128(__binary128 f128)
Return true (nonzero) value if the __float128 value is infinity. If infinity, indicate the sign as +1...
Definition: vec_f128_ppc.h:7576
__vector unsigned int vui32_t
vector of 32-bit unsigned int elements.
Definition: vec_common_ppc.h:206
static vui64_t vec_splat_u64(const int sim)
Vector Splat Immediate Unsigned Doubleword. Duplicate the unsigned integer constant across doubleword...
Definition: vec_int64_ppc.h:3495
static int vec_all_isunorderedf128(__binary128 vfa, __binary128 vfb)
Return true if either __float128 value (vra, vrb) is NaN.
Definition: vec_f128_ppc.h:4881
static vb64_t vec_cmpltud(vui64_t a, vui64_t b)
Vector Compare less Than Unsigned Doubleword.
Definition: vec_int64_ppc.h:1771
static __binary128 vec_copysignf128(__binary128 f128x, __binary128 f128y)
Copy the sign bit from f128x and merge with the magnitude from f128y. The merged result is returned a...
Definition: vec_f128_ppc.h:4950
static vui128_t vec_sldqi(vui128_t vrw, vui128_t vrx, const unsigned int shb)
Vector Shift Left Double Quadword Immediate.
Definition: vec_int128_ppc.h:6649
static vui32_t vec_and_bin128_2_vui32t(__binary128 f128, vui32_t mask)
Transfer a quadword from a __binary128 scalar to a vector int and logical AND with a mask.
Definition: vec_f128_ppc.h:4040
static vui64_t vec_mrgl_bin128_2_vui64t(__binary128 vfa, __binary128 vfb)
Merge Low and Transfer function from a pair of __binary128 scalars to a vector long long int.
Definition: vec_f128_ppc.h:4412
long double __IBM128
Define __IBM128 if not defined by the compiler. Same as old long double for PPC.
Definition: vec_f128_ppc.h:3689
static vui128_t vec_adduqm(vui128_t a, vui128_t b)
Vector Add Unsigned Quadword Modulo.
Definition: vec_int128_ppc.h:2739
static __binary128 vec_xsaddqpo(__binary128 vfa, __binary128 vfb)
VSX Scalar Add Quad-Precision using round to Odd.
Definition: vec_f128_ppc.h:8035
static int vec_cmpud_all_ge(vui64_t a, vui64_t b)
Vector Compare all Greater Than or Equal Unsigned Doubleword.
Definition: vec_int64_ppc.h:2223
static __binary128 vec_xfer_vui8t_2_bin128(vui8_t f128)
Transfer a vector unsigned char to __binary128 scalar.
Definition: vec_f128_ppc.h:4534
static vui64_t vec_xsxexpqp(__binary128 f128)
Scalar Extract Exponent Quad-Precision.
Definition: vec_f128_ppc.h:9765
static vb64_t vec_cmpgtud(vui64_t a, vui64_t b)
Vector Compare Greater Than Unsigned Doubleword.
Definition: vec_int64_ppc.h:1622
vui64_t vx2
union field of vector unsigned long long elements.
Definition: vec_f128_ppc.h:3703
static vui64_t vec_addudm(vui64_t a, vui64_t b)
Vector Add Unsigned Doubleword Modulo.
Definition: vec_int64_ppc.h:1261
__vector double vf64_t
vector of 64-bit double elements.
Definition: vec_common_ppc.h:221
static __binary128 vec_xsmulqpo(__binary128 vfa, __binary128 vfb)
VSX Scalar Multiply Quad-Precision using round to Odd.
Definition: vec_f128_ppc.h:9380
static vb128_t vec_isunorderedf128(__binary128 vfa, __binary128 vfb)
Return 128-bit vector boolean true value, if either __float128 value (vra, vrb) is NaN.
Definition: vec_f128_ppc.h:7793
static int vec_all_isnormalf128(__binary128 f128)
Return true if the __float128 value is normal (Not NaN, Inf, denormal, or zero).
Definition: vec_f128_ppc.h:4807
static int vec_cmpsd_all_gt(vi64_t a, vi64_t b)
Vector Compare all Greater Than Signed Doubleword.
Definition: vec_int64_ppc.h:1909
static vui128_t vec_srq(vui128_t vra, vui128_t vrb)
Vector Shift Right Quadword.
Definition: vec_int128_ppc.h:7114
static int vec_cmpqp_all_togt(__binary128 vfa, __binary128 vfb)
Vector Compare all Greater Than (Total-order) Quad-Precision.
Definition: vec_f128_ppc.h:6637
static __binary128 vec_xfer_vui128t_2_bin128(vui128_t f128)
Transfer a vector unsigned __int128 to __binary128 scalar.
Definition: vec_f128_ppc.h:4626
static int vec_cmpqp_all_lt(__binary128 vfa, __binary128 vfb)
Vector Compare all Less Than (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:7142
static vui64_t vec_xscvqpudz(__binary128 f128)
VSX Scalar Convert with round to zero Quad-Precision to Unsigned doubleword.
Definition: vec_f128_ppc.h:8807
static vb128_t vec_cmpneuqp(__binary128 vfa, __binary128 vfb)
Vector Compare Not Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6233
static int vec_cmpsd_all_lt(vi64_t a, vi64_t b)
Vector Compare all Less than Signed Doubleword.
Definition: vec_int64_ppc.h:1965
static __binary128 vec_self128(__binary128 vfa, __binary128 vfb, vb128_t mask)
Select and Transfer from one of two __binary128 scalars under a 128-bit mask. The result is a __binar...
Definition: vec_f128_ppc.h:7926
static vui64_t vec_swapd(vui64_t vra)
Vector doubleword swap. Exchange the high and low doubleword elements of a vector.
Definition: vec_int64_ppc.h:3789
static __binary128 vec_const_nanf128()
return a quiet NaN.
Definition: vec_f128_ppc.h:5000
static vf64_t vec_xscvqpdpo(__binary128 f128)
VSX Scalar Convert with round Quad-Precision to Double-Precision (using round to odd).
Definition: vec_f128_ppc.h:8675
static int vec_all_isnanf128(__binary128 f128)
Return true if the __float128 value is Not a Number (NaN).
Definition: vec_f128_ppc.h:4763
static vui128_t vec_slqi(vui128_t vra, const unsigned int shb)
Vector Shift Left Quadword Immediate.
Definition: vec_int128_ppc.h:6748
static __binary128 vec_xscvdpqp(vf64_t f64)
VSX Scalar Convert Double-Precision to Quad-Precision format.
Definition: vec_f128_ppc.h:8572
static int vec_cmpqp_all_le(__binary128 vfa, __binary128 vfb)
Vector Compare all Less Than Or Equal (Unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6952
static vb128_t vec_cmpgesq(vi128_t vra, vi128_t vrb)
Vector Compare Greater Than or Equal Signed Quadword.
Definition: vec_int128_ppc.h:3089
static vb128_t vec_cmpleuzqp(__binary128 vfa, __binary128 vfb)
Vector Compare Less Than or Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:5744
static vui128_t vec_slq(vui128_t vra, vui128_t vrb)
Vector Shift Left Quadword.
Definition: vec_int128_ppc.h:6707
static vui32_t vec_xfer_bin128_2_vui32t(__binary128 f128)
Transfer function from a __binary128 scalar to a vector int.
Definition: vec_f128_ppc.h:4329
static vb64_t vec_cmpequd(vui64_t a, vui64_t b)
Vector Compare Equal Unsigned Doubleword.
Definition: vec_int64_ppc.h:1451
#define VEC_DW_H
Element index for high order dword.
Definition: vec_common_ppc.h:322
static int vec_all_iszerof128(__binary128 f128)
Return true if the __float128 value is +-0.0.
Definition: vec_f128_ppc.h:4906
vf128_t __float128
Define __float128 if not defined by the compiler. Same as __float128 for PPC.
Definition: vec_f128_ppc.h:3685
static vb128_t vec_cmpgeuq(vui128_t vra, vui128_t vrb)
Vector Compare Greater Than or Equal Unsigned Quadword.
Definition: vec_int128_ppc.h:3138
static int vec_signbitf128(__binary128 f128)
Return int boolean true if the __float128 value is negative (sign bit is '1').
Definition: vec_f128_ppc.h:7996
static int vec_cmpqp_all_uzle(__binary128 vfa, __binary128 vfb)
Vector Compare all Less Than Or Equal (Zero-unordered) Quad-Precision.
Definition: vec_f128_ppc.h:6888
#define VEC_HW_H
Element index for highest order hword.
Definition: vec_common_ppc.h:338
static __binary128 vec_const_nansf128()
return a signaling NaN.
Definition: vec_f128_ppc.h:5012
static vui128_t vec_seluq(vui128_t vra, vui128_t vrb, vb128_t vrc)
Vector Select Unsigned Quadword.
Definition: vec_int128_ppc.h:6482