public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
From: Bill Fink <billfink@mindspring•com>
To: LinuxPPC Developers <linuxppc-dev@lists•linuxppc.org>
Cc: Bill Fink <billfink@mindspring•com>
Subject: Re: Runtime Altivec detection
Date: Fri, 7 Mar 2003 21:02:57 -0500	[thread overview]
Message-ID: <20030307210257.7b094f55.billfink@mindspring.com> (raw)


Hi Nathan,

> On Fri, 7 Mar 2003, Nathan Ingersoll wrote:
>
> On Fri, Mar 07, 2003 at 06:54:58PM +0000, Magnus Damm wrote:
> > mplayer and ffmpeg does some kind of detection runtime.
> > I'm playing with it right now actually.
>
> Last I heard, it was a compile time detection or flag. So you had to build
> separate binaries for your G4 and non-G4 machines.
>
> > While at it:
> >
> > I've seen that -maltivec and -mabi=altivec is passed sometimes.
> > If I want to build a binary that should be able to run on a
> > G3 without altivec and utilize altivec when present on a G4,
> > what flags should I use?
>
> There is no specific flag for doing so, you need some code to detect the
> capability, and then decide whether to use the Altivec routine.

Here is the code xine uses to do run time Altivec detection
(from xine-utils/cpu_accel.c):

#if defined (ARCH_PPC) && defined (ENABLE_ALTIVEC)
static sigjmp_buf jmpbuf;
static volatile sig_atomic_t canjump = 0;

static void sigill_handler (int sig)
{
    if (!canjump) {
        signal (sig, SIG_DFL);
        raise (sig);
    }

    canjump = 0;
    siglongjmp (jmpbuf, 1);
}

static uint32_t arch_accel (void)
{
    signal (SIGILL, sigill_handler);
    if (sigsetjmp (jmpbuf, 1)) {
        signal (SIGILL, SIG_DFL);
        return 0;
    }

    canjump = 1;

    __asm__ volatile ("mtspr 256, %0\n\t"
                  "vand %%v0, %%v0, %%v0"
                  :
                  : "r" (-1));

    signal (SIGILL, SIG_DFL);
    return MM_ACCEL_PPC_ALTIVEC;
}
#endif /* ARCH_PPC */

And here's the gcc command used to compile cpu_accel.c:

gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../.. -I../../include -I../../include -I../../src -I../../src/xine-engine -I../../src/xine-engine -I../../src/xine-utils -I/usr/X11R6/include -std=gnu89 -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE -O3 -pipe -fomit-frame-pointer -fexpensive-optimizations -fschedule-insns2 -fno-strict-aliasing -ffast-math -funroll-loops -funroll-all-loops -finline-functions -Wa,-m7400 -I/usr/include/kde/artsc -c cpu_accel.c -Wp,-MD,.deps/cpu_accel.TPlo  -fPIC -DPIC -o cpu_accel.lo

						-Bill

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

             reply	other threads:[~2003-03-08  2:02 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-08  2:02 Bill Fink [this message]
2003-03-08  2:11 ` Runtime Altivec detection Hollis Blanchard
2003-03-08  8:04   ` Bill Fink
2003-03-08 18:21     ` Nathan Ingersoll
  -- strict thread matches above, loose matches on Subject: below --
2003-03-09  4:01 Albert Cahalan
2003-03-07 16:47 Nathan Ingersoll
2003-03-07 17:24 ` Dan Malek
2003-03-07 17:35   ` Nathan Ingersoll
2003-03-07 17:37   ` Anton Blanchard
2003-03-07 17:41   ` Benjamin Herrenschmidt
2003-03-07 17:52     ` Nathan Ingersoll
2003-03-07 18:55     ` Magnus Damm
2003-03-07 18:06       ` Benjamin Herrenschmidt
2003-03-07 18:18       ` Hollis Blanchard
2003-03-07 18:54 ` Magnus Damm
2003-03-07 18:08   ` Nathan Ingersoll
2003-03-07 19:44     ` Magnus Damm
2003-03-07 19:23       ` Nathan Ingersoll

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030307210257.7b094f55.billfink@mindspring.com \
    --to=billfink@mindspring$(echo .)com \
    --cc=linuxppc-dev@lists$(echo .)linuxppc.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox