On Sat, 12 Jun 2021 17:27:30 +0200
Matthieu Herrb <[email protected]> wrote:
> Normally from my build logs on macppc configure is probing for
> VMX/Altivec:
>
> checking whether to use VMX/Altivec intrinsics... yes
>
> and then sets
>
> VMX_CFLAGS='-maltivec -mabi=altivec'
>
> for the build.
>
> If it's not the case it probably means that removing 'option ALTIVEC'
> from the kernel is not equivalent to running on a G3 machine.
Kernel without 'option ALTIVEC' makes this mistake:
$ sysctl machdep.altivec
machdep.altivec=1
This is wrong, because kernel without ALTIVEC can't enable the
altivec instructions, but machdep.altivec=1 tells pixman to use
altivec. G3 would have machdep.altivec=0.
I would keep 'option ALTIVEC', but edit the kernel's source to set
machdep.altivec=0 and to trap EXC_VEC with SIGILL. I lost my last
diff, so here is one that I minimally tested:
Index: arch/macppc/macppc/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/macppc/machdep.c,v
retrieving revision 1.193
diff -u -p -r1.193 machdep.c
--- arch/macppc/macppc/machdep.c 8 Nov 2020 20:37:23 -0000 1.193
+++ arch/macppc/macppc/machdep.c 13 Jun 2021 03:58:22 -0000
@@ -563,7 +563,7 @@ cpu_sysctl(int *name, u_int namelen, voi
return (sysctl_rdint(oldp, oldlenp, newp, 0));
#endif
case CPU_ALTIVEC:
- return (sysctl_rdint(oldp, oldlenp, newp, ppc_altivec));
+ return (sysctl_rdint(oldp, oldlenp, newp, 0/*ppc_altivec*/));
default:
return EOPNOTSUPP;
}
Index: arch/powerpc/powerpc/trap.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/powerpc/trap.c,v
retrieving revision 1.121
diff -u -p -r1.121 trap.c
--- arch/powerpc/powerpc/trap.c 20 May 2021 12:34:35 -0000 1.121
+++ arch/powerpc/powerpc/trap.c 13 Jun 2021 03:58:23 -0000
@@ -499,7 +499,7 @@ brain_damage:
* if we do not handle it, kill the process with illegal instruction.
*/
case EXC_PERF|EXC_USER:
-#ifdef ALTIVEC
+#if 0/*def ALTIVEC*/
case EXC_VEC|EXC_USER:
if (ci->ci_vecproc)
save_vec(ci->ci_vecproc);