/*
 * SPDX-FileCopyrightText: Sebastiano Barezzi
 * SPDX-License-Identifier: Apache-2.0
 */

package com.xyzshell.andinfo.libs.cpu.models

/**
 * `enum cpuinfo_uarch`
 * CPU微架构枚举
 *
 * Processor microarchitecture
 * 处理器微架构
 *
 * Processors with different microarchitectures often have different instruction
 * performance characteristics, and may have dramatically different pipeline
 * organization.
 * 不同微架构的处理器通常具有不同的指令性能特征，并且可能具有截然不同的流水线组织结构
 */
enum class Uarch(
    val value: UInt,
) {
    /**
     * Microarchitecture is unknown, or the library failed to get
     * information about the microarchitecture from OS
     * 微架构未知，或库无法从操作系统获取微架构信息
     */
    UNKNOWN(0U),

    /**
     * Pentium and Pentium MMX microarchitecture.
     * 奔腾和奔腾MMX微架构
     */
    P5(0x00100100U),

    /**
     * Intel Quark microarchitecture.
     * 英特尔夸克微架构
     */
    QUARK(0x00100101U),

    /**
     * Pentium Pro, Pentium II, and Pentium III.
     * 奔腾Pro、奔腾II和奔腾III
     */
    P6(0x00100200U),

    /**
     * Pentium M.
     * 奔腾M
     */
    DOTHAN(0x00100201U),

    /**
     * Intel Core microarchitecture.
     * 英特尔酷睿微架构
     */
    YONAH(0x00100202U),

    /**
     * Intel Core 2 microarchitecture on 65 nm process.
     * 英特尔酷睿2微架构（65纳米工艺）
     */
    CONROE(0x00100203U),

    /**
     * Intel Core 2 microarchitecture on 45 nm process.
     * 英特尔酷睿2微架构（45纳米工艺）
     */
    PENRYN(0x00100204U),

    /**
     * Intel Nehalem and Westmere microarchitectures (Core i3/i5/i7 1st
     * gen).
     * 英特尔Nehalem和Westmere微架构（酷睿i3/i5/i7第1代）
     */
    NEHALEM(0x00100205U),

    /**
     * Intel Sandy Bridge microarchitecture (Core i3/i5/i7 2nd gen).
     * 英特尔Sandy Bridge微架构（酷睿i3/i5/i7第2代）
     */
    SANDY_BRIDGE(0x00100206U),

    /**
     * Intel Ivy Bridge microarchitecture (Core i3/i5/i7 3rd gen).
     * 英特尔Ivy Bridge微架构（酷睿i3/i5/i7第3代）
     */
    IVY_BRIDGE(0x00100207U),

    /**
     * Intel Haswell microarchitecture (Core i3/i5/i7 4th gen).
     * 英特尔Haswell微架构（酷睿i3/i5/i7第4代）
     */
    HASWELL(0x00100208U),

    /**
     * Intel Broadwell microarchitecture.
     * 英特尔Broadwell微架构（第5代）
     */
    BROADWELL(0x00100209U),

    /**
     * Intel Sky Lake microarchitecture (14 nm, including
     * Kaby/Coffee/Whiskey/Amber/Comet/Cascade/Cooper Lake).
     * 英特尔Sky Lake微架构（14纳米，包括Kaby/Coffee/Whiskey/Amber/Comet/Cascade/Cooper Lake）
     */
    SKY_LAKE(0x0010020AU),

    /**
     * DEPRECATED (Intel Kaby Lake microarchitecture).
     * 已弃用（英特尔Kaby Lake微架构）
     */
    //KABY_LAKE(0x0010020AU),

    /**
     * Intel Palm Cove microarchitecture (10 nm, Cannon Lake).
     * 英特尔Palm Cove微架构（10纳米，Cannon Lake）
     */
    PALM_COVE(0x0010020BU),

    /**
     * Intel Sunny Cove microarchitecture (10 nm, Ice Lake).
     * 英特尔Sunny Cove微架构（10纳米，Ice Lake）
     */
    SUNNY_COVE(0x0010020CU),

    /**
     * Pentium 4 with Willamette, Northwood, or Foster cores.
     * 奔腾4（Willamette、Northwood或Foster核心）
     */
    WILLAMETTE(0x00100300U),

    /**
     * Pentium 4 with Prescott and later cores.
     * 奔腾4（Prescott及更高版本核心）
     */
    PRESCOTT(0x00100301U),

    /**
     * Intel Atom on 45 nm process.
     * 英特尔凌动（45纳米工艺）
     */
    BONNELL(0x00100400U),

    /**
     * Intel Atom on 32 nm process.
     * 英特尔凌动（32纳米工艺）
     */
    SALTWELL(0x00100401U),

    /**
     * Intel Silvermont microarchitecture (22 nm out-of-order Atom).
     * 英特尔Silvermont微架构（22纳米乱序执行凌动）
     */
    SILVERMOUNT(0x00100402U),

    /**
     * Intel Airmont microarchitecture (14 nm out-of-order Atom).
     * 英特尔Airmont微架构（14纳米乱序执行凌动）
     */
    AIRMONT(0x00100403U),

    /**
     * Intel Goldmont microarchitecture (Denverton, Apollo Lake).
     * 英特尔Goldmont微架构（Denverton、Apollo Lake）
     */
    GOLDMONT(0x00100404U),

    /**
     * Intel Goldmont Plus microarchitecture (Gemini Lake).
     * 英特尔Goldmont Plus微架构（Gemini Lake）
     */
    GOLDMONT_PLUS(0x00100405U),

    /**
     * Intel Knights Ferry HPC boards.
     * 英特尔Knights Ferry高性能计算板
     */
    KNIGHTS_FERRY(0x00100500U),

    /**
     * Intel Knights Corner HPC boards (aka Xeon Phi).
     * 英特尔Knights Corner高性能计算板（即至强融核）
     */
    KNIGHTS_CORNER(0x00100501U),

    /**
     * Intel Knights Landing microarchitecture (second-gen MIC).
     * 英特尔Knights Landing微架构（第二代MIC）
     */
    KNIGHTS_LANDING(0x00100502U),

    /**
     * Intel Knights Hill microarchitecture (third-gen MIC).
     * 英特尔Knights Hill微架构（第三代MIC）
     */
    KNIGHTS_HILL(0x00100503U),

    /**
     * Intel Knights Mill Xeon Phi.
     * 英特尔Knights Mill至强融核
     */
    KNIGHTS_MILL(0x00100504U),

    /**
     * Intel/Marvell XScale series.
     * 英特尔/美满XScale系列
     */
    XSCALE(0x00100600U),

    /**
     * AMD K5.
     * AMD K5微架构
     */
    K5(0x00200100U),

    /**
     * AMD K6 and alike.
     * AMD K6及类似微架构
     */
    K6(0x00200101U),

    /**
     * AMD Athlon and Duron.
     * AMD速龙和毒龙
     */
    K7(0x00200102U),

    /**
     * AMD Athlon 64, Opteron 64.
     * AMD速龙64、皓龙64
     */
    K8(0x00200103U),

    /**
     * AMD Family 10h (Barcelona, Istambul, Magny-Cours).
     * AMD Family 10h（Barcelona、Istambul、Magny-Cours）
     */
    K10(0x00200104U),

    /**
     * AMD Bulldozer microarchitecture
     * Zambezi FX-series CPUs, Zurich, Valencia and Interlagos Opteron CPUs.
     * AMD推土机微架构
     * Zambezi FX系列CPU、Zurich、Valencia和Interlagos皓龙CPU
     */
    BULLDOZER(0x00200105U),

    /**
     * AMD Piledriver microarchitecture
     * Vishera FX-series CPUs, Trinity and Richland APUs, Delhi, Seoul, Abu
     * Dhabi Opteron CPUs.
     * AMD打桩机微架构
     * Vishera FX系列CPU、Trinity和Richland APU、Delhi、Seoul、Abu Dhabi皓龙CPU
     */
    PILEDRIVER(0x00200106U),

    /**
     * AMD Steamroller microarchitecture (Kaveri APUs).
     * AMD压路机微架构（Kaveri APU）
     */
    STEAMROLLER(0x00200107U),

    /**
     * AMD Excavator microarchitecture (Carizzo APUs).
     * AMD挖掘机微架构（Carizzo APU）
     */
    EXCAVATOR(0x00200108U),

    /**
     * AMD Zen microarchitecture (12/14 nm Ryzen and EPYC CPUs).
     * AMD Zen微架构（12/14纳米锐龙和霄龙CPU）
     */
    ZEN(0x00200109U),

    /**
     * AMD Zen 2 microarchitecture (7 nm Ryzen and EPYC CPUs).
     * AMD Zen 2微架构（7纳米锐龙和霄龙CPU）
     */
    ZEN2(0x0020010AU),

    /**
     * AMD Zen 3 microarchitecture.
     * AMD Zen 3微架构
     */
    ZEN3(0x0020010BU),

    /**
     * AMD Zen 4 microarchitecture.
     * AMD Zen 4微架构
     */
    ZEN4(0x0020010CU),

    /**
     * NSC Geode and AMD Geode GX and LX.
     * NSC Geode和AMD Geode GX和LX
     */
    GEODE(0x00200200U),

    /**
     * AMD Bobcat mobile microarchitecture.
     * AMD山猫移动微架构
     */
    BOBCAT(0x00200201U),

    /**
     * AMD Jaguar mobile microarchitecture.
     * AMD美洲豹移动微架构
     */
    JAGUAR(0x00200202U),

    /**
     * AMD Puma mobile microarchitecture.
     * AMD美洲狮移动微架构
     */
    PUMA(0x00200203U),

    /**
     * ARM7 series.
     * ARM7系列
     */
    ARM7(0x00300100U),

    /**
     * ARM9 series.
     * ARM9系列
     */
    ARM9(0x00300101U),

    /**
     * ARM 1136, ARM 1156, ARM 1176, or ARM 11MPCore.
     * ARM 1136、ARM 1156、ARM 1176或ARM 11MPCore
     */
    ARM11(0x00300102U),

    /**
     * ARM Cortex-A5.
     * ARM Cortex-A5
     */
    CORTEX_A5(0x00300205U),

    /**
     * ARM Cortex-A7.
     * ARM Cortex-A7
     */
    CORTEX_A7(0x00300207U),

    /**
     * ARM Cortex-A8.
     * ARM Cortex-A8
     */
    CORTEX_A8(0x00300208U),

    /**
     * ARM Cortex-A9.
     * ARM Cortex-A9
     */
    CORTEX_A9(0x00300209U),

    /**
     * ARM Cortex-A12.
     * ARM Cortex-A12
     */
    CORTEX_A12(0x00300212U),

    /**
     * ARM Cortex-A15.
     * ARM Cortex-A15
     */
    CORTEX_A15(0x00300215U),

    /**
     * ARM Cortex-A17.
     * ARM Cortex-A17
     */
    CORTEX_A17(0x00300217U),

    /**
     * ARM Cortex-A32.
     * ARM Cortex-A32
     */
    CORTEX_A32(0x00300332U),

    /**
     * ARM Cortex-A35.
     * ARM Cortex-A35
     */
    CORTEX_A35(0x00300335U),

    /**
     * ARM Cortex-A53.
     * ARM Cortex-A53
     */
    CORTEX_A53(0x00300353U),

    /**
     * ARM Cortex-A55 revision 0 (restricted dual-issue capabilities
     * compared to revision 1+).
     * ARM Cortex-A55修订版0（相比修订版1+，双发射能力受限）
     */
    CORTEX_A55R0(0x00300354U),

    /**
     * ARM Cortex-A55.
     * ARM Cortex-A55
     */
    CORTEX_A55(0x00300355U),

    /**
     * ARM Cortex-A57.
     * ARM Cortex-A57
     */
    CORTEX_A57(0x00300357U),

    /**
     * ARM Cortex-A65.
     * ARM Cortex-A65
     */
    CORTEX_A65(0x00300365U),

    /**
     * ARM Cortex-A72.
     * ARM Cortex-A72
     */
    CORTEX_A72(0x00300372U),

    /**
     * ARM Cortex-A73.
     * ARM Cortex-A73
     */
    CORTEX_A73(0x00300373U),

    /**
     * ARM Cortex-A75.
     * ARM Cortex-A75
     */
    CORTEX_A75(0x00300375U),

    /**
     * ARM Cortex-A76.
     * ARM Cortex-A76
     */
    CORTEX_A76(0x00300376U),

    /**
     * ARM Cortex-A77.
     * ARM Cortex-A77
     */
    CORTEX_A77(0x00300377U),

    /**
     * ARM Cortex-A78.
     * ARM Cortex-A78
     */
    CORTEX_A78(0x00300378U),

    /**
     * ARM Neoverse N1.
     * ARM Neoverse N1（服务器级）
     */
    NEOVERSE_N1(0x00300400U),

    /**
     * ARM Neoverse E1.
     * ARM Neoverse E1（边缘计算级）
     */
    NEOVERSE_E1(0x00300401U),

    /**
     * ARM Neoverse V1.
     * ARM Neoverse V1（高性能级）
     */
    NEOVERSE_V1(0x00300402U),

    /**
     * ARM Neoverse N2.
     * ARM Neoverse N2
     */
    NEOVERSE_N2(0x00300403U),

    /**
     * ARM Neoverse V2.
     * ARM Neoverse V2
     */
    NEOVERSE_V2(0x00300404U),

    /**
     * ARM Cortex-X1.
     * ARM Cortex-X1（超大核）
     */
    CORTEX_X1(0x00300501U),

    /**
     * ARM Cortex-X2.
     * ARM Cortex-X2（超大核）
     */
    CORTEX_X2(0x00300502U),

    /**
     * ARM Cortex-X3.
     * ARM Cortex-X3（超大核）
     */
    CORTEX_X3(0x00300503U),

    /**
     * ARM Cortex-X4.
     * ARM Cortex-X4（超大核）
     */
    CORTEX_X4(0x00300504U),

    /**
     * ARM Cortex-A510.
     * ARM Cortex-A510（小核）
     */
    CORTEX_A510(0x00300551U),

    /**
     * ARM Cortex-A520.
     * ARM Cortex-A520（小核）
     */
    CORTEX_A520(0x00300552U),

    /**
     * ARM Cortex-A710.
     * ARM Cortex-A710（大核）
     */
    CORTEX_A710(0x00300571U),

    /**
     * ARM Cortex-A715.
     * ARM Cortex-A715（大核）
     */
    CORTEX_A715(0x00300572U),

    /**
     * ARM Cortex-A720.
     * ARM Cortex-A720（大核）
     */
    CORTEX_A720(0x00300573U),

    /**
     * Qualcomm Scorpion.
     * 高通Scorpion（天蝎座）
     */
    SCORPION(0x00400100U),

    /**
     * Qualcomm Krait.
     * 高通Krait（银环蛇）
     */
    KRAIT(0x00400101U),

    /**
     * Qualcomm Kryo.
     * 高通Kryo（骁龙820起）
     */
    KRYO(0x00400102U),

    /**
     * Qualcomm Falkor.
     * 高通Falkor（服务器级）
     */
    FALKOR(0x00400103U),

    /**
     * Qualcomm Saphira.
     * 高通Saphira（服务器级）
     */
    SAPHIRA(0x00400104U),

    /**
     * Nvidia Denver.
     * 英伟达Denver（第1代）
     */
    DENVER(0x00500100U),

    /**
     * Nvidia Denver 2.
     * 英伟达Denver 2（第2代）
     */
    DENVER2(0x00500101U),

    /**
     * Nvidia Carmel.
     * 英伟达Carmel
     */
    CARMEL(0x00500102U),

    /**
     * Samsung Exynos M1 (Exynos 8890 big cores).
     * 三星Exynos M1（Exynos 8890大核）
     */
    EXYNOS_M1(0x00600100U),

    /**
     * Samsung Exynos M2 (Exynos 8895 big cores).
     * 三星Exynos M2（Exynos 8895大核）
     */
    EXYNOS_M2(0x00600101U),

    /**
     * Samsung Exynos M3 (Exynos 9810 big cores).
     * 三星Exynos M3（Exynos 9810大核）
     */
    EXYNOS_M3(0x00600102U),

    /**
     * Samsung Exynos M4 (Exynos 9820 big cores).
     * 三星Exynos M4（Exynos 9820大核）
     */
    EXYNOS_M4(0x00600103U),

    /**
     * Samsung Exynos M5 (Exynos 9830 big cores).
     * 三星Exynos M5（Exynos 9830大核）
     */
    EXYNOS_M5(0x00600104U),

    /**
     * Deprecated synonym for Cortex-A76
     * Cortex-A76的已弃用同义词
     */
    //CORTEX_A76AE(0x00300376U),

    /**
     * Deprecated names for Exynos.
     * Exynos的已弃用名称
     */
    //MONGOOSE_M1(0x00600100U),
    //MONGOOSE_M2(0x00600101U),
    //MEERKAT_M3(0x00600102U),
    //MEERKAT_M4(0x00600103U),

    /**
     * Apple A6 and A6X processors.
     * 苹果A6和A6X处理器
     */
    SWIFT(0x00700100U),

    /**
     * Apple A7 processor.
     * 苹果A7处理器
     */
    CYCLONE(0x00700101U),

    /**
     * Apple A8 and A8X processor.
     * 苹果A8和A8X处理器
     */
    TYPHOON(0x00700102U),

    /**
     * Apple A9 and A9X processor.
     * 苹果A9和A9X处理器
     */
    TWISTER(0x00700103U),

    /**
     * Apple A10 and A10X processor.
     * 苹果A10和A10X处理器
     */
    HURRICANE(0x00700104U),

    /**
     * Apple A11 processor (big cores).
     * 苹果A11处理器（大核）
     */
    MONSOON(0x00700105U),

    /**
     * Apple A11 processor (little cores).
     * 苹果A11处理器（小核）
     */
    MISTRAL(0x00700106U),

    /**
     * Apple A12 processor (big cores).
     * 苹果A12处理器（大核）
     */
    VORTEX(0x00700107U),

    /**
     * Apple A12 processor (little cores).
     * 苹果A12处理器（小核）
     */
    TEMPEST(0x00700108U),

    /**
     * Apple A13 processor (big cores).
     * 苹果A13处理器（大核）
     */
    LIGHTNING(0x00700109U),

    /**
     * Apple A13 processor (little cores).
     * 苹果A13处理器（小核）
     */
    THUNDER(0x0070010AU),

    /**
     * Apple A14 / M1 processor (big cores).
     * 苹果A14 / M1处理器（大核）
     */
    FIRESTORM(0x0070010BU),

    /**
     * Apple A14 / M1 processor (little cores).
     * 苹果A14 / M1处理器（小核）
     */
    ICESTORM(0x0070010CU),

    /**
     * Apple A15 / M2 processor (big cores).
     * 苹果A15 / M2处理器（大核）
     */
    AVALANCHE(0x0070010DU),

    /**
     * Apple A15 / M2 processor (little cores).
     * 苹果A15 / M2处理器（小核）
     */
    BLIZZARD(0x0070010EU),

    /**
     * Cavium ThunderX.
     * Cavium ThunderX（服务器级ARM）
     */
    THUNDERX(0x00800100U),

    /**
     * Cavium ThunderX2 (originally Broadcom Vulkan).
     * Cavium ThunderX2（原博通Vulkan）
     */
    THUNDERX2(0x00800200U),

    /**
     * Marvell PJ4.
     * 美满PJ4
     */
    PJ4(0x00900100U),

    /**
     * Broadcom Brahma B15.
     * 博通Brahma B15
     */
    BRAHMA_B15(0x00A00100U),

    /**
     * Broadcom Brahma B53.
     * 博通Brahma B53
     */
    BRAHMA_B53(0x00A00101U),

    /**
     * Applied Micro X-Gene.
     * 应用微电路X-Gene（服务器级ARM）
     */
    XGENE(0x00B00100U),

    /**
     * Hygon Dhyana (a modification of AMD Zen for Chinese market).
     * 海光Dhyana（AMD Zen的中国市场修改版）
     */
    DHYANA(0x01000100U),

    /**
     * HiSilicon TaiShan v110 (Huawei Kunpeng 920 series processors).
     * 海思泰山v110（华为鲲鹏920系列处理器）
     */
    TAISHAN_V110(0x00C00100U);

    companion object {
        @JvmStatic
        fun fromCpuInfo(value: Int) = value.toUInt().let {
            entries.firstOrNull { uarch -> uarch.value == it } ?: UNKNOWN
        }
    }
}
