On Wed, 06 May 2020 00:36:02 +0200
Jeremie Courreges-Anglas wrote:

> On Mon, May 04 2020, Charlene Wendling <[email protected]> wrote:
> > On Sun, 3 May 2020 23:48:54 +0200
> > Solene Rapenne wrote:
> >
> >> Le Fri, 1 May 2020 23:40:59 +0200,
> >> Charlene Wendling <[email protected]> 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. 



> Is it any faster if you drop the powerpc specific bits here?  Trading
> a single CPU instruction (__builtin_ppc_mftb) for a syscall
> (clock_gettime) probably slows things down a bit.
>
> If the #else fallback works fine, maybe it should be preferred.

It's what i tried first, but the sound is garbled even more. It makes
sense since we lose cycle-accuracy.

> -- 
> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE
> 1524 E7EE
> 

Reply via email to