Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.0)

project(CpuFeatures VERSION 0.1.0)

set(CMAKE_C_STANDARD 99)
Comment thread
gchatelet marked this conversation as resolved.

# Default Build Type to be Release
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
Expand Down
54 changes: 54 additions & 0 deletions include/cpu_features_cache_info.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright 2017 Google Inc.
//
// 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_COMMON_H_
#define CPU_FEATURES_INCLUDE_CPUINFO_COMMON_H_

#include "cpu_features_macros.h"

CPU_FEATURES_START_CPP_NAMESPACE

typedef enum {
CPU_FEATURE_CACHE_NULL = 0,
CPU_FEATURE_CACHE_DATA = 1,
CPU_FEATURE_CACHE_INSTRUCTION = 2,
CPU_FEATURE_CACHE_UNIFIED = 3,
CPU_FEATURE_CACHE_TLB = 4,
CPU_FEATURE_CACHE_DTLB = 5,
CPU_FEATURE_CACHE_STLB = 6,
CPU_FEATURE_CACHE_PREFETCH = 7
} CacheType;

typedef struct {
int level;
CacheType cache_type;
int cache_size; // Cache size in bytes
int ways; // Associativity, 0 undefined, 0xFF fully associative
int line_size; // Cache line size in bytes
int tlb_entries; // number of entries for TLB
int partitioning; // number of lines per sector
} CacheLevelInfo;

// Increase this value if more cache levels are needed.
#ifndef CPU_FEATURES_MAX_CACHE_LEVEL
#define CPU_FEATURES_MAX_CACHE_LEVEL 10
#endif
typedef struct {
int size;
CacheLevelInfo levels[CPU_FEATURES_MAX_CACHE_LEVEL];
} CacheInfo;

CPU_FEATURES_END_CPP_NAMESPACE

#endif // CPU_FEATURES_INCLUDE_CPUINFO_COMMON_H_
1 change: 1 addition & 0 deletions include/cpuinfo_aarch64.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define CPU_FEATURES_INCLUDE_CPUINFO_AARCH64_H_

#include "cpu_features_macros.h"
#include "cpu_features_cache_info.h"

CPU_FEATURES_START_CPP_NAMESPACE

Expand Down
1 change: 1 addition & 0 deletions include/cpuinfo_arm.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

#include <stdint.h> // uint32_t
#include "cpu_features_macros.h"
#include "cpu_features_cache_info.h"

CPU_FEATURES_START_CPP_NAMESPACE

Expand Down
1 change: 1 addition & 0 deletions include/cpuinfo_mips.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define CPU_FEATURES_INCLUDE_CPUINFO_MIPS_H_

#include "cpu_features_macros.h"
#include "cpu_features_cache_info.h"

CPU_FEATURES_START_CPP_NAMESPACE

Expand Down
1 change: 1 addition & 0 deletions include/cpuinfo_ppc.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define CPU_FEATURES_INCLUDE_CPUINFO_PPC_H_

#include "cpu_features_macros.h"
#include "cpu_features_cache_info.h"
#include "internal/hwcaps.h"

CPU_FEATURES_START_CPP_NAMESPACE
Expand Down
7 changes: 7 additions & 0 deletions include/cpuinfo_x86.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#ifndef CPU_FEATURES_INCLUDE_CPUINFO_X86_H_
#define CPU_FEATURES_INCLUDE_CPUINFO_X86_H_

#include "cpu_features_cache_info.h"
#include "cpu_features_macros.h"

CPU_FEATURES_START_CPP_NAMESPACE
Expand Down Expand Up @@ -93,6 +94,12 @@ typedef struct {
// This function is guaranteed to be malloc, memset and memcpy free.
X86Info GetX86Info(void);

// Returns cache hierarchy informations.
// Can call cpuid multiple times.
// Only works on Intel CPU at the moment.
// This function is guaranteed to be malloc, memset and memcpy free.
CacheInfo GetX86CacheInfo(void);

typedef enum {
X86_UNKNOWN,
INTEL_CORE, // CORE
Expand Down
Loading