78 lines
2.6 KiB
C
78 lines
2.6 KiB
C
// 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_
|