On Wed, 22 Nov 2023 18:26:12 GMT, Daniel D. Daugherty <dcu...@openjdk.org> 
wrote:

>> src/hotspot/cpu/x86/vm_version_x86.cpp line 819:
>> 
>>> 817:   }
>>> 818: 
>>> 819:   _supports_cx8 = supports_cmpxchg8();
>> 
>> I think we should leave the runtime check here (under `ifndef`, like in 
>> ARM?). This covers the remaining case of running on legacy x86 without CX8 
>> implemented: the init guarantee would then fire and prevent any other 
>> surprises at runtime. Sure, it would be hard to come up with such a platform 
>> today, but it would be safer to refuse to run there right away on the 
>> off-chance someone actually has it :)
>
> @shipilev - Do you have a particular legacy x86 in mind?

My point is that it is such an easy thing to do: leave the "cx8" flag sensing 
code in, and keep setting up `_supports_cx8` based on it. This both provides 
more safety by failing cleanly on non-CX8 platform, and gives other platforms 
some guidance: if you can check something is supported, check it.

But now that you nerd-sniped me into this... I think non-CX8 platforms would 
probably predate Pentium. The oldest real machine my lab has is Z530, which 
already has CX8. But it was easy to also go to my QEMU-driven build-test 
server, ask for `i486` as platform there, and et voila, no `cx8` in CPU flags:


buildworker-debian12-32:~$ lscpu
Architecture:            i486
  CPU op-mode(s):        32-bit
  Address sizes:         36 bits physical, 32 bits virtual
  Byte Order:            Little Endian
CPU(s):                  4
  On-line CPU(s) list:   0-3
Vendor ID:               GenuineIntel
  Model name:            486 DX/4
    CPU family:          4
    Model:               8
    Thread(s) per core:  4
    Core(s) per socket:  1
    Socket(s):           1
    Stepping:            0
    BogoMIPS:            5699.99
    Flags:               fpu vme pse apic ht cpuid tsc_known_freq x2apic 
hypervisor cpuid_fault


And mainline JDK even starts there! (with interpreter, there are some asserts 
firing in compiler code, having to do with odd instruction selection on some 
paths):


$ jdk/bin/java -Xint -version
openjdk version "22-testing" 2024-03-19
OpenJDK Runtime Environment (fastdebug build 
22-testing-builds.shipilev.net-openjdk-jdk-b627-20231121)
OpenJDK Server VM (fastdebug build 
22-testing-builds.shipilev.net-openjdk-jdk-b627-20231121, interpreted mode, 
sharing)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/16625#discussion_r1402738580

Reply via email to