代码之家  ›  专栏  ›  技术社区  ›  jww

通过getauxval检测核心加密中的Power8?

  •  3
  • jww  · 技术社区  · 7 年前

    in-core crypto getauxval . 该用例是为具有“最小”功能的机器构建发行版,我们需要在运行时交换更快的函数。

    hwcaps.h PPC_FEATURE2_ARCH_2_07

    我不清楚的是,核心加密中的Power8是可选的,就像ARMv8下的ARM加密一样。我找不到明确说明要求的文件,我也没有会员资格 OpenPower 访问ISA文档。(另一种可能性是,虽然有说明,但我在文件中没有提到)。

    可以使用吗

    也许更一般地说,我们如何确定Power6、Power7和Power8运行时环境?


    auxv.h HWCAP。h

    $ cat /usr/include/bits/hwcap.h
    ...
    
    /* The bit numbers must match those in the kernel's asm/cputable.h.  */
    
    /* Feature definitions in AT_HWCAP.  */
    #define PPC_FEATURE_32              0x80000000 /* 32-bit mode. */
    #define PPC_FEATURE_64              0x40000000 /* 64-bit mode. */
    #define PPC_FEATURE_601_INSTR       0x20000000 /* 601 chip, Old POWER ISA.  */
    #define PPC_FEATURE_HAS_ALTIVEC     0x10000000 /* SIMD/Vector Unit.  */
    #define PPC_FEATURE_HAS_FPU         0x08000000 /* Floating Point Unit.  */
    #define PPC_FEATURE_HAS_MMU         0x04000000 /* Memory Management Unit.  */
    #define PPC_FEATURE_HAS_4xxMAC      0x02000000 /* 4xx Multiply Accumulator.  */
    #define PPC_FEATURE_UNIFIED_CACHE   0x01000000 /* Unified I/D cache.  */
    #define PPC_FEATURE_HAS_SPE         0x00800000 /* Signal Processing ext.  */
    #define PPC_FEATURE_HAS_EFP_SINGLE  0x00400000 /* SPE Float.  */
    #define PPC_FEATURE_HAS_EFP_DOUBLE  0x00200000 /* SPE Double.  */
    #define PPC_FEATURE_NO_TB           0x00100000 /* 601/403gx have no timebase */
    #define PPC_FEATURE_POWER4          0x00080000 /* POWER4 ISA 2.00 */
    #define PPC_FEATURE_POWER5          0x00040000 /* POWER5 ISA 2.02 */
    #define PPC_FEATURE_POWER5_PLUS     0x00020000 /* POWER5+ ISA 2.03 */
    #define PPC_FEATURE_CELL_BE         0x00010000 /* CELL Broadband Engine */
    #define PPC_FEATURE_BOOKE           0x00008000 /* ISA Category Embedded */
    #define PPC_FEATURE_SMT             0x00004000 /* Simultaneous
                                                      Multi-Threading */
    #define PPC_FEATURE_ICACHE_SNOOP    0x00002000
    #define PPC_FEATURE_ARCH_2_05       0x00001000 /* ISA 2.05 */
    #define PPC_FEATURE_PA6T            0x00000800 /* PA Semi 6T Core */
    #define PPC_FEATURE_HAS_DFP         0x00000400 /* Decimal FP Unit */
    #define PPC_FEATURE_POWER6_EXT      0x00000200 /* P6 + mffgpr/mftgpr */
    #define PPC_FEATURE_ARCH_2_06       0x00000100 /* ISA 2.06 */
    #define PPC_FEATURE_HAS_VSX         0x00000080 /* P7 Vector Extension.  */
    #define PPC_FEATURE_PSERIES_PERFMON_COMPAT  0x00000040
    #define PPC_FEATURE_TRUE_LE         0x00000002
    #define PPC_FEATURE_PPC_LE          0x00000001
    
    /* Feature definitions in AT_HWCAP2.  */
    #define PPC_FEATURE2_ARCH_2_07     0x80000000 /* ISA 2.07 */
    #define PPC_FEATURE2_HAS_HTM       0x40000000 /* Hardware Transactional
                                                     Memory */
    #define PPC_FEATURE2_HAS_DSCR      0x20000000 /* Data Stream Control
                                                     Register */
    #define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
    #define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
    #define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Jeremy Kerr    7 年前

    我会这么说 getauxval() 这是最好的方法;这个 HWCAP & HWCAP2 PPC_FEATURE2_VEC_CRYPTO ,这表明存在向量加密指令,这听起来像是您需要的。

    附带说明:您可能不想检测处理器 ,但处理器 特征 VEC_CRYPTO 直接,而不是试图检查POWER8,并假设这意味着加密功能)。

    HWCAP 价值观以POWER8为例:

    #define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
                     PPC_FEATURE2_HTM_COMP | \
                     PPC_FEATURE2_HTM_NOSC_COMP | \
                     PPC_FEATURE2_DSCR | \
                     PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
                     PPC_FEATURE2_VEC_CRYPTO)
    

    arch/powerpc/include/asm/cputable.h

    最后,我很确定你不需要成为OpenPOWER基金会的成员就可以下载ISA(最新版本是3.0B)-你只需要在网站上有一个帐户。

    推荐文章