mirror of
				https://github.com/google/cpu_features.git
				synced 2025-11-03 22:40:17 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			79 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_
 |