6.60.21 Встроенные функции PowerPC
Следующие встроенные функции всегда доступны и могут использоваться для проверки типа целевой платформы PowerPC:
- Встроенная функция: void __builtin_cpu_init (void)
Эта функция является
nopна платформе PowerPC и включена только для поддержания совместимости API с x86 встроенными функциями.
- Встроенная функция: void __builtin_cpu_init (void)
Эта функция является
nopна платформе PowerPC и включена только для поддержания совместимости API с x86 встроенными функциями.
- Встроенная функция: int __builtin_cpu_is (const char *cpuname)
-
Эта функция возвращает значение
1если процессор во время выполнения имеет тип cpuname и возвращает0в противном случаеФункция
__builtin_cpu_isтребует GLIBC 2.23 или новее, которая экспортирует биты возможностей аппаратного обеспечения. GCC определяет макрос__BUILTIN_CPU_SUPPORTS__если встроенная функция__builtin_cpu_supportsполностью поддерживается.Если GCC был сконфигурирован для использования GLIBC до версии 2.23, встроенная функция
__builtin_cpu_isвсегда возвращает 0, и компилятор выдает предупреждение.Следующие имена процессоров могут быть определены:
- ‘power9’
Процессор IBM POWER9 Server.
- ‘power8’
Процессор IBM POWER8 Server.
- ‘power7’
Процессор IBM POWER7 Server.
- ‘power6x’
Процессор IBM POWER6 Server (режим RAW).
- ‘power6’
Процессор IBM POWER6 Server (архитектурный режим).
- ‘power5+’
Процессор IBM POWER5+ Server.
- ‘power5’
Процессор IBM POWER5 Server.
- ‘ppc970’
Процессор IBM 970 Server (например, Apple G5).
- ‘power4’
Процессор IBM POWER4 Server.
- ‘ppca2’
Встроенный 64-битный процессор IBM A2.
- ‘ppc476’
Встроенный 32-битный процессор IBM PowerPC 476FP.
- ‘ppc464’
Встроенный 32-битный процессор IBM PowerPC 464.
- ‘ppc440’
Встроенный 32-битный процессор PowerPC 440.
- ‘ppc405’
Встроенный 32-битный процессор PowerPC 405.
- ‘ppc-cell-be’
Процессор архитектуры IBM PowerPC Cell Broadband Engine.
Вот пример:
#ifdef __BUILTIN_CPU_SUPPORTS__ if (__builtin_cpu_is ("power8")) { do_power8 (); // POWER8 specific implementation. } else #endif { do_generic (); // Generic implementation. }
- Встроенная функция: int __builtin_cpu_supports (const char *feature)
-
Эта функция возвращает значение
1если процессор во время выполнения поддерживает функцию HWCAP feature и возвращает0в противном случае.Функция
__builtin_cpu_supportsтребует GLIBC 2.23 или новее, которая экспортирует биты возможностей аппаратного обеспечения. GCC определяет макрос__BUILTIN_CPU_SUPPORTS__если встроенная функция__builtin_cpu_supportsполностью поддерживается.Если GCC был сконфигурирован для использования GLIBC до версии 2.23, встроенная функция
__builtin_cpu_suportsвсегда возвращает 0, и компилятор выдает предупреждение.Следующие функции могут быть определены:
- ‘4xxmac’
Процессор 4xx имеет умножитель-сумматор.
- ‘altivec’
Процессор имеет SIMD/векторный блок.
- ‘arch_2_05’
Процессор поддерживает ISA 2.05 (например, POWER6).
- ‘arch_2_06’
Процессор поддерживает ISA 2.06 (например, POWER7).
- ‘arch_2_07’
Процессор поддерживает ISA 2.07 (например, POWER8).
- ‘arch_3_00’
Процессор поддерживает ISA 3.0 (например, POWER9).
- ‘archpmu’
Процессор поддерживает набор совместимых событий мониторинга производительности.
- ‘booke’
Процессор поддерживает категорию встроенной ISA.
- ‘cellbe’
Процессор имеет CELL broadband engine.
- ‘dfp’
Процессор имеет десятичный блок с плавающей запятой.
- ‘dscr’
Процессор поддерживает регистр управления потоком данных.
- ‘ebb’
Процессор поддерживает ветвление на основе событий.
- ‘efpdouble’
Процессор имеет SPE-блок с двойной точностью с плавающей запятой.
- ‘efpsingle’
Процессор имеет SPE-блок с одинарной точностью с плавающей запятой.
- ‘fpu’
Процессор имеет блок с плавающей запятой.
- ‘htm’
Процессор имеет инструкции аппаратной транзакционной памяти.
- ‘htm-nosc’
Ядро прерывает аппаратные транзакции при выполнении системного вызова.
- ‘ic_snoop’
Процессор поддерживает возможности прослушивания кэш-памяти инструкций.
- ‘ieee128’
Процессор поддерживает 128-битные инструкции IEEE двоичной арифметики с плавающей запятой.
- ‘isel’
Процессор поддерживает инструкцию выбора целых чисел.
- ‘mmu’
Процессор имеет блок управления памятью.
- ‘notb’
Процессор не имеет таймбейса (например, 601 и 403gx).
- ‘pa6t’
Процессор поддерживает ISA CORE PA Semi 6T.
- ‘power4’
Процессор поддерживает ISA 2.00 (например, POWER4).
- ‘power5’
Процессор поддерживает ISA 2.02 (например, POWER5).
- ‘power5+’
Процессор поддерживает ISA 2.03 (например, POWER5+).
- ‘power6x’
Процессор поддерживает ISA 2.05 (например, POWER6) расширенные операционные коды mffgpr и mftgpr.
- ‘ppc32’
Процессор поддерживает выполнение в 32-битном режиме.
- ‘ppc601’
Процессор поддерживает старую ISA POWER (например, 601).
- ‘ppc64’
Процессор поддерживает выполнение в 64-битном режиме.
- ‘ppcle’
Процессор поддерживает малоэндианский режим с использованием перестановки адресов.
- ‘smt’
Процессор поддерживает одновременное многопоточное выполнение.
- ‘spe’
Процессор имеет блок расширения обработки сигналов.
- ‘tar’
Процессор поддерживает регистр целевого адреса.
- ‘true_le’
Процессор поддерживает настоящий малоэндианский режим.
- ‘ucache’
Процессор имеет объединенный кэш инструкций/данных.
- ‘vcrypto’
Процессор поддерживает инструкции векторной криптографии.
- ‘vsx’
Процессор поддерживает расширение векторно-скалярного типа.
Вот пример:
#ifdef __BUILTIN_CPU_SUPPORTS__ if (__builtin_cpu_supports ("fpu")) { asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2)); } else #endif { dst = __fadd (src1, src2); // Software FP addition function. }
Эти встроенные функции доступны для семейства процессоров PowerPC:
float __builtin_recipdivf (float, float); float __builtin_rsqrtf (float); double __builtin_recipdiv (double, double); double __builtin_rsqrt (double); uint64_t __builtin_ppc_get_timebase (); unsigned long __builtin_ppc_mftb (); double __builtin_unpack_longdouble (long double, int); long double __builtin_pack_longdouble (double, double);
Функции vec_rsqrt, __builtin_rsqrt, и __builtin_rsqrtf генерируют несколько инструкций для реализации функции обратного квадратного корня с использованием инструкций оценки обратного квадратного корня.
Функции __builtin_recipdiv, и __builtin_recipdivf генерируют несколько инструкций для реализации деления с использованием инструкций оценки обратного значения.
Функции __builtin_ppc_get_timebase и __builtin_ppc_mftb генерируют инструкции для чтения регистра таймбейса. Функция __builtin_ppc_get_timebase может генерировать несколько инструкций и всегда возвращает 64 бита регистра таймбейса. Функция __builtin_ppc_mftb всегда генерирует одну инструкцию и возвращает значение регистра таймбейса как беззнаковое целое число, отбрасывая старшее слово в 32-битных средах.
Дополнительные встроенные функции доступны для 64-битного семейства процессоров PowerPC для эффективного использования 128-битных значений с плавающей запятой (__float128).
Следующие встроенные функции с плавающей запятой доступны с поддержкой -mfloat128 и Altivec. Все они реализуют функцию, которая является частью имени.
__float128 __builtin_fabsq (__float128) __float128 __builtin_copysignq (__float128, __float128)
Следующие встроенные функции доступны с поддержкой -mfloat128 и Altivec.
__float128 __builtin_infq (void)-
Аналогично
__builtin_inf, за исключением того, что тип возвращаемого значения -__float128. __float128 __builtin_huge_valq (void)-
Аналогично
__builtin_huge_val, за исключением того, что тип возвращаемого значения -__float128. __float128 __builtin_nanq (void)-
Аналогично
__builtin_nan, за исключением того, что тип возвращаемого значения -__float128. __float128 __builtin_nansq (void)Аналогично
__builtin_nans, за исключением того, что тип возвращаемого значения -__float128.
Следующие встроенные функции доступны для семейства процессоров PowerPC, начиная с ISA 2.06 или более поздней версии (-mcpu=power7 или -mpopcntd):
long __builtin_bpermd (long, long); int __builtin_divwe (int, int); unsigned int __builtin_divweu (unsigned int, unsigned int); long __builtin_divde (long, long); unsigned long __builtin_divdeu (unsigned long, unsigned long); unsigned int cdtbcd (unsigned int); unsigned int cbcdtd (unsigned int); unsigned int addg6s (unsigned int, unsigned int);
Функции __builtin_divde и __builtin_divdeu требуют 64-битной среды с поддержкой ISA 2.06 или более поздней версии.
Следующие встроенные функции доступны для семейства процессоров PowerPC, начиная с ISA 3.0 или более поздней версии (-mcpu=power9):
long long __builtin_darn (void); long long __builtin_darn_raw (void); int __builtin_darn_32 (void); unsigned int scalar_extract_exp (double source); unsigned long long int scalar_extract_sig (double source); double scalar_insert_exp (unsigned long long int significand, unsigned long long int exponent); double scalar_insert_exp (double significand, unsigned long long int exponent); int scalar_cmp_exp_gt (double arg1, double arg2); int scalar_cmp_exp_lt (double arg1, double arg2); int scalar_cmp_exp_eq (double arg1, double arg2); int scalar_cmp_exp_unordered (double arg1, double arg2); bool scalar_test_data_class (float source, const int condition); bool scalar_test_data_class (double source, const int condition); bool scalar_test_neg (float source); bool scalar_test_neg (double source); int __builtin_byte_in_set (unsigned char u, unsigned long long set); int __builtin_byte_in_range (unsigned char u, unsigned int range); int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges); int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value); int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value); int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
Функции __builtin_darn и __builtin_darn_raw требуют 64-битной среды с поддержкой ISA 3.0 или более поздней версии. Функция __builtin_darn предоставляет 64-битное условное случайное число. Функция __builtin_darn_raw предоставляет 64-битное случайное число без учёта условия. Функция __builtin_darn_32 предоставляет 32-битное случайное число.
Функции scalar_extract_exp и scalar_extract_sig требуют 64-битной среды с поддержкой ISA 3.0 или более поздней версии. Встроенные функции scalar_extract_exp и scalar_extract_sig возвращают мантиссу и смещённый показатель степени соответственно для своих аргументов source. В результате, возвращаемом функцией scalar_extract_sig, бит 0x10000000000000 установлен, если аргумент функции source находится в нормализованной форме. В противном случае этот бит устанавливается в 0. Обратите внимание, что знак мантиссы не представлен в результате, возвращаемом функцией scalar_extract_sig. Используйте функцию scalar_test_neg для проверки знака своего аргумента double.
Функция scalar_insert_exp требует 64-битной среды с поддержкой ISA 3.0 или более поздней версии. Встроенная функция scalar_insert_exp возвращает значение с плавающей запятой двойной точности, которое строится путём сборки значений её аргументов significand и exponent. Знак результата копируется из старшего бита аргумента significand. Компоненты мантиссы и показателя степени результата состоят из 11 младших битов аргумента exponent и 52 младших битов аргумента significand.
Встроенные функции scalar_cmp_exp_gt, scalar_cmp_exp_lt, scalar_cmp_exp_eq, и scalar_cmp_exp_unordered возвращают ненулевое значение, если arg1 больше, меньше, равно или не сравнимо с arg2 соответственно. Аргументы не сравнимы, если один из них равен NaN (не число).
Встроенная функция scalar_test_data_class возвращает 1, если истинно любое из условий, включённых в значение переменной condition, и 0 в противном случае. Аргумент condition должен быть целым числом, являющимся константой времени компиляции, со значением не превышающим 127. Аргумент condition закодирован как битовая маска, где каждый бит включает проверку разного условия, как показано ниже:
0x40 Test for NaN 0x20 Test for +Infinity 0x10 Test for -Infinity 0x08 Test for +Zero 0x04 Test for -Zero 0x02 Test for +Denormal 0x01 Test for -Denormal
Встроенная функция scalar_test_neg возвращает 1, если её аргумент source имеет отрицательное значение, и 0 в противном случае.
Функция __builtin_byte_in_set требует 64-битной среды, поддерживающей ISA 3.0 или более позднюю версию. Эта функция возвращает ненулевое значение тогда и только тогда, когда её аргумент u точно равен одному из восьми байтов, содержащихся в её 64-битном аргументе set.
Функции __builtin_byte_in_range и __builtin_byte_in_either_range требуют среды, поддерживающей ISA 3.0 или более позднюю версию. Для этих двух функций аргумент range закодирован как 4 байта, организованных как hi_1:lo_1:hi_2:lo_2. Функция __builtin_byte_in_range возвращает ненулевое значение тогда и только тогда, когда её аргумент u находится в диапазоне от lo_2 до hi_2 включительно. Функция __builtin_byte_in_either_range возвращает ненулевое значение тогда и только тогда, когда её аргумент u находится в любом из диапазонов: от lo_1 до hi_1 включительно или от lo_2 до hi_2 включительно.
Функция __builtin_dfp_dtstsfi_lt возвращает ненулевое значение тогда и только тогда, когда количество значащих цифр её аргумента value меньше её аргумента comparison. Функции __builtin_dfp_dtstsfi_lt_dd и __builtin_dfp_dtstsfi_lt_td ведут себя аналогично, но требуют, чтобы тип аргумента value был __Decimal64 и __Decimal128 соответственно.
Функция __builtin_dfp_dtstsfi_gt возвращает ненулевое значение тогда и только тогда, когда количество значащих цифр её аргумента value больше её аргумента comparison. Функции __builtin_dfp_dtstsfi_gt_dd и __builtin_dfp_dtstsfi_gt_td ведут себя аналогично, но требуют, чтобы тип аргумента value был __Decimal64 и __Decimal128 соответственно.
Функция __builtin_dfp_dtstsfi_eq возвращает ненулевое значение тогда и только тогда, когда количество значащих цифр её аргумента value равно её аргументу comparison. Функции __builtin_dfp_dtstsfi_eq_dd и __builtin_dfp_dtstsfi_eq_td ведут себя аналогично, но требуют, чтобы тип аргумента value был __Decimal64 и __Decimal128 соответственно.
Функция __builtin_dfp_dtstsfi_ov возвращает ненулевое значение тогда и только тогда, когда у её аргумента value неопределённое количество значащих цифр, например, когда value является кодировкой NaN. Функции __builtin_dfp_dtstsfi_ov_dd и __builtin_dfp_dtstsfi_ov_td ведут себя аналогично, но требуют, чтобы тип аргумента value был __Decimal64 и __Decimal128 соответственно.
Следующие встроенные функции также доступны для процессоров семейства PowerPC, начиная с ISA 3.0 или более поздней версии (-mcpu=power9). Эти строковые функции описаны отдельно, чтобы сгруппировать описания ближе к прототипам функций:
int vec_all_nez (vector signed char, vector signed char); int vec_all_nez (vector unsigned char, vector unsigned char); int vec_all_nez (vector signed short, vector signed short); int vec_all_nez (vector unsigned short, vector unsigned short); int vec_all_nez (vector signed int, vector signed int); int vec_all_nez (vector unsigned int, vector unsigned int); int vec_any_eqz (vector signed char, vector signed char); int vec_any_eqz (vector unsigned char, vector unsigned char); int vec_any_eqz (vector signed short, vector signed short); int vec_any_eqz (vector unsigned short, vector unsigned short); int vec_any_eqz (vector signed int, vector signed int); int vec_any_eqz (vector unsigned int, vector unsigned int); vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2); vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2); vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2); vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2); vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2); vector bool int vec_cmpnez (vector unsigned int, vector unsigned int); signed int vec_cntlz_lsbb (vector signed char); signed int vec_cntlz_lsbb (vector unsigned char); signed int vec_cnttz_lsbb (vector signed char); signed int vec_cnttz_lsbb (vector unsigned char); vector signed char vec_xl_len (signed char *addr, size_t len); vector unsigned char vec_xl_len (unsigned char *addr, size_t len); vector signed int vec_xl_len (signed int *addr, size_t len); vector unsigned int vec_xl_len (unsigned int *addr, size_t len); vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len); vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len); vector signed long long vec_xl_len (signed long long *addr, size_t len); vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len); vector signed short vec_xl_len (signed short *addr, size_t len); vector unsigned short vec_xl_len (unsigned short *addr, size_t len); vector double vec_xl_len (double *addr, size_t len); vector float vec_xl_len (float *addr, size_t len); void vec_xst_len (vector signed char data, signed char *addr, size_t len); void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len); void vec_xst_len (vector signed int data, signed int *addr, size_t len); void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len); void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len); void vec_xst_len (vector signed long long data, signed long long *addr, size_t len); void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len); void vec_xst_len (vector signed short data, signed short *addr, size_t len); void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len); void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len); void vec_xst_len (vector double data, double *addr, size_t len); void vec_xst_len (vector float data, float *addr, size_t len); signed char vec_xlx (unsigned int index, vector signed char data); unsigned char vec_xlx (unsigned int index, vector unsigned char data); signed short vec_xlx (unsigned int index, vector signed short data); unsigned short vec_xlx (unsigned int index, vector unsigned short data); signed int vec_xlx (unsigned int index, vector signed int data); unsigned int vec_xlx (unsigned int index, vector unsigned int data); float vec_xlx (unsigned int index, vector float data); signed char vec_xrx (unsigned int index, vector signed char data); unsigned char vec_xrx (unsigned int index, vector unsigned char data); signed short vec_xrx (unsigned int index, vector signed short data); unsigned short vec_xrx (unsigned int index, vector unsigned short data); signed int vec_xrx (unsigned int index, vector signed int data); unsigned int vec_xrx (unsigned int index, vector unsigned int data); float vec_xrx (unsigned int index, vector float data);
Функции vec_all_nez, vec_any_eqz, и vec_cmpnez выполняют попарные сравнения элементов в одинаковых позициях в своих двух векторных аргументах. Функция vec_all_nez возвращает ненулевое значение тогда и только тогда, когда все попарные сравнения не равны и ни один элемент ни одного векторного аргумента не содержит ноль. Функция vec_any_eqz возвращает ненулевое значение тогда и только тогда, когда хотя бы одно попарное сравнение равно или хотя бы один элемент одного из векторных аргументов содержит ноль. Функция vec_cmpnez возвращает вектор того же типа, что и её два аргумента, в котором каждый элемент состоит из всех единиц, чтобы обозначить, что соответствующие элементы входных аргументов не равны или что по крайней мере один из соответствующих элементов содержит ноль. В противном случае элемент возвращаемого вектора содержит все нули.
Функция vec_cntlz_lsbb возвращает количество последовательных ведущих байтовых элементов (начиная с позиции 0 в предоставленном векторном аргументе), для которых младший бит равен нулю. Функция vec_cnttz_lsbb возвращает количество последовательных завершающих байтовых элементов (начиная с позиции 15 и считая назад в предоставленном векторном аргументе), для которых младший бит равен нулю.
Функции vec_xl_len и vec_xst_len требуют 64-битной среды, поддерживающей ISA 3.0 или более позднюю версию. Функция vec_xl_len загружает вектор переменной длины из памяти. Функция vec_xst_len сохраняет вектор переменной длины в памяти. В обеих функциях vec_xl_len и vec_xst_len, аргумент addr представляет собой адрес памяти, к которому или из которого будут переданы данные, а аргумент len представляет собой количество байтов, подлежащих передаче, как вычислено выражением C min((len & 0xff), 16). Если значение этого выражения не кратно размеру элемента вектора, поведение этой функции не определено. В случае, если на подлежащей машине настроен режим работы в формате big-endian, передача данных перемещает байты с 0 до (len - 1) соответствующего вектора. В режиме little-endian передача данных перемещает байты с (16 - len) до 15 соответствующего вектора. Для функции загрузки любые байты результирующего вектора, которые не загружаются из памяти, устанавливаются в ноль. Значение аргумента addr не обязательно должно быть выровнено на кратное размеру элемента вектора.
Функции vec_xlx и vec_xrx извлекают единственный элемент, выбранный аргументом index, из вектора, представленного аргументом data. Аргумент index всегда указывает смещение байта, независимо от размера элемента вектора. В случае vec_xlx, index является смещением первого байта извлекаемого элемента. В случае vec_xrx, index представляет собой последний байт извлекаемого элемента, измеряемый с правого конца вектора. Иными словами, последний байт извлекаемого элемента находится в позиции (15 - index). Нет требования, чтобы index было кратно размеру элемента вектора. Однако, если размер элемента вектора, добавленный к index, больше 15, содержимое возвращаемого значения не определено.
Следующие встроенные функции доступны для процессоров семейства PowerPC, когда доступна аппаратная десятичная плавающая точка (-mhard-dfp):
long long __builtin_dxex (_Decimal64); long long __builtin_dxexq (_Decimal128); _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); unsigned long long __builtin_unpack_dec128 (_Decimal128, int); _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
Следующие встроенные функции доступны для процессоров семейства PowerPC, когда доступен набор инструкций Vector Scalar (vsx):
unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
unsigned long long);
Далее: Встроенные функции PowerPC AltiVec/VSX, Предыдущее: Встроенные функции picoChip, Наверх: Встроенные функции целевых платформ [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/PowerPC-Built-in-Functions.html