1*0fca6ea1SDimitry Andric//===- AArch64CPUFeatures.inc - AArch64 CPU Features enum -------*- C++ -*-===// 2*0fca6ea1SDimitry Andric// 3*0fca6ea1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0fca6ea1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*0fca6ea1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0fca6ea1SDimitry Andric// 7*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 8*0fca6ea1SDimitry Andric// 9*0fca6ea1SDimitry Andric// This file defines the CPUFeatures enum for AArch64 to facilitate better 10*0fca6ea1SDimitry Andric// testing of this code between LLVM and compiler-rt, primarily that the files 11*0fca6ea1SDimitry Andric// are an exact match. 12*0fca6ea1SDimitry Andric// 13*0fca6ea1SDimitry Andric// This file has two identical copies. The primary copy lives in LLVM and 14*0fca6ea1SDimitry Andric// the other one sits in compiler-rt/lib/builtins/cpu_model directory. To make 15*0fca6ea1SDimitry Andric// changes in this file, first modify the primary copy and copy it over to 16*0fca6ea1SDimitry Andric// compiler-rt. compiler-rt tests will fail if the two files are not synced up. 17*0fca6ea1SDimitry Andric// 18*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 19*0fca6ea1SDimitry Andric 20*0fca6ea1SDimitry Andric#ifndef AARCH64_CPU_FEATURS_INC_H 21*0fca6ea1SDimitry Andric#define AARCH64_CPU_FEATURS_INC_H 22*0fca6ea1SDimitry Andric 23*0fca6ea1SDimitry Andric// Function Multi Versioning CPU features. 24*0fca6ea1SDimitry Andricenum CPUFeatures { 25*0fca6ea1SDimitry Andric FEAT_RNG, 26*0fca6ea1SDimitry Andric FEAT_FLAGM, 27*0fca6ea1SDimitry Andric FEAT_FLAGM2, 28*0fca6ea1SDimitry Andric FEAT_FP16FML, 29*0fca6ea1SDimitry Andric FEAT_DOTPROD, 30*0fca6ea1SDimitry Andric FEAT_SM4, 31*0fca6ea1SDimitry Andric FEAT_RDM, 32*0fca6ea1SDimitry Andric FEAT_LSE, 33*0fca6ea1SDimitry Andric FEAT_FP, 34*0fca6ea1SDimitry Andric FEAT_SIMD, 35*0fca6ea1SDimitry Andric FEAT_CRC, 36*0fca6ea1SDimitry Andric FEAT_SHA1, 37*0fca6ea1SDimitry Andric FEAT_SHA2, 38*0fca6ea1SDimitry Andric FEAT_SHA3, 39*0fca6ea1SDimitry Andric FEAT_AES, 40*0fca6ea1SDimitry Andric FEAT_PMULL, 41*0fca6ea1SDimitry Andric FEAT_FP16, 42*0fca6ea1SDimitry Andric FEAT_DIT, 43*0fca6ea1SDimitry Andric FEAT_DPB, 44*0fca6ea1SDimitry Andric FEAT_DPB2, 45*0fca6ea1SDimitry Andric FEAT_JSCVT, 46*0fca6ea1SDimitry Andric FEAT_FCMA, 47*0fca6ea1SDimitry Andric FEAT_RCPC, 48*0fca6ea1SDimitry Andric FEAT_RCPC2, 49*0fca6ea1SDimitry Andric FEAT_FRINTTS, 50*0fca6ea1SDimitry Andric FEAT_DGH, 51*0fca6ea1SDimitry Andric FEAT_I8MM, 52*0fca6ea1SDimitry Andric FEAT_BF16, 53*0fca6ea1SDimitry Andric FEAT_EBF16, 54*0fca6ea1SDimitry Andric FEAT_RPRES, 55*0fca6ea1SDimitry Andric FEAT_SVE, 56*0fca6ea1SDimitry Andric FEAT_SVE_BF16, 57*0fca6ea1SDimitry Andric FEAT_SVE_EBF16, 58*0fca6ea1SDimitry Andric FEAT_SVE_I8MM, 59*0fca6ea1SDimitry Andric FEAT_SVE_F32MM, 60*0fca6ea1SDimitry Andric FEAT_SVE_F64MM, 61*0fca6ea1SDimitry Andric FEAT_SVE2, 62*0fca6ea1SDimitry Andric FEAT_SVE_AES, 63*0fca6ea1SDimitry Andric FEAT_SVE_PMULL128, 64*0fca6ea1SDimitry Andric FEAT_SVE_BITPERM, 65*0fca6ea1SDimitry Andric FEAT_SVE_SHA3, 66*0fca6ea1SDimitry Andric FEAT_SVE_SM4, 67*0fca6ea1SDimitry Andric FEAT_SME, 68*0fca6ea1SDimitry Andric FEAT_MEMTAG, 69*0fca6ea1SDimitry Andric FEAT_MEMTAG2, 70*0fca6ea1SDimitry Andric FEAT_MEMTAG3, 71*0fca6ea1SDimitry Andric FEAT_SB, 72*0fca6ea1SDimitry Andric FEAT_PREDRES, 73*0fca6ea1SDimitry Andric FEAT_SSBS, 74*0fca6ea1SDimitry Andric FEAT_SSBS2, 75*0fca6ea1SDimitry Andric FEAT_BTI, 76*0fca6ea1SDimitry Andric FEAT_LS64, 77*0fca6ea1SDimitry Andric FEAT_LS64_V, 78*0fca6ea1SDimitry Andric FEAT_LS64_ACCDATA, 79*0fca6ea1SDimitry Andric FEAT_WFXT, 80*0fca6ea1SDimitry Andric FEAT_SME_F64, 81*0fca6ea1SDimitry Andric FEAT_SME_I64, 82*0fca6ea1SDimitry Andric FEAT_SME2, 83*0fca6ea1SDimitry Andric FEAT_RCPC3, 84*0fca6ea1SDimitry Andric FEAT_MOPS, 85*0fca6ea1SDimitry Andric FEAT_MAX, 86*0fca6ea1SDimitry Andric FEAT_EXT = 62, // Reserved to indicate presence of additional features field 87*0fca6ea1SDimitry Andric // in __aarch64_cpu_features 88*0fca6ea1SDimitry Andric FEAT_INIT // Used as flag of features initialization completion 89*0fca6ea1SDimitry Andric}; 90*0fca6ea1SDimitry Andric 91*0fca6ea1SDimitry Andric#endif 92