Bug#701561: ioquake3: FTBFS on powerpcspe

Simon McVittie smcv at debian.org
Mon Feb 25 10:37:43 UTC 2013


On 24/02/13 13:19, Roland Stigge wrote:
> This is due to PowerPC/Altivec code that doesn't work on powerpcspe.
> 
> Attaching a patch that fixes this by omitting the respective instructions
> on powerpcspe.

Do the resulting binaries work on non-Altivec PowerPCs, or have you just
build-tested it? I'd rather have ioquake3 build on fewer architectures
than have it build, but not work. I dimly remember something about the
PowerPC JIT emitting Altivec instructions?

Because the virtual machine is involved, the way to test it would be to
either use quake3 and game-data-packager (you'll need baseq3/pak0.pk3
from a retail Quake III Arena CD-ROM or installation - I'm told the
Steam version is sufficient), or to test with OpenArena and replace
Debian's altered baseoa/pak0.pk3, baseoa/pak6-patch083.pk3 and
baseoa/pak6-patch-088.pk3 with the ones supplied by upstream.

Debian's OpenArena uses native code instead of the virtual machine, for
DFSG reasons - we have a Free interpreter and JIT for the VM bytecode,
but no Free compiler - which is why you'd have to replace that data.

I don't have a usable PowerPC, so I can't test there (and both my
non-working PPCs have Altivec, so they're not much use for this
particular bug either).

> +ifeq ($(DEB_HOST_ARCH),powerpcspe)
> +NO_ALTIVEC := 1
> +else
> +NO_ALTIVEC := 0
> +endif

In principle we ought to do this on all PowerPC architectures - Debian's
powerpc target is a baseline non-Altivec PowerPC (in the same way that
Debian i386 supports any CPU >= i486, and cannot assume MMX or SSE) -
but since I can't test ioquake3 on PowerPC, I'd rather keep the current
state (which *someone* has tested, upstream), rather than gain
compatibility with really old PPCs at the cost of potentially breaking
*all* PPCs.

> +#if defined(Q3_VM) || defined (__NO_FPRS__)

I'm pretty sure this is wrong: it's using the Q3 virtual machine
code-path. It would be better to knock out or modify the
"defined(__VEC__)" check further down the same file, or maybe define
C_ONLY? (This might uncover bugs where upstream have assumed that idppc
implies Altivec - idppc_altivec is the macro that's meant to signal
Altivec.)

Regards,
    S



More information about the Pkg-games-devel mailing list