Monday, May 04, 2020

Re: [macppc, !x86] Unbreak emulators/gsplus

On Sun, 3 May 2020 23:48:54 +0200
Solene Rapenne wrote:

> Le Fri, 1 May 2020 23:40:59 +0200,
> Charlene Wendling <julianaito@posteo.jp> a écrit :
>
> > Hi,
> >
> > > http://build-failures.rhaalovely.net/powerpc/2020-04-09/emulators/gsplus.log
> >
> > `__builtin_ppc_mftb()' is not available with clang.
> >
> > An easy solution would have been to change the ifdef, but as this is
> > the same situation with retroarch [0], i preferred to use their
> > logic. On top of that it should slightly improve the emulation on !
> > {x86,ppc}.
> >
> > I don't know why upstream chose to #define a builtin, so it can't be
> > applied on archs where it is native (x86). The intent of this patch
> > is to be upstreamed so i preferred to stay minimal.
> >
> > This allows gsplus to be built on macppc, i can run System 6 without
> > issues, excepted mouse clicks that don't register. The only other
> > arch i have is amd64, where this diff makes no change.
> >
> > Comments/feedback are welcome,
> >
> > Charlène.
> >
> >
> > [0] https://marc.info/?l=openbsd-ports-cvs&m=158816954508000&w=2
> >
> >
> > Index: Makefile
> > ===================================================================
> > RCS file: /cvs/ports/emulators/gsplus/Makefile,v
> > retrieving revision 1.1.1.1
> > diff -u -p -u -p -r1.1.1.1 Makefile
> > --- Makefile 12 Mar 2020 12:24:08 -0000 1.1.1.1
> > +++ Makefile 1 May 2020 21:36:37 -0000
> > @@ -6,6 +6,7 @@ GH_ACCOUNT = digarok
> > GH_PROJECT = gsplus
> > GH_COMMIT = 480572054518112647c8fae5d7ea7046a6d6ecfb
> > DISTNAME = ${GH_PROJECT}-20190816
> > +REVISION = 0
> >
> > CATEGORIES = emulators
> >
> > Index: patches/patch-src_engine_c_c
> > ===================================================================
> > RCS file: patches/patch-src_engine_c_c
> > diff -N patches/patch-src_engine_c_c
> > --- /dev/null 1 Jan 1970 00:00:00 -0000
> > +++ patches/patch-src_engine_c_c 1 May 2020 21:36:37 -0000
> > @@ -0,0 +1,24 @@
> > +$OpenBSD$
> > +
> > +Use posix timing to improve portability and avoid a build failure
> > on +powerpc due to `__builtin_ppc_mftb' being gcc-specific.
> > +
> > +Index: src/engine_c.c
> > +--- src/engine_c.c.orig
> > ++++ src/engine_c.c
> > +@@ -884,6 +884,15 @@ void fixed_memory_ptrs_shut() {
> > +
> > + #if defined(__i386__) || defined(__x86_64__)
> > + #include <x86intrin.h>
> > ++ #elif defined(_POSIX_MONOTONIC_CLOCK)
> > ++ #include <time.h>
> > ++ int64_t __rdtsc() {
> > ++ struct timespec tp = {0};
> > ++ int64_t timestamp = 0;
> > ++ if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
> > ++ timestamp = tp.tv_sec * 1000000000 + tp.tv_nsec;
> > ++ return timestamp;
> > ++ }
> > + #elif defined(__powerpc__) || defined(__ppc__)
> > + #define __rdtsc() __builtin_ppc_mftb()
> > + #else
>
> ok solene@
>
> Is gsplus usable on powerpc?

This is slow, actually not fast enough to render sound properly, but
it's usable.

No comments:

Post a Comment