Skip to content

Add PF_ARM_V82_FHM and PF_ARM_V83_FCMA to PROCESSOR_FEATURE_ID / IsProcessorFeaturePresent #2250

@lilith

Description

@lilith

Request

Please add two new PF_ARM_* constants to the IsProcessorFeaturePresent API surface and the PROCESSOR_FEATURE_ID metadata enum:

  • PF_ARM_V82_FHM — FEAT_FHM, FP16 Fused Multiply Add (FMLAL/FMLSL), ARMv8.4 mandatory
  • PF_ARM_V83_FCMA — FEAT_FCMA, Floating-point Complex Multiply Add (FCMLA/FCADD), ARMv8.3 mandatory

Why these two specifically

Both are mandatory on every Windows-on-ARM CPU shipped to date (Microsoft SQ1/SQ2/SQ3, Snapdragon 8cx Gen 1/2/3, Snapdragon X Elite/Plus). There is no Windows ARM64 device in the field that lacks them, yet user-mode code currently has no Win32 way to confirm their presence — every other feature at comparable architecture level is now exposed.

The recent expansion in MicrosoftDocs/sdk-api#2140 (Dec 2025) added 30+ `PF_ARM_*` constants spanning SVE, SVE2, SME, SME2, SHA3, SHA512, `PF_ARM_V82_FP16`, `PF_ARM_V82_I8MM`, `PF_ARM_V86_BF16`, etc. FHM and FCMA were the conspicuous omissions in an otherwise thorough sweep.

Architectural inference doesn't fill the gap

Unlike FEAT_RDM — which can be inferred from FEAT_DotProd or FEAT_LSE via the ARMv8.1 AdvSIMD rule (Arm doc 109697, "The Armv8.1 architecture extension") and is what .NET 10 ships in dotnet/runtime#109493 — there is no equivalent direct architectural implication for FHM or FCMA from any IPFP-visible feature. The closest provable chain (via JSCVT or LRCPC pinning the v8.3-A floor) reaches FCMA but never FHM. Without these two constants, user-mode code on Windows ARM64 must fall back to reading `HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\CP ` registry values — workable, but registry access is not always available to sandboxed processes.

Downstream demand

Precedent

#1618 covered the `PROCESSOR_FEATURE_ID` metadata enum lagging the SDK headers. This request is upstream of that — both the SDK header (`winnt.h`) and the metadata enum need the two new values.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions