From: "Diego 'Flameeyes' Pettenò" <flameeyes@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Subject: [gentoo-dev] Replacing cpu-feature USE flags
Date: Thu, 6 Jul 2006 12:52:29 +0200 [thread overview]
Message-ID: <200607061252.33028@enterprise.flameeyes.is-a-geek.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 3209 bytes --]
So, I've been drafting this up in my blog[1], and it is a simple way to
replace the CPU feature useflags. Let's try to summarise:
Right now we have mmx, 3dnow, 3dnowex, sse, sse2 and so on useflags present in
the tree, almost never used to get new dependencies, but usually used to
supply econf switches.
This works as long as the user enable the flags, but for AMD64 the story was,
until now, that we simply enabled them when they worked, because we had some
minimum support available. Unfortunately this became a problem with the
introduction of nocona, because that is an amd64-like system but with no
3dnow. And there is the problem that sse3 is supported only in later versions
of Athlon64 and so on.
To try to clean up this mess, and to make it simpler to work in
cross-compilation, I thought of using the definitions created by the C
Preprocessor (CPP) by default for the given CFLAGS. Basically when
using -march=athlon64, the preprocessor will enable a few definitions that
tells the availability of MMX, 3dNOW, SSE and so on... if we wrap that
around, we can use it to know if it's the case of enabling something or not.
This is customisable by the user by setting the CFLAGS themselves. If one does
not want MMX instructions to be generated, but still want the rest of
Athlon64 optimisations, it's simply the matter of
using "-march=athlon64 -mno-mmx".
So, rather than the functions proposed in [1], I've sampled today the
following function:
has_cpuset() {
local def hasfeat
while [[ -n $1 ]]; do
case $1 in
mmx)
def="__MMX__" ;;
3dnow)
def="__3dNOW__" ;;
3dnowex)
def="__3dNOW_A__" ;;
sse)
def="__SSE__" ;;
sse2)
def="__SSE2__" ;;
sse3)
def="__SSE3__" ;;
altivec)
def="__ALTIVEC__" ;;
*)
ewarn "Instruction set $1 not supported."
die "Instruction set not supported."
esac
echo | $(tc-getCC) ${CFLAGS} -dM -E - 2>/dev/null | grep -q ${def} ||
hasfeat="no"
shift
done
if [[ ${hasfeat} == "no" ]]; then
return 1
else
return 0
fi
}
that can be tested easily with the following code:
yesno() {
if "$@"; then
echo "yes"
else
echo "no"
fi
}
echo "Does it have 3dnow mmx sse2?"
yesno has_cpuset 3dnow mmx sse2
echo "Does it have mmx sse sse3?"
yesno has_cpuset mmx sse sse3
echo "Does it have altivec?"
yesno has_cpuset altivec
Note that you need to set your CFLAGS corretly or it will, by default, tell
you that everything is disabled.
Thoughts? Comments?
SPARC team: I'd like to know if VIS does a similar thing, would make simpler
for instance its handling in xine-lib ebuild.
[1]
http://farragut.flameeyes.is-a-geek.org/articles/2006/06/24/crazy-idea-an-alternative-to-cpu-features-useflags
--
Diego "Flameeyes" Pettenò - http://farragut.flameeyes.is-a-geek.org/
Gentoo/Alt lead, Gentoo/FreeBSD, Video, AMD64, Sound, PAM, KDE
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next reply other threads:[~2006-07-06 10:59 UTC|newest]
Thread overview: 136+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-06 10:52 Diego 'Flameeyes' Pettenò [this message]
2006-07-06 11:00 ` [gentoo-dev] Replacing cpu-feature USE flags Stuart Herbert
2006-07-06 11:23 ` Diego 'Flameeyes' Pettenò
2006-07-25 12:05 ` Enrico Weigelt
2006-07-06 11:03 ` Ioannis Aslanidis
2006-07-06 11:40 ` Donnie Berkholz
2006-07-06 11:48 ` Diego 'Flameeyes' Pettenò
2006-07-06 11:58 ` Donnie Berkholz
2006-07-06 12:21 ` Diego 'Flameeyes' Pettenò
2006-07-06 19:04 ` Harald van Dijk
2006-07-07 0:46 ` Mike Frysinger
2006-07-07 0:57 ` Diego 'Flameeyes' Pettenò
2006-07-07 1:19 ` Mike Frysinger
2006-07-06 15:41 ` Ned Ludd
2006-07-06 15:55 ` Donnie Berkholz
2006-07-06 19:06 ` Harald van Dijk
2006-07-06 19:42 ` Gentoo vs GNU toolchain (was Re: [gentoo-dev] Replacing cpu-feature USE flags) Kevin F. Quinn
2006-07-06 19:55 ` Harald van Dijk
2006-07-06 20:03 ` Stephen P. Becker
2006-07-06 20:14 ` Harald van Dijk
2006-07-06 23:44 ` Mike Frysinger
2006-07-07 5:46 ` Harald van Dijk
2006-07-07 14:00 ` Kevin F. Quinn
2006-07-07 16:53 ` Harald van Dijk
2006-07-07 17:55 ` Ned Ludd
2006-07-07 18:40 ` Harald van Dijk
2006-07-07 19:57 ` Ned Ludd
2006-07-07 21:09 ` Harald van Dijk
2006-07-08 11:24 ` Ned Ludd
2006-07-07 20:18 ` Tushar Teredesai
2006-07-08 11:22 ` Ned Ludd
2006-07-07 20:40 ` Mike Frysinger
2006-07-07 21:12 ` Mike Frysinger
2006-07-07 21:53 ` Harald van Dijk
2006-07-07 22:13 ` Mike Frysinger
2006-07-07 23:04 ` Harald van Dijk
2006-07-07 23:50 ` Mike Frysinger
2006-07-08 6:20 ` Harald van Dijk
2006-07-08 9:27 ` Martin Schlemmer
2006-07-08 11:51 ` Harald van Dijk
2006-07-08 13:46 ` Martin Schlemmer
2006-07-08 16:43 ` Harald van Dijk
2006-07-08 19:53 ` Jakub Moc
2006-07-08 13:51 ` Mike Frysinger
2006-07-06 23:42 ` Mike Frysinger
2006-07-06 19:56 ` Ciaran McCreesh
2006-07-06 20:27 ` Stephen Bennett
2006-07-06 23:40 ` Mike Frysinger
2006-07-25 12:14 ` [gentoo-dev] Replacing cpu-feature USE flags Enrico Weigelt
2006-07-25 17:07 ` Harald van Dijk
2006-08-03 0:38 ` Enrico Weigelt
2006-07-25 12:08 ` Enrico Weigelt
2006-07-06 12:19 ` Ciaran McCreesh
2006-07-06 12:29 ` Diego 'Flameeyes' Pettenò
2006-07-06 12:49 ` Ciaran McCreesh
2006-07-06 13:35 ` Olivier Crête
2006-07-06 14:03 ` Simon Stelling
2006-07-06 14:16 ` Ciaran McCreesh
2006-07-06 15:09 ` Simon Stelling
2006-07-06 15:20 ` Ciaran McCreesh
2006-07-06 15:39 ` Ned Ludd
2006-07-07 0:50 ` Mike Frysinger
2006-07-07 0:58 ` Diego 'Flameeyes' Pettenò
2006-07-07 1:15 ` Mike Frysinger
2006-07-07 2:28 ` Diego 'Flameeyes' Pettenò
2006-07-07 12:34 ` Martin Schlemmer
2006-07-07 13:08 ` Graham Murray
2006-07-07 13:21 ` Simon Stelling
2006-07-07 13:53 ` Martin Schlemmer
2006-07-07 14:03 ` Diego 'Flameeyes' Pettenò
2006-07-07 15:31 ` Martin Schlemmer
2006-07-07 17:22 ` Diego 'Flameeyes' Pettenò
2006-07-07 18:34 ` Mike Frysinger
2006-07-06 15:13 ` Kevin F. Quinn
2006-07-25 12:40 ` Enrico Weigelt
2006-07-06 16:43 ` Diego 'Flameeyes' Pettenò
2006-07-06 17:51 ` Ciaran McCreesh
2006-07-06 18:07 ` Diego 'Flameeyes' Pettenò
2006-07-06 18:29 ` Ciaran McCreesh
2006-07-06 18:42 ` Diego 'Flameeyes' Pettenò
2006-07-06 19:01 ` Ciaran McCreesh
2006-07-06 20:02 ` Curtis Napier
2006-07-06 20:13 ` Diego 'Flameeyes' Pettenò
2006-07-06 20:24 ` Ciaran McCreesh
2006-07-06 20:46 ` Diego 'Flameeyes' Pettenò
2006-07-06 20:58 ` Ciaran McCreesh
2006-07-06 21:12 ` Diego 'Flameeyes' Pettenò
2006-07-06 21:23 ` Ciaran McCreesh
2006-07-06 21:31 ` Joshua Jackson
2006-07-06 21:45 ` Ciaran McCreesh
2006-07-06 22:09 ` Jory A. Pratt
2006-07-06 22:28 ` Stephen Bennett
2006-07-06 23:10 ` Curtis Napier
2006-07-06 21:46 ` Stephen Bennett
2006-07-06 21:45 ` Diego 'Flameeyes' Pettenò
2006-07-06 23:16 ` Ciaran McCreesh
2006-07-06 23:39 ` Diego 'Flameeyes' Pettenò
2006-07-06 23:54 ` Ciaran McCreesh
2006-07-07 0:08 ` Diego 'Flameeyes' Pettenò
2006-07-07 0:31 ` Ciaran McCreesh
2006-07-07 12:24 ` Martin Schlemmer
2006-07-07 12:31 ` Brian Harring
2006-07-07 12:50 ` Martin Schlemmer
2006-07-07 0:01 ` Luca Barbato
2006-07-07 0:11 ` Diego 'Flameeyes' Pettenò
2006-07-07 0:31 ` Luca Barbato
2006-07-07 13:27 ` Chris Gianelloni
2006-07-07 13:36 ` Mike Doty
2006-07-07 16:14 ` [gentoo-dev] CPU subprofiles (was: Replacing cpu-feature USE flags) Ciaran McCreesh
2006-07-07 16:20 ` [gentoo-dev] CPU subprofiles Mike Doty
2006-07-07 21:46 ` [gentoo-dev] Replacing cpu-feature USE flags Roy Bamford
2006-07-06 21:10 ` Kevin F. Quinn
2006-07-06 21:12 ` Diego 'Flameeyes' Pettenò
2006-07-07 11:13 ` Simon Stelling
2006-07-07 13:44 ` Marius Mauch
2006-07-07 14:03 ` Simon Stelling
2006-07-07 17:53 ` Richard Fish
2006-07-07 0:20 ` Danny van Dyk
2006-07-07 0:27 ` Diego 'Flameeyes' Pettenò
2006-07-06 15:33 ` Ned Ludd
2006-07-06 16:44 ` Diego 'Flameeyes' Pettenò
2006-07-06 16:58 ` Ned Ludd
2006-07-06 17:09 ` Diego 'Flameeyes' Pettenò
2006-07-06 17:33 ` Ned Ludd
2006-07-06 18:08 ` Luca Barbato
2006-07-06 12:35 ` Kevin F. Quinn
2006-07-06 12:44 ` Diego 'Flameeyes' Pettenò
2006-07-06 13:17 ` Kevin F. Quinn
2006-07-06 16:02 ` Luca Barbato
2006-07-06 16:46 ` Diego 'Flameeyes' Pettenò
2006-07-06 16:27 ` Kevin F. Quinn
2006-07-06 18:02 ` Luca Barbato
2006-07-06 22:46 ` Luca Barbato
2006-07-07 11:36 ` Simon Stelling
2006-07-07 12:18 ` Luca Barbato
2006-07-06 23:35 ` Richard Fish
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=200607061252.33028@enterprise.flameeyes.is-a-geek.org \
--to=flameeyes@gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
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