From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- .../gcc~13/loongarch-base-built-in-functions.html | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 devdocs/gcc~13/loongarch-base-built-in-functions.html (limited to 'devdocs/gcc~13/loongarch-base-built-in-functions.html') diff --git a/devdocs/gcc~13/loongarch-base-built-in-functions.html b/devdocs/gcc~13/loongarch-base-built-in-functions.html new file mode 100644 index 00000000..bed8728f --- /dev/null +++ b/devdocs/gcc~13/loongarch-base-built-in-functions.html @@ -0,0 +1,109 @@ +

6.60.14 LoongArch Base Built-in Functions ΒΆ

These built-in functions are available for LoongArch.

Data Type Description:

+

The intrinsics provided are listed below:

+
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)
+

Note:Since the control register is divided into 32-bit and 64-bit, but the access instruction is not distinguished. So GCC renames the control instructions when implementing intrinsics.

Take the csrrd instruction as an example, built-in functions are implemented as follows:

+
__builtin_loongarch_csrrd_w  // When reading the 32-bit control register use.
+__builtin_loongarch_csrrd_d  // When reading the 64-bit control register use.
+

For the convenience of use, the built-in functions are encapsulated, the encapsulated functions and __drdtime_t, __rdtime_t are defined in the larchintrin.h. So if you call the following function you need to include 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)
+
+

+ © Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
+ https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/LoongArch-Base-Built-in-Functions.html +

+
-- cgit v1.2.3