aboutsummaryrefslogtreecommitdiff
path: root/include/cpuinfo_loongarch.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cpuinfo_loongarch.h')
-rw-r--r--include/cpuinfo_loongarch.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/include/cpuinfo_loongarch.h b/include/cpuinfo_loongarch.h
new file mode 100644
index 0000000..d166223
--- /dev/null
+++ b/include/cpuinfo_loongarch.h
@@ -0,0 +1,77 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef CPU_FEATURES_INCLUDE_CPUINFO_LOONGARCH_H_
+#define CPU_FEATURES_INCLUDE_CPUINFO_LOONGARCH_H_
+
+#include "cpu_features_cache_info.h"
+#include "cpu_features_macros.h"
+
+#if !defined(CPU_FEATURES_ARCH_LOONGARCH)
+#error "Including cpuinfo_loongarch.h from a non-loongarch target."
+#endif
+
+CPU_FEATURES_START_CPP_NAMESPACE
+
+typedef struct {
+ // Base
+ int CPUCFG : 1; // Instruction for Identify CPU Features
+
+ // Extension
+ int LAM : 1; // Extension for Atomic Memory Access Instructions
+ int UAL : 1; // Extension for Non-Aligned Memory Access
+ int FPU : 1; // Extension for Basic Floating-Point Instructions
+ int LSX : 1; // Extension for Loongson SIMD eXtension
+ int LASX : 1; // Extension for Loongson Advanced SIMD eXtension
+ int CRC32 : 1; // Extension for Cyclic Redundancy Check Instructions
+ int COMPLEX : 1; // Extension for Complex Vector Operation Instructions
+ int CRYPTO : 1; // Extension for Encryption And Decryption Vector Instructions
+ int LVZ : 1; // Extension for Virtualization
+ int LBT_X86 : 1; // Extension for X86 Binary Translation Extension
+ int LBT_ARM : 1; // Extension for ARM Binary Translation Extension
+ int LBT_MIPS : 1; // Extension for MIPS Binary Translation Extension
+ int PTW : 1; // Extension for Page Table Walker
+
+} LoongArchFeatures;
+
+typedef struct {
+ LoongArchFeatures features;
+} LoongArchInfo;
+
+typedef enum {
+ LOONGARCH_CPUCFG,
+ LOONGARCH_LAM,
+ LOONGARCH_UAL,
+ LOONGARCH_FPU,
+ LOONGARCH_LSX,
+ LOONGARCH_LASX,
+ LOONGARCH_CRC32,
+ LOONGARCH_COMPLEX,
+ LOONGARCH_CRYPTO,
+ LOONGARCH_LVZ,
+ LOONGARCH_LBT_X86,
+ LOONGARCH_LBT_ARM,
+ LOONGARCH_LBT_MIPS,
+ LOONGARCH_PTW,
+ LOONGARCH_LAST_,
+} LoongArchFeaturesEnum;
+
+LoongArchInfo GetLoongArchInfo(void);
+int GetLoongArchFeaturesEnumValue(const LoongArchFeatures* features,
+ LoongArchFeaturesEnum value);
+const char* GetLoongArchFeaturesEnumName(LoongArchFeaturesEnum);
+
+CPU_FEATURES_END_CPP_NAMESPACE
+
+#endif // CPU_FEATURES_INCLUDE_CPUINFO_LOONGARCH_H_