The patch below removes the (small) amount of code used to identify NexGen CPUs. I'm doubtful that these CPUs would be supported anymore and we don't do anything with the information once we identify a NexGen CPU.
The code does a division early in the i386 boot process (in locore0) and checks the result of the ZF flag. Apparently ZF would have a different value on a NexGen vs an Intel CPU. According to my research some NexGen CPUs were: Nx586-P66 Nx586-P75 Nx586-P80 Nx586-P90 Nx586-P100 Nx586-P110 Nx586-P120 Nx586-P133 And: Nx586-PF100 Nx586-PF110 The models with a "P" did not include an FPU, while the models with "PF" did include an integrated FPU. According to this site, there were originally plans for a separate Nx587 FPU but it was never officially released: https://www.x86-guide.net/en/fpu/NexGen-Nx587-2.html On our i386 page we state that we support: "All CPUs compatible with the Intel Pentium or later, with Intel-compatible hardware floating point support should work." Therefore none of the FPU-less NexGen CPUs are ones we state we support. Looking at what we implement for our recognition code, we only implement half of the algorithm to identify NexGen cpus that don't have the cpuid instruction. We ignore NexGen cpus that support the cpuid instruction (which would return the string "NexGenDriven"). So the ones lacking cpuid support probably don't have an FPU and aren't supported. While the ones with the FPU are likely ones that support the cpuid instruction, but our detection code doesn't detect them. So it looks like neither case would be supported in the current code. One thing I was not able to find out is the precise details of which of these CPUs do support the CPUID instruction and which ones don't. I've looked for these CPUs on ebay for the past few years but they seem to be fairly impossible to find with the last ones probably sitting in the hands of collectors. So the above is just a guess on my part. Finally I keep reading that the Nx586 is not actually Pentium clone, but rather an i386 clone. I don't have a good way to test this, but I've read that instructions like CMPXCHG8B (pentium), INVLPG (486), XADD (486) might not be directly supported by NexGen cpus. There is discussion of this here: https://www.cpu-world.com/forum/viewtopic.php?p=189409 "...the truth is that the Nx586 is an extremely fast 386 processor. Later they added some 486 instructions via hypercode, which is stored in the BIOS EEPROM, but only the application-oriented ones. So while you can run most of the applications that were compiled for an 486, you can't run an operating system which requires a 486 or even a Pentium." Below diff tested on my transmeta notebook running i386 which continues to run fine and doesn't change the transmeta detection code. In the diff I left the ".Lis386" label even though it isn't needed anymore, but I think it's a useful comment to keep. ok? Index: i386/locore0.S =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/locore0.S,v retrieving revision 1.5 diff -u -p -u -r1.5 locore0.S --- i386/locore0.S 31 Dec 2021 10:44:05 -0000 1.5 +++ i386/locore0.S 3 Jul 2022 21:06:50 -0000 @@ -132,25 +132,6 @@ start: movw $0x1234,0x472 # warm boot testl %eax,%eax jnz .Ltry486 - /* - * Try the test of a NexGen CPU -- ZF will not change on a DIV - * instruction on a NexGen, it will on an i386. Documented in - * Nx586 Processor Recognition Application Note, NexGen, Inc. - */ - movl $0x5555,%eax - xorl %edx,%edx - movl $2,%ecx - divl %ecx - jnz .Lis386 - -.Lisnx586: - /* - * Don't try cpuid, as Nx586s reportedly don't support the - * PSL_ID bit. - */ - movl $CPU_NX586,RELOC(_C_LABEL(cpu)) - jmp 2f - .Lis386: movl $CPU_386,RELOC(_C_LABEL(cpu)) jmp 2f Index: i386/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v retrieving revision 1.648 diff -u -p -u -r1.648 machdep.c --- i386/machdep.c 1 Feb 2022 20:29:55 -0000 1.648 +++ i386/machdep.c 3 Jul 2022 21:06:51 -0000 @@ -510,8 +510,6 @@ const struct cpu_nocpuid_nameclass i386_ NULL}, /* CPU_486DLC */ { CPUVENDOR_CYRIX, "Cyrix", "6x86", CPUCLASS_486, cyrix6x86_cpu_setup}, /* CPU_6x86 */ - { CPUVENDOR_NEXGEN,"NexGen","586", CPUCLASS_386, - NULL}, /* CPU_NX586 */ }; const char *classnames[] = { Index: include/cputypes.h =================================================================== RCS file: /cvs/src/sys/arch/i386/include/cputypes.h,v retrieving revision 1.10 diff -u -p -u -r1.10 cputypes.h --- include/cputypes.h 29 Dec 2003 08:14:18 -0000 1.10 +++ include/cputypes.h 3 Jul 2022 21:06:51 -0000 @@ -48,11 +48,10 @@ #define CPU_486 3 /* Intel 80486DX */ #define CPU_486DLC 4 /* Cyrix 486DLC */ #define CPU_6x86 5 /* Cyrix/IBM 6x86 */ -#define CPU_NX586 6 /* NexGen 586 */ #define CPU_586 7 /* Intel P.....m (I hate lawyers; it's TM) */ #define CPU_AM586 8 /* AMD Am486 and Am5x86 */ #define CPU_K5 9 /* AMD K5 */ -#define CPU_K6 10 /* NexGen 686 aka AMD K6 */ +#define CPU_K6 10 /* AMD K6 */ #define CPU_686 11 /* Intel P.....m Pro */ /* @@ -62,7 +61,6 @@ #define CPUVENDOR_UNKNOWN -1 #define CPUVENDOR_INTEL 0 #define CPUVENDOR_CYRIX 1 -#define CPUVENDOR_NEXGEN 2 #define CPUVENDOR_AMD 3 #define CPUVENDOR_IDT 4 #define CPUVENDOR_RISE 5 Index: stand/libsa/cpuprobe.c =================================================================== RCS file: /cvs/src/sys/arch/i386/stand/libsa/cpuprobe.c,v retrieving revision 1.2 diff -u -p -u -r1.2 cpuprobe.c --- stand/libsa/cpuprobe.c 29 Mar 2014 18:09:29 -0000 1.2 +++ stand/libsa/cpuprobe.c 3 Jul 2022 21:06:51 -0000 @@ -59,17 +59,6 @@ cpuprobe(void) * We try to toggle bit 21 (PSL_ID) in eflags. If it works, then * cpuid is supported. If not, there's no cpuid, and we don't * try it (don't want /boot to get an invalid opcode exception). - * - * XXX The NexGen Nx586 does not support this bit, so this is not - * a good method to detect the presence of cpuid on this - * processor. That's fine: the purpose here is to detect the - * absence of cpuid. We don't mind if the instruction's not - * there - this is not intended to determine exactly what - * processor is there, just whether it's i386 or amd64. - * - * The only thing that would cause us grief is a processor which - * does not support cpuid but which does allow the PSL_ID bit - * in eflags to be toggled. */ __asm volatile( "pushfl\n\t" Index: stand/libsa/exec_i386.c =================================================================== RCS file: /cvs/src/sys/arch/i386/stand/libsa/exec_i386.c,v retrieving revision 1.51 diff -u -p -u -r1.51 exec_i386.c --- stand/libsa/exec_i386.c 24 Oct 2021 17:49:19 -0000 1.51 +++ stand/libsa/exec_i386.c 3 Jul 2022 21:06:51 -0000 @@ -171,17 +171,6 @@ ucode_load(void) * We try to toggle bit 21 (PSL_ID) in eflags. If it works, then * cpuid is supported. If not, there's no cpuid, and we don't * try it (don't want /boot to get an invalid opcode exception). - * - * XXX The NexGen Nx586 does not support this bit, so this is not - * a good method to detect the presence of cpuid on this - * processor. That's fine: the purpose here is to detect the - * absence of cpuid. We don't mind if the instruction's not - * there - this is not intended to determine exactly what - * processor is there, just whether it's i386 or amd64. - * - * The only thing that would cause us grief is a processor which - * does not support cpuid but which does allow the PSL_ID bit - * in eflags to be toggled. */ __asm volatile( "pushfl\n\t" Index: stand/libsa/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/i386/stand/libsa/machdep.c,v retrieving revision 1.39 diff -u -p -u -r1.39 machdep.c --- stand/libsa/machdep.c 11 Jul 2018 18:08:05 -0000 1.39 +++ stand/libsa/machdep.c 3 Jul 2022 21:06:51 -0000 @@ -78,17 +78,6 @@ machdep(void) * We try to toggle bit 21 (PSL_ID) in eflags. If it works, then * cpuid is supported. If not, there's no cpuid, and we don't * try it (don't want /boot to get an invalid opcode exception). - * - * XXX The NexGen Nx586 does not support this bit, so this is not - * a good method to detect the presence of cpuid on this - * processor. That's fine: the purpose here is to detect the - * absence of cpuid. We don't mind if the instruction's not - * there - this is not intended to determine exactly what - * processor is there, just whether it's i386 or amd64. - * - * The only thing that would cause us grief is a processor which - * does not support cpuid but which does allow the PSL_ID bit - * in eflags to be toggled. */ __asm volatile( "pushfl\n\t"