Spec-Zone.ru › GCC 15

7.13.24.2 Основные встроенные функции PowerPC, доступные на ISA 2.05

Основные встроенные функции, описанные в этом разделе, доступны на процессорах семейства PowerPC, начиная с ISA 2.05 и более поздних версий. Если соответствующие параметры явно не отключены в командной строке, указание параметра -mcpu=power6 приводит к включению параметров -mpowerpc64, -mpowerpc-gpopt, -mpowerpc-gfxopt, -mmfcrf, -mpopcntb, -mfprnd, -mcmpb, -mhard-dfp и -mrecip-precision. При необходимости явно укажите параметр -maltivec вместе с указанными выше параметрами.

Для следующих функций требуется параметр -mcmpb.

unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
unsigned int __builtin_cmpb (unsigned int, unsigned int);

Функция __builtin_cmpb выполняет побайтовое сравнение содержимого двух аргументов и возвращает результат этого сравнения. Для каждого сравнения байтов соответствующий байт возвращаемого значения равен 0xff, если входные байты совпадают, и 0, если они не совпадают. Если ширина любого аргумента этой встроенной функции превышает 32 бита, вызов функции преобразуется в форму, ожидающую аргументы unsigned long long int, доступную только на 64-разрядных целевых платформах.

Следующие встроенные функции доступны при наличии аппаратной поддержки десятичной арифметики с плавающей точкой (-mhard-dfp):

void __builtin_set_fpscr_drn(int);
_Decimal64 __builtin_ddedpd (int, _Decimal64);
_Decimal128 __builtin_ddedpdq (int, _Decimal128);
_Decimal64 __builtin_denbcd (int, _Decimal64);
_Decimal128 __builtin_denbcdq (int, _Decimal128);
_Decimal64 __builtin_diex (long long, _Decimal64);
_Decimal128 _builtin_diexq (long long, _Decimal128);
_Decimal64 __builtin_dscli (_Decimal64, int);
_Decimal128 __builtin_dscliq (_Decimal128, int);
_Decimal64 __builtin_dscri (_Decimal64, int);
_Decimal128 __builtin_dscriq (_Decimal128, int);
long long __builtin_dxex (_Decimal64);
long long __builtin_dxexq (_Decimal128);
_Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
unsigned long long __builtin_unpack_dec128 (_Decimal128, int);

The __builtin_set_fpscr_drn builtin allows changing the three decimal
floating point rounding mode bits.  The argument is a 3-bit value.  The
argument can either be a const int or the value can be stored in
a variable.
The builtin uses the ISA 3.0 instruction mffscdrn if available.
Otherwise the builtin reads the FPSCR, masks the current decimal rounding
mode bits out and OR's in the new value.

_Decimal64 __builtin_dfp_quantize (_Decimal64, _Decimal64, const int);
_Decimal64 __builtin_dfp_quantize (const int, _Decimal64, const int);
_Decimal128 __builtin_dfp_quantize (_Decimal128, _Decimal128, const int);
_Decimal128 __builtin_dfp_quantize (const int, _Decimal128, const int);

The __builtin_dfp_quantize built-in, converts and rounds the second
argument to the form with the exponent as specified by the first
argument based on the rounding mode specified by the third argument.
If the first argument is a decimal floating point value, its exponent is used
for converting and rounding of the second argument.  If the first argument is a
5-bit constant integer value, then the value specifies the exponent to be used
when rounding and converting the second argument.  The third argument is a
two bit constant integer that specifies the rounding mode.  The possible modes
are: 00 Round to nearest, ties to even; 01 Round toward 0; 10 Round to nearest,
ties away from 0; 11 Round according to DRN where DRN is the Decimal Floating
point field of the FPSCR.

Для следующих функций требуются параметры -mhard-float, -mpowerpc-gfxopt и -mpopcntb.

double __builtin_recipdiv (double, double);
float __builtin_recipdivf (float, float);
double __builtin_rsqrt (double);
float __builtin_rsqrtf (float);

Функции vec_rsqrt, __builtin_rsqrt и __builtin_rsqrtf генерируют несколько инструкций для реализации вычисления обратного квадратного корня с использованием инструкций оценки обратного квадратного корня.

Функции __builtin_recipdiv и __builtin_recipdivf генерируют несколько инструкций для реализации деления с использованием инструкций оценки обратной величины.

Для следующих функций требуются параметры -mhard-float и -mmultiple.

Функция __builtin_unpack_longdouble принимает аргумент long double и целочисленную константу времени компиляции со значением 0 или 1. Если константа равна 0, возвращается первый double в составе long double, в противном случае возвращается второй double. Функция __builtin_unpack_longdouble доступна только в том случае, если long double использует расширенное представление double IBM.

Функция __builtin_pack_longdouble принимает два аргумента double и возвращает значение long double, объединяющее эти аргументы. Функция __builtin_pack_longdouble доступна только в том случае, если long double использует расширенное представление double IBM.

Функция __builtin_unpack_ibm128 принимает аргумент __ibm128 и целочисленную константу времени компиляции со значением 0 или 1. Если константа равна 0, возвращается первый double в составе __ibm128, в противном случае возвращается второй double.

Функция __builtin_pack_ibm128 принимает два аргумента double и возвращает значение __ibm128, объединяющее эти аргументы.

Для процессоров семейства 64-разрядных PowerPC доступны дополнительные встроенные функции, обеспечивающие эффективную работу со значениями 128-разрядных чисел с плавающей точкой (__float128).

Выбор вектора

vector signed __int128 vec_sel (vector signed __int128,
               vector signed __int128, vector bool __int128);
vector signed __int128 vec_sel (vector signed __int128,
               vector signed __int128, vector unsigned __int128);
vector unsigned __int128 vec_sel (vector unsigned __int128,
               vector unsigned __int128, vector bool __int128);
vector unsigned __int128 vec_sel (vector unsigned __int128,
               vector unsigned __int128, vector unsigned __int128);
vector bool __int128 vec_sel (vector bool __int128,
               vector bool __int128, vector bool __int128);
vector bool __int128 vec_sel (vector bool __int128,
               vector bool __int128, vector unsigned __int128);

Этот вариант расширяет существующую перегруженную встроенную функцию vec_sel, описанную в PVIPR.

vector signed __int128 vec_perm (vector signed __int128,
               vector signed __int128);
vector unsigned __int128 vec_perm (vector unsigned __int128,
               vector unsigned __int128);

Этот вариант расширяет существующую перегруженную встроенную функцию vec_perm, описанную в PVIPR.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Basic-PowerPC-Built_002din-Functions-Available-on-ISA-2_002e05.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API