Skip to content

Commit f11c7bb

Browse files
committed
windows: add IsProcessorFeaturePresent and processor feature consts
For golang/go#76791 Change-Id: I1594c4868262c78d40e1ebd883a01a71236e4981 Reviewed-on: https://go-review.googlesource.com/c/sys/+/740500 Reviewed-by: Quim Muntal <quimmuntal@gmail.com> Reviewed-by: Carlos Amedee <carlos@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
1 parent d25a7aa commit f11c7bb

4 files changed

Lines changed: 112 additions & 0 deletions

File tree

windows/syscall_windows.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,7 @@ const socket_error = uintptr(^uint32(0))
900900
//sys NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyRouteChange2
901901
//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange
902902
//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2
903+
//sys IsProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) = kernel32.IsProcessorFeaturePresent
903904

904905
// For testing: clients can set this flag to force
905906
// creation of IPv6 sockets to return EAFNOSUPPORT.

windows/syscall_windows_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1493,3 +1493,22 @@ func TestRoundtripNTUnicodeString(t *testing.T) {
14931493
}
14941494
}
14951495
}
1496+
1497+
func TestIsProcessorFeaturePresent(t *testing.T) {
1498+
// according to
1499+
// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-isprocessorfeaturepresent
1500+
// if PF_PAE_ENABLED returns nonzero value, then
1501+
// ...
1502+
// The processor is PAE-enabled. For more information, see Physical Address Extension.
1503+
// All x64 processors always return a nonzero value for this feature.
1504+
// ...
1505+
switch runtime.GOARCH {
1506+
case "amd64", "386":
1507+
default:
1508+
t.Skipf("the test is no supported by %q processor type", runtime.GOARCH)
1509+
}
1510+
1511+
if !windows.IsProcessorFeaturePresent(windows.PF_PAE_ENABLED) {
1512+
t.Fatal("IsProcessorFeaturePresent failed, but should succeed")
1513+
}
1514+
}

windows/types_windows.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3938,3 +3938,88 @@ const (
39383938
MOUSE_EVENT = 0x0002
39393939
WINDOW_BUFFER_SIZE_EVENT = 0x0004
39403940
)
3941+
3942+
// The processor features to be tested for IsProcessorFeaturePresent, see
3943+
// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-isprocessorfeaturepresent
3944+
const (
3945+
PF_ARM_64BIT_LOADSTORE_ATOMIC = 25
3946+
PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE = 24
3947+
PF_ARM_EXTERNAL_CACHE_AVAILABLE = 26
3948+
PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE = 27
3949+
PF_ARM_VFP_32_REGISTERS_AVAILABLE = 18
3950+
PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7
3951+
PF_CHANNELS_ENABLED = 16
3952+
PF_COMPARE_EXCHANGE_DOUBLE = 2
3953+
PF_COMPARE_EXCHANGE128 = 14
3954+
PF_COMPARE64_EXCHANGE128 = 15
3955+
PF_FASTFAIL_AVAILABLE = 23
3956+
PF_FLOATING_POINT_EMULATED = 1
3957+
PF_FLOATING_POINT_PRECISION_ERRATA = 0
3958+
PF_MMX_INSTRUCTIONS_AVAILABLE = 3
3959+
PF_NX_ENABLED = 12
3960+
PF_PAE_ENABLED = 9
3961+
PF_RDTSC_INSTRUCTION_AVAILABLE = 8
3962+
PF_RDWRFSGSBASE_AVAILABLE = 22
3963+
PF_SECOND_LEVEL_ADDRESS_TRANSLATION = 20
3964+
PF_SSE3_INSTRUCTIONS_AVAILABLE = 13
3965+
PF_SSSE3_INSTRUCTIONS_AVAILABLE = 36
3966+
PF_SSE4_1_INSTRUCTIONS_AVAILABLE = 37
3967+
PF_SSE4_2_INSTRUCTIONS_AVAILABLE = 38
3968+
PF_AVX_INSTRUCTIONS_AVAILABLE = 39
3969+
PF_AVX2_INSTRUCTIONS_AVAILABLE = 40
3970+
PF_AVX512F_INSTRUCTIONS_AVAILABLE = 41
3971+
PF_VIRT_FIRMWARE_ENABLED = 21
3972+
PF_XMMI_INSTRUCTIONS_AVAILABLE = 6
3973+
PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10
3974+
PF_XSAVE_ENABLED = 17
3975+
PF_ARM_V8_INSTRUCTIONS_AVAILABLE = 29
3976+
PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE = 30
3977+
PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE = 31
3978+
PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE = 34
3979+
PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE = 43
3980+
PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE = 44
3981+
PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE = 45
3982+
PF_ARM_SVE_INSTRUCTIONS_AVAILABLE = 46
3983+
PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE = 47
3984+
PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE = 48
3985+
PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE = 49
3986+
PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE = 50
3987+
PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE = 51
3988+
PF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE = 52
3989+
PF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE = 53
3990+
PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE = 54
3991+
PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE = 55
3992+
PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE = 56
3993+
PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE = 57
3994+
PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE = 58
3995+
PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE = 59
3996+
PF_BMI2_INSTRUCTIONS_AVAILABLE = 60
3997+
PF_MOVDIR64B_INSTRUCTION_AVAILABLE = 61
3998+
PF_ARM_LSE2_AVAILABLE = 62
3999+
PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE = 64
4000+
PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE = 65
4001+
PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE = 66
4002+
PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE = 67
4003+
PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE = 68
4004+
PF_ARM_V86_EBF16_INSTRUCTIONS_AVAILABLE = 69
4005+
PF_ARM_SME_INSTRUCTIONS_AVAILABLE = 70
4006+
PF_ARM_SME2_INSTRUCTIONS_AVAILABLE = 71
4007+
PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE = 72
4008+
PF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE = 73
4009+
PF_ARM_SME_AES_INSTRUCTIONS_AVAILABLE = 74
4010+
PF_ARM_SME_SBITPERM_INSTRUCTIONS_AVAILABLE = 75
4011+
PF_ARM_SME_SF8MM4_INSTRUCTIONS_AVAILABLE = 76
4012+
PF_ARM_SME_SF8MM8_INSTRUCTIONS_AVAILABLE = 77
4013+
PF_ARM_SME_SF8DP2_INSTRUCTIONS_AVAILABLE = 78
4014+
PF_ARM_SME_SF8DP4_INSTRUCTIONS_AVAILABLE = 79
4015+
PF_ARM_SME_SF8FMA_INSTRUCTIONS_AVAILABLE = 80
4016+
PF_ARM_SME_F8F32_INSTRUCTIONS_AVAILABLE = 81
4017+
PF_ARM_SME_F8F16_INSTRUCTIONS_AVAILABLE = 82
4018+
PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE = 83
4019+
PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE = 84
4020+
PF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE = 85
4021+
PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE = 86
4022+
PF_ARM_SME_LUTv2_INSTRUCTIONS_AVAILABLE = 87
4023+
PF_ARM_SME_FA64_INSTRUCTIONS_AVAILABLE = 88
4024+
PF_UMONITOR_INSTRUCTION_AVAILABLE = 89
4025+
)

windows/zsyscall_windows.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)