Spec-Zone.ru › GCC 14

6.62.25.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 использует расширенное представление двойной точности IBM.

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

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

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

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

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

Spec-Zone.ru

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