6.60.14 Встроенные функции LoongArch Base
Эти встроенные функции доступны для LoongArch.
Описание типов данных:
-
imm0_31, константа времени компиляции в диапазоне от 0 до 31; -
imm0_16383, константа времени компиляции в диапазоне от 0 до 16383; -
imm0_32767, константа времени компиляции в диапазоне от 0 до 32767; -
imm_n2048_2047, константа времени компиляции в диапазоне от -2048 до 2047;
Ниже приведены предоставляемые встроенные функции:
unsigned int __builtin_loongarch_movfcsr2gr (imm0_31) void __builtin_loongarch_movgr2fcsr (imm0_31, unsigned int) void __builtin_loongarch_cacop_d (imm0_31, unsigned long int, imm_n2048_2047) unsigned int __builtin_loongarch_cpucfg (unsigned int) void __builtin_loongarch_asrtle_d (long int, long int) void __builtin_loongarch_asrtgt_d (long int, long int) long int __builtin_loongarch_lddir_d (long int, imm0_31) void __builtin_loongarch_ldpte_d (long int, imm0_31) int __builtin_loongarch_crc_w_b_w (char, int) int __builtin_loongarch_crc_w_h_w (short, int) int __builtin_loongarch_crc_w_w_w (int, int) int __builtin_loongarch_crc_w_d_w (long int, int) int __builtin_loongarch_crcc_w_b_w (char, int) int __builtin_loongarch_crcc_w_h_w (short, int) int __builtin_loongarch_crcc_w_w_w (int, int) int __builtin_loongarch_crcc_w_d_w (long int, int) unsigned int __builtin_loongarch_csrrd_w (imm0_16383) unsigned int __builtin_loongarch_csrwr_w (unsigned int, imm0_16383) unsigned int __builtin_loongarch_csrxchg_w (unsigned int, unsigned int, imm0_16383) unsigned long int __builtin_loongarch_csrrd_d (imm0_16383) unsigned long int __builtin_loongarch_csrwr_d (unsigned long int, imm0_16383) unsigned long int __builtin_loongarch_csrxchg_d (unsigned long int, unsigned long int, imm0_16383) unsigned char __builtin_loongarch_iocsrrd_b (unsigned int) unsigned short __builtin_loongarch_iocsrrd_h (unsigned int) unsigned int __builtin_loongarch_iocsrrd_w (unsigned int) unsigned long int __builtin_loongarch_iocsrrd_d (unsigned int) void __builtin_loongarch_iocsrwr_b (unsigned char, unsigned int) void __builtin_loongarch_iocsrwr_h (unsigned short, unsigned int) void __builtin_loongarch_iocsrwr_w (unsigned int, unsigned int) void __builtin_loongarch_iocsrwr_d (unsigned long int, unsigned int) void __builtin_loongarch_dbar (imm0_32767) void __builtin_loongarch_ibar (imm0_32767) void __builtin_loongarch_syscall (imm0_32767) void __builtin_loongarch_break (imm0_32767)
Примечание:Поскольку регистр управления разделен на 32-битный и 64-битный, но инструкция доступа не различается. Поэтому GCC переименовывает инструкции управления при реализации встроенных функций.
В качестве примера рассмотрим инструкцию csrrd, встроенные функции реализуются следующим образом:
__builtin_loongarch_csrrd_w // When reading the 32-bit control register use. __builtin_loongarch_csrrd_d // When reading the 64-bit control register use.
Для удобства использования встроенные функции инкапсулированы, инкапсулированные функции и __drdtime_t, __rdtime_t определены в larchintrin.h. Поэтому, если вы вызываете следующую функцию, вам необходимо включить larchintrin.h.
typedef struct drdtime{
unsigned long dvalue;
unsigned long dtimeid;
} __drdtime_t;
typedef struct rdtime{
unsigned int value;
unsigned int timeid;
} __rdtime_t;
__drdtime_t __rdtime_d (void) __rdtime_t __rdtimel_w (void) __rdtime_t __rdtimeh_w (void) unsigned int __movfcsr2gr (imm0_31) void __movgr2fcsr (imm0_31, unsigned int) void __cacop_d (imm0_31, unsigned long, imm_n2048_2047) unsigned int __cpucfg (unsigned int) void __asrtle_d (long int, long int) void __asrtgt_d (long int, long int) long int __lddir_d (long int, imm0_31) void __ldpte_d (long int, imm0_31) int __crc_w_b_w (char, int) int __crc_w_h_w (short, int) int __crc_w_w_w (int, int) int __crc_w_d_w (long int, int) int __crcc_w_b_w (char, int) int __crcc_w_h_w (short, int) int __crcc_w_w_w (int, int) int __crcc_w_d_w (long int, int) unsigned int __csrrd_w (imm0_16383) unsigned int __csrwr_w (unsigned int, imm0_16383) unsigned int __csrxchg_w (unsigned int, unsigned int, imm0_16383) unsigned long __csrrd_d (imm0_16383) unsigned long __csrwr_d (unsigned long, imm0_16383) unsigned long __csrxchg_d (unsigned long, unsigned long, imm0_16383) unsigned char __iocsrrd_b (unsigned int) unsigned short __iocsrrd_h (unsigned int) unsigned int __iocsrrd_w (unsigned int) unsigned long __iocsrrd_d (unsigned int) void __iocsrwr_b (unsigned char, unsigned int) void __iocsrwr_h (unsigned short, unsigned int) void __iocsrwr_w (unsigned int, unsigned int) void __iocsrwr_d (unsigned long, unsigned int) void __dbar (imm0_32767) void __ibar (imm0_32767) void __syscall (imm0_32767) void __break (imm0_32767)
Возвращает значение, которое в настоящее время установлено в регистре ‘tp’.
void * __builtin_thread_pointer (void)
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/LoongArch-Base-Built_002din-Functions.html