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.

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

Reply via email to