* Should gcc configurted for CPU to generate code for CPU by default?
@ 2002-07-19 11:15 H. J. Lu
2002-07-19 11:36 ` Philip Blundell
2002-07-19 12:56 ` Richard Earnshaw
0 siblings, 2 replies; 14+ messages in thread
From: H. J. Lu @ 2002-07-19 11:15 UTC (permalink / raw)
To: gcc
When I configure gcc for i686 with
.../configure --target=i686-xxxxx
I'd like to be able to make gcc generate code for i686 by default. It
is also useful for MIPS. I am thinking adding
--with-default-ARCH=cpu
or
--with-default-CPU=cpu
or
--with-default-ISA=cpu
Any comments?
H.J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Should gcc configurted for CPU to generate code for CPU by default?
2002-07-19 11:15 Should gcc configurted for CPU to generate code for CPU by default? H. J. Lu
@ 2002-07-19 11:36 ` Philip Blundell
2002-07-19 12:56 ` Richard Earnshaw
1 sibling, 0 replies; 14+ messages in thread
From: Philip Blundell @ 2002-07-19 11:36 UTC (permalink / raw)
To: H. J. Lu; +Cc: gcc
On Fri, 2002-07-19 at 16:14, H. J. Lu wrote:
> When I configure gcc for i686 with
>
> .../configure --target=i686-xxxxx
>
> I'd like to be able to make gcc generate code for i686 by default. It
> is also useful for MIPS. I am thinking adding
>
> --with-default-CPU=cpu
FYI, the arm port already has a "--with-cpu=CPU" configure option that
does pretty much this. Having gcc automatically take the cpu name from
the target tuple (ie --target=i686-linux implying 686 code) is probably
not desirable.
p.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Should gcc configurted for CPU to generate code for CPU by default?
2002-07-19 11:15 Should gcc configurted for CPU to generate code for CPU by default? H. J. Lu
2002-07-19 11:36 ` Philip Blundell
@ 2002-07-19 12:56 ` Richard Earnshaw
2002-07-19 12:56 ` H. J. Lu
1 sibling, 1 reply; 14+ messages in thread
From: Richard Earnshaw @ 2002-07-19 12:56 UTC (permalink / raw)
To: H. J. Lu; +Cc: gcc, Richard.Earnshaw
> When I configure gcc for i686 with
>
> .../configure --target=i686-xxxxx
>
> I'd like to be able to make gcc generate code for i686 by default. It
> is also useful for MIPS. I am thinking adding
>
> --with-default-ARCH=cpu
>
> or
>
> --with-default-CPU=cpu
>
> or
>
> --with-default-ISA=cpu
>
> Any comments?
>
What's wrong with the existing --with-cpu=... already supported by
configure?
R.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Should gcc configurted for CPU to generate code for CPU by default?
2002-07-19 12:56 ` Richard Earnshaw
@ 2002-07-19 12:56 ` H. J. Lu
2002-07-19 15:26 ` PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?) H. J. Lu
0 siblings, 1 reply; 14+ messages in thread
From: H. J. Lu @ 2002-07-19 12:56 UTC (permalink / raw)
To: Richard.Earnshaw; +Cc: gcc
On Fri, Jul 19, 2002 at 04:25:00PM +0100, Richard Earnshaw wrote:
> > When I configure gcc for i686 with
> >
> > .../configure --target=i686-xxxxx
> >
> > I'd like to be able to make gcc generate code for i686 by default. It
> > is also useful for MIPS. I am thinking adding
> >
> > --with-default-ARCH=cpu
> >
> > or
> >
> > --with-default-CPU=cpu
> >
> > or
> >
> > --with-default-ISA=cpu
> >
> > Any comments?
> >
>
> What's wrong with the existing --with-cpu=... already supported by
> configure?
>
Correct me if I am wrong. At least for x86, --with-cpu=i686 is no
different from --target=i686-xxxxx, as far as the default code
generation is concerned. For x86, there are -mcpu=xxx and -march=xxx.
-with-cpu=xxx sets the default -mcpu=xxx. I want something to set
the default -march=xxx. Looking at install.texi. --with-cpu should
be used to set -march=xxx for x86. But for x86, TARGET_CPU_DEFAULT
is for -mcpu=... I am looking for TARGET_ARCH_DEFAULT. --with-arch=...
will work for me.
H.J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-19 12:56 ` H. J. Lu
@ 2002-07-19 15:26 ` H. J. Lu
2002-07-19 15:35 ` Daniel Jacobowitz
0 siblings, 1 reply; 14+ messages in thread
From: H. J. Lu @ 2002-07-19 15:26 UTC (permalink / raw)
To: Richard.Earnshaw; +Cc: gcc, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1182 bytes --]
On Fri, Jul 19, 2002 at 09:02:07AM -0700, H. J. Lu wrote:
> On Fri, Jul 19, 2002 at 04:25:00PM +0100, Richard Earnshaw wrote:
> > > When I configure gcc for i686 with
> > >
> > > .../configure --target=i686-xxxxx
> > >
> > > I'd like to be able to make gcc generate code for i686 by default. It
> > > is also useful for MIPS. I am thinking adding
> > >
> > > --with-default-ARCH=cpu
> > >
> > > or
> > >
> > > --with-default-CPU=cpu
> > >
> > > or
> > >
> > > --with-default-ISA=cpu
> > >
> > > Any comments?
> > >
> >
> > What's wrong with the existing --with-cpu=... already supported by
> > configure?
> >
>
> Correct me if I am wrong. At least for x86, --with-cpu=i686 is no
> different from --target=i686-xxxxx, as far as the default code
> generation is concerned. For x86, there are -mcpu=xxx and -march=xxx.
> -with-cpu=xxx sets the default -mcpu=xxx. I want something to set
> the default -march=xxx. Looking at install.texi. --with-cpu should
> be used to set -march=xxx for x86. But for x86, TARGET_CPU_DEFAULT
> is for -mcpu=... I am looking for TARGET_ARCH_DEFAULT. --with-arch=...
> will work for me.
>
>
Here is a patch to add --with-arch=cpu.
H.J.
[-- Attachment #2: gcc-arch.patch --]
[-- Type: text/plain, Size: 5955 bytes --]
2002-07-19 H.J. Lu <hjl@gnu.org>
* Makefile.in (target_arch_default): New.
(cs-config.h): Add TARGET_ARCH_DEFAULT="$(target_arch_default)".
(cs-hconfig.h): Likewise.
(cs-tconfig.h): Add TARGET_ARCH_DEFAULT="".
(cs-tm_p.h): Likewise.
* config.gcc (target_arch_default): New.
Support --with-arch=cpu for i[34567]86-*-* and x86_64-*-*.
* config/i386/i386.c (override_options): Set ix86_arch_string
to cpu_names [TARGET_ARCH_DEFAULT].
* configure.in: Substitute target_arch_default.
* configure: Regenerated.
* doc/install.texi: Document --with-arch=cpu.
--- gcc/Makefile.in.arch Fri Jul 19 08:39:57 2002
+++ gcc/Makefile.in Fri Jul 19 09:20:49 2002
@@ -277,6 +277,7 @@ lang_specs_files=@lang_specs_files@
lang_options_files=@lang_options_files@
lang_tree_files=@lang_tree_files@
target_cpu_default=@target_cpu_default@
+target_arch_default=@target_arch_default@
GCC_THREAD_FILE=@thread_file@
OBJC_BOEHM_GC=@objc_boehm_gc@
GTHREAD_FLAGS=@gthread_flags@
@@ -856,23 +857,28 @@ cs-config.h: Makefile
TM_DEFINES="$(tm_defines)" \
HEADERS="$(host_xm_file)" XM_DEFINES="$(host_xm_defines)" \
TARGET_CPU_DEFAULT="$(target_cpu_default)" \
+ TARGET_ARCH_DEFAULT="$(target_arch_default)" \
$(SHELL) $(srcdir)/mkconfig.sh config.h
cs-hconfig.h: Makefile
TM_DEFINES="$(tm_defines)" \
HEADERS="$(build_xm_file)" XM_DEFINES="$(build_xm_defines)" \
TARGET_CPU_DEFAULT="$(target_cpu_default)" \
+ TARGET_ARCH_DEFAULT="$(target_arch_default)" \
$(SHELL) $(srcdir)/mkconfig.sh hconfig.h
cs-tconfig.h: Makefile
TM_DEFINES="$(tm_defines)" \
HEADERS="$(xm_file)" XM_DEFINES="$(xm_defines)" \
TARGET_CPU_DEFAULT="" \
+ TARGET_ARCH_DEFAULT="" \
$(SHELL) $(srcdir)/mkconfig.sh tconfig.h
cs-tm_p.h: Makefile
TM_DEFINES="" \
- HEADERS="$(tm_p_file)" XM_DEFINES="" TARGET_CPU_DEFAULT="" \
+ HEADERS="$(tm_p_file)" XM_DEFINES="" \
+ TARGET_CPU_DEFAULT="" \
+ TARGET_ARCH_DEFAULT="" \
$(SHELL) $(srcdir)/mkconfig.sh tm_p.h
# Don't automatically run autoconf, since configure.in might be accidentally
--- gcc/config.gcc.arch Fri Jul 19 08:39:59 2002
+++ gcc/config.gcc Fri Jul 19 10:15:37 2002
@@ -133,6 +133,8 @@
#
# target_cpu_default Set to override the default target model.
#
+# target_arch_default Set to override the default arch model.
+#
# build_install_headers_dir
# Target to use when installing header files.
#
@@ -197,6 +199,8 @@ float_format=
use_collect2=
# Set this to override the default target model.
target_cpu_default=
+# Set this to override the default arch model.
+target_arch_default=
# Set this to control how the header file directory is installed.
install_headers_dir=install-headers-tar
# Set this if directory names should be truncated to 14 characters.
@@ -252,13 +256,40 @@ arm*-*-*)
xscale-*-*)
cpu_type=arm
;;
-i[34567]86-*-*)
- cpu_type=i386
- extra_headers="mmintrin.h xmmintrin.h"
- ;;
-x86_64-*-*)
+i[34567]86-*-* | x86_64-*-*)
cpu_type=i386
extra_headers="mmintrin.h xmmintrin.h"
+ case $machine in
+ x86_64-*-*)
+ target_arch_default=TARGET_CPU_DEFAULT_athlon_sse
+ ;;
+ *)
+ target_arch_default=TARGET_CPU_DEFAULT_i386
+ ;;
+ esac
+ case x"$with_arch" in
+ x)
+ ;;
+ xi586)
+ target_arch_default="TARGET_CPU_DEFAULT_pentium"
+ ;;
+ xi686 | xi786)
+ target_arch_default="TARGET_CPU_DEFAULT_pentiumpro"
+ ;;
+ xi386 | xi486 | xpentium | xpentium-mmx | xpentiumpro \
+ | xpentium2 | xpentium3 | xpentium4 | xk6 | xk6-2 | xk6-3 \
+ | xathlon | xathlon-4)
+ target_arch_default="TARGET_CPU_DEFAULT_$with_arch"
+ ;;
+ xyes | xno)
+ echo "--with-arch must be passed a value" 1>&2
+ exit 1
+ ;;
+ *)
+ echo "Unknown arch used with --with-arch=$with_arch" 1>&2
+ exit 1
+ ;;
+ esac
;;
ia64-*-*)
extra_headers=ia64intrin.h
--- gcc/config/i386/i386.c.arch Thu Jul 18 12:54:03 2002
+++ gcc/config/i386/i386.c Fri Jul 19 09:20:55 2002
@@ -944,7 +944,7 @@ override_options ()
if (!ix86_cpu_string)
ix86_cpu_string = cpu_names [TARGET_CPU_DEFAULT];
if (!ix86_arch_string)
- ix86_arch_string = TARGET_64BIT ? "athlon-4" : "i386";
+ ix86_arch_string = cpu_names [TARGET_ARCH_DEFAULT];
if (ix86_cmodel_string != 0)
{
--- gcc/configure.in.arch Fri Jul 19 08:39:59 2002
+++ gcc/configure.in Fri Jul 19 09:22:23 2002
@@ -2691,6 +2691,7 @@ AC_SUBST(target_alias)
AC_SUBST(c_target_objs)
AC_SUBST(cxx_target_objs)
AC_SUBST(target_cpu_default)
+AC_SUBST(target_arch_default)
AC_SUBST_FILE(target_overrides)
AC_SUBST_FILE(host_overrides)
--- gcc/doc/install.texi.arch Sun Jun 30 23:23:28 2002
+++ gcc/doc/install.texi Fri Jul 19 10:34:34 2002
@@ -677,6 +677,14 @@ SPARC@. If configure does not recognize
603e, or ultrasparc) you provide, please check the configure script
for a complete list of supported models.
+@item --with-arch=@var{cpu}
+Also specify which cpu variant the compiler should generate code for
+by default. For some processors, like the i386 family,
+@option{--with-cpu-@var{cpu}} will only schedule things appropriately
+for @var{cpu}. the compiler will not generate any code that
+does not run on the i386 without @option{--with-arch-@var{cpu}}.
+This is currently only supported on the i386 family of processors.
+
@item --enable-altivec
Specify that the target supports AltiVec vector enhancements. This
option will adjust the ABI for AltiVec enhancements, as well as generate
--- gcc/mkconfig.sh.arch Sun Jun 23 08:33:42 2002
+++ gcc/mkconfig.sh Fri Jul 19 09:21:50 2002
@@ -19,6 +19,12 @@ if [ "$TARGET_CPU_DEFAULT" != "" ]; then
echo "#define TARGET_CPU_DEFAULT ($TARGET_CPU_DEFAULT)" >> ${output}T
fi
+# Define TARGET_ARCH_DEFAULT if the system wants one.
+# This substitutes for lots of *.h files.
+if [ "$TARGET_ARCH_DEFAULT" != "" ]; then
+ echo "#define TARGET_ARCH_DEFAULT ($TARGET_ARCH_DEFAULT)" >> ${output}T
+fi
+
# Provide defines for other target machine macros to be used everywhere.
for def in $TM_DEFINES; do
echo "#ifndef $def" | sed 's/=.*//' >> ${output}T
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-19 15:26 ` PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?) H. J. Lu
@ 2002-07-19 15:35 ` Daniel Jacobowitz
2002-07-19 16:35 ` H. J. Lu
0 siblings, 1 reply; 14+ messages in thread
From: Daniel Jacobowitz @ 2002-07-19 15:35 UTC (permalink / raw)
To: gcc, gcc-patches
On Fri, Jul 19, 2002 at 10:40:08AM -0700, H. J. Lu wrote:
> On Fri, Jul 19, 2002 at 09:02:07AM -0700, H. J. Lu wrote:
> > On Fri, Jul 19, 2002 at 04:25:00PM +0100, Richard Earnshaw wrote:
> > > > When I configure gcc for i686 with
> > > >
> > > > .../configure --target=i686-xxxxx
> > > >
> > > > I'd like to be able to make gcc generate code for i686 by default. It
> > > > is also useful for MIPS. I am thinking adding
> > > >
> > > > --with-default-ARCH=cpu
> > > >
> > > > or
> > > >
> > > > --with-default-CPU=cpu
> > > >
> > > > or
> > > >
> > > > --with-default-ISA=cpu
> > > >
> > > > Any comments?
> > > >
> > >
> > > What's wrong with the existing --with-cpu=... already supported by
> > > configure?
> > >
> >
> > Correct me if I am wrong. At least for x86, --with-cpu=i686 is no
> > different from --target=i686-xxxxx, as far as the default code
> > generation is concerned. For x86, there are -mcpu=xxx and -march=xxx.
> > -with-cpu=xxx sets the default -mcpu=xxx. I want something to set
> > the default -march=xxx. Looking at install.texi. --with-cpu should
> > be used to set -march=xxx for x86. But for x86, TARGET_CPU_DEFAULT
> > is for -mcpu=... I am looking for TARGET_ARCH_DEFAULT. --with-arch=...
> > will work for me.
> >
> >
>
> Here is a patch to add --with-arch=cpu.
>
>
> H.J.
Can't this be done at the driver level? We have different handling of
--with-cpu for every architecture already; I'd much rather not
proliferate that.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-19 15:35 ` Daniel Jacobowitz
@ 2002-07-19 16:35 ` H. J. Lu
2002-07-19 17:03 ` Daniel Jacobowitz
0 siblings, 1 reply; 14+ messages in thread
From: H. J. Lu @ 2002-07-19 16:35 UTC (permalink / raw)
To: gcc, gcc-patches
On Fri, Jul 19, 2002 at 01:43:14PM -0400, Daniel Jacobowitz wrote:
> > >
> > > Correct me if I am wrong. At least for x86, --with-cpu=i686 is no
> > > different from --target=i686-xxxxx, as far as the default code
> > > generation is concerned. For x86, there are -mcpu=xxx and -march=xxx.
> > > -with-cpu=xxx sets the default -mcpu=xxx. I want something to set
> > > the default -march=xxx. Looking at install.texi. --with-cpu should
> > > be used to set -march=xxx for x86. But for x86, TARGET_CPU_DEFAULT
> > > is for -mcpu=... I am looking for TARGET_ARCH_DEFAULT. --with-arch=...
> > > will work for me.
> > >
> > >
> >
> > Here is a patch to add --with-arch=cpu.
> >
> >
> > H.J.
>
> Can't this be done at the driver level? We have different handling of
>
What do you mean by that?
H.J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-19 16:35 ` H. J. Lu
@ 2002-07-19 17:03 ` Daniel Jacobowitz
2002-07-19 18:46 ` H. J. Lu
0 siblings, 1 reply; 14+ messages in thread
From: Daniel Jacobowitz @ 2002-07-19 17:03 UTC (permalink / raw)
To: H. J. Lu; +Cc: gcc
On Fri, Jul 19, 2002 at 10:46:23AM -0700, H. J. Lu wrote:
> On Fri, Jul 19, 2002 at 01:43:14PM -0400, Daniel Jacobowitz wrote:
> > > >
> > > > Correct me if I am wrong. At least for x86, --with-cpu=i686 is no
> > > > different from --target=i686-xxxxx, as far as the default code
> > > > generation is concerned. For x86, there are -mcpu=xxx and -march=xxx.
> > > > -with-cpu=xxx sets the default -mcpu=xxx. I want something to set
> > > > the default -march=xxx. Looking at install.texi. --with-cpu should
> > > > be used to set -march=xxx for x86. But for x86, TARGET_CPU_DEFAULT
> > > > is for -mcpu=... I am looking for TARGET_ARCH_DEFAULT. --with-arch=...
> > > > will work for me.
> > > >
> > > >
> > >
> > > Here is a patch to add --with-arch=cpu.
> > >
> > >
> > > H.J.
> >
> > Can't this be done at the driver level? We have different handling of
> >
>
> What do you mean by that?
I.E. make the GCC driver supply a default value of -mcpu if none is
specified on the command line, the same way sane programs set defaults.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-19 17:03 ` Daniel Jacobowitz
@ 2002-07-19 18:46 ` H. J. Lu
2002-07-20 6:05 ` Daniel Jacobowitz
0 siblings, 1 reply; 14+ messages in thread
From: H. J. Lu @ 2002-07-19 18:46 UTC (permalink / raw)
To: gcc
On Fri, Jul 19, 2002 at 01:49:52PM -0400, Daniel Jacobowitz wrote:
> > >
> > > Can't this be done at the driver level? We have different handling of
> > >
> >
> > What do you mean by that?
>
> I.E. make the GCC driver supply a default value of -mcpu if none is
> specified on the command line, the same way sane programs set defaults.
>
That is exactly what the gcc driver is doing today. My patch provides
a way to choose a different default value for -march at the configure
time. Without my change, the default value for -march is i386 for all
ia32 processors and it is fixed.
H.J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-19 18:46 ` H. J. Lu
@ 2002-07-20 6:05 ` Daniel Jacobowitz
2002-07-20 7:10 ` H. J. Lu
0 siblings, 1 reply; 14+ messages in thread
From: Daniel Jacobowitz @ 2002-07-20 6:05 UTC (permalink / raw)
To: H. J. Lu; +Cc: gcc
On Fri, Jul 19, 2002 at 10:55:47AM -0700, H. J. Lu wrote:
> On Fri, Jul 19, 2002 at 01:49:52PM -0400, Daniel Jacobowitz wrote:
> > > >
> > > > Can't this be done at the driver level? We have different handling of
> > > >
> > >
> > > What do you mean by that?
> >
> > I.E. make the GCC driver supply a default value of -mcpu if none is
> > specified on the command line, the same way sane programs set defaults.
> >
>
> That is exactly what the gcc driver is doing today. My patch provides
> a way to choose a different default value for -march at the configure
> time. Without my change, the default value for -march is i386 for all
> ia32 processors and it is fixed.
No, that's not what the driver does today. I mean that if the driver
was built with --with-arch=, and the driver does not see an -march=,
then the driver should supply one. Then we won't need any changes to
backends.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-20 6:05 ` Daniel Jacobowitz
@ 2002-07-20 7:10 ` H. J. Lu
2002-07-20 7:52 ` Daniel Jacobowitz
0 siblings, 1 reply; 14+ messages in thread
From: H. J. Lu @ 2002-07-20 7:10 UTC (permalink / raw)
To: gcc
On Fri, Jul 19, 2002 at 02:03:29PM -0400, Daniel Jacobowitz wrote:
> On Fri, Jul 19, 2002 at 10:55:47AM -0700, H. J. Lu wrote:
> > On Fri, Jul 19, 2002 at 01:49:52PM -0400, Daniel Jacobowitz wrote:
> > > > >
> > > > > Can't this be done at the driver level? We have different handling of
> > > > >
> > > >
> > > > What do you mean by that?
> > >
> > > I.E. make the GCC driver supply a default value of -mcpu if none is
> > > specified on the command line, the same way sane programs set defaults.
> > >
> >
> > That is exactly what the gcc driver is doing today. My patch provides
> > a way to choose a different default value for -march at the configure
> > time. Without my change, the default value for -march is i386 for all
> > ia32 processors and it is fixed.
>
> No, that's not what the driver does today. I mean that if the driver
> was built with --with-arch=, and the driver does not see an -march=,
> then the driver should supply one. Then we won't need any changes to
> backends.
I am really confused here. To me, my patch does exactly what you said
above. Wait, did you mean gcc.c should handle -march=, not i386.c?
I have an impresssion that most, if not all, "-mxxx" switches are
handled in the backend. I don't see why my patch should change that.
FWIW, "-mxxx" switches are backend dependent by definition. Did I miss
something here?
H.J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-20 7:10 ` H. J. Lu
@ 2002-07-20 7:52 ` Daniel Jacobowitz
2002-07-20 11:24 ` H. J. Lu
0 siblings, 1 reply; 14+ messages in thread
From: Daniel Jacobowitz @ 2002-07-20 7:52 UTC (permalink / raw)
To: H. J. Lu; +Cc: gcc
On Fri, Jul 19, 2002 at 11:10:53AM -0700, H. J. Lu wrote:
> On Fri, Jul 19, 2002 at 02:03:29PM -0400, Daniel Jacobowitz wrote:
> > On Fri, Jul 19, 2002 at 10:55:47AM -0700, H. J. Lu wrote:
> > > On Fri, Jul 19, 2002 at 01:49:52PM -0400, Daniel Jacobowitz wrote:
> > > > > >
> > > > > > Can't this be done at the driver level? We have different handling of
> > > > > >
> > > > >
> > > > > What do you mean by that?
> > > >
> > > > I.E. make the GCC driver supply a default value of -mcpu if none is
> > > > specified on the command line, the same way sane programs set defaults.
> > > >
> > >
> > > That is exactly what the gcc driver is doing today. My patch provides
> > > a way to choose a different default value for -march at the configure
> > > time. Without my change, the default value for -march is i386 for all
> > > ia32 processors and it is fixed.
> >
> > No, that's not what the driver does today. I mean that if the driver
> > was built with --with-arch=, and the driver does not see an -march=,
> > then the driver should supply one. Then we won't need any changes to
> > backends.
>
> I am really confused here. To me, my patch does exactly what you said
> above. Wait, did you mean gcc.c should handle -march=, not i386.c?
> I have an impresssion that most, if not all, "-mxxx" switches are
> handled in the backend. I don't see why my patch should change that.
>
> FWIW, "-mxxx" switches are backend dependent by definition. Did I miss
> something here?
Right now, we have a handful of architectures that support --with-cpu=.
They all do it in different ways. Most don't recognize it at all.
What I am suggesting is that the driver (gcc.c) should recognize
-march= and -mcpu= if TARGET_{ARCH,CPU}_DEFAULT are defined. The only
thing it should do with them is supply one if none is present. The
backend handles the rest, as before.
That way we don't keep having to do this for different platforms.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-20 7:52 ` Daniel Jacobowitz
@ 2002-07-20 11:24 ` H. J. Lu
2002-07-25 4:24 ` Michael Eager
0 siblings, 1 reply; 14+ messages in thread
From: H. J. Lu @ 2002-07-20 11:24 UTC (permalink / raw)
To: gcc
On Fri, Jul 19, 2002 at 02:15:49PM -0400, Daniel Jacobowitz wrote:
>
> Right now, we have a handful of architectures that support --with-cpu=.
> They all do it in different ways. Most don't recognize it at all.
> What I am suggesting is that the driver (gcc.c) should recognize
> -march= and -mcpu= if TARGET_{ARCH,CPU}_DEFAULT are defined. The only
> thing it should do with them is supply one if none is present. The
> backend handles the rest, as before.
I agree it is not a bad idea. However, different platforms have
different treatments for TARGET_{ARCH,CPU}_DEFAULT. Some of them treat
them as bit masks, while others treat them as indexes. Unify them or
not belongs to a different discussion.
While we are on this topic, we have -march, -mcpu and -mtune for
different backends. They may not have the same meaning even when the
option name is the same. It is particularly true for -mcpu. I don't
see if we can unify them without breaking backward compatibility.
H.J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?)
2002-07-20 11:24 ` H. J. Lu
@ 2002-07-25 4:24 ` Michael Eager
0 siblings, 0 replies; 14+ messages in thread
From: Michael Eager @ 2002-07-25 4:24 UTC (permalink / raw)
To: H. J. Lu, gcc
"H. J. Lu" wrote:
>
> On Fri, Jul 19, 2002 at 02:15:49PM -0400, Daniel Jacobowitz wrote:
> >
> > Right now, we have a handful of architectures that support --with-cpu=.
> > They all do it in different ways. Most don't recognize it at all.
> > What I am suggesting is that the driver (gcc.c) should recognize
> > -march= and -mcpu= if TARGET_{ARCH,CPU}_DEFAULT are defined. The only
> > thing it should do with them is supply one if none is present. The
> > backend handles the rest, as before.
>
>
> I agree it is not a bad idea. However, different platforms have
> different treatments for TARGET_{ARCH,CPU}_DEFAULT. Some of them treat
> them as bit masks, while others treat them as indexes. Unify them or
> not belongs to a different discussion.
>
> While we are on this topic, we have -march, -mcpu and -mtune for
> different backends. They may not have the same meaning even when the
> option name is the same. It is particularly true for -mcpu. I don't
> see if we can unify them without breaking backward compatibility.
Let me jump in here, even if a bit late.
Most of the architecture/cpu processing in config.gcc is pretty inconsistent
and jumbled. As you point out the interpretation of the -march, -mcpu, and
-mtune is not consistent across all architectures.
I don't think that the way to address this inconsistency is to add yet
another option. The architecture of is the first component of a target
triple/quad. If --target=i586-montavista-linux, there is no
need to also specify --with-arch=i586.
The interpretation of --with-cpu, for most architectures, is to specify
a specific processor model within an architecture. Not all architectures
accept this option. Worse, not all architectures use the same set of
flags to pass this information into the compiler. For example, MIPS uses
target_cpu_default to indicate whether or not gas is being used, not
which processor is the default.
[As a small bit of background, some time ago I developed a patch for
gcc-2.95.3 for MIPS which accepted --with-cpu, separated the gas flags from
the default cpu type, and correctly configured the default processor.
Unfortunately, I never got around to porting it to the CVS head.]
Daniel's suggestion that the driver, not cc1, handle the --with-cpu option
is interesting. This would also address another problem. Although cc1
knows the default cpu, the driver doesn't. This means that this cannot
be passed on to as. This is needed in the cases either when the assembler
should generate different op codes for different processor variants, or
flag instructions which are not valid on the target processor. This works
if the user specifies --mcpu= on the command line, but it doesn't work if
gcc is configured with --with-cpu=.
So, with some trepidation, let me suggest the following:
1) target_cpu_flags be created to capture options, like --gas=yes.
2) target_cpu_default have the processor flags.
3) target_cpu_name is the name of the processor specified in --with-cpu.
4) export each of these names to config.h so that they can be used
either by cc1 or gcc
5) add a specs file option to generate the target_cpu_name so that
this info can be passed either to cc1, as or other components,
as needed.
Comments? Suggestions?
--
Michael Eager eager@mvista.com 408-328-8426
MontaVista Software, Inc. 1237 E. Arques Ave., Sunnyvale, CA 94085
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2002-07-24 23:52 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-19 11:15 Should gcc configurted for CPU to generate code for CPU by default? H. J. Lu
2002-07-19 11:36 ` Philip Blundell
2002-07-19 12:56 ` Richard Earnshaw
2002-07-19 12:56 ` H. J. Lu
2002-07-19 15:26 ` PATCH: Add --with-arch=cpu (Re: Should gcc configurted for CPU to generate code for CPU by default?) H. J. Lu
2002-07-19 15:35 ` Daniel Jacobowitz
2002-07-19 16:35 ` H. J. Lu
2002-07-19 17:03 ` Daniel Jacobowitz
2002-07-19 18:46 ` H. J. Lu
2002-07-20 6:05 ` Daniel Jacobowitz
2002-07-20 7:10 ` H. J. Lu
2002-07-20 7:52 ` Daniel Jacobowitz
2002-07-20 11:24 ` H. J. Lu
2002-07-25 4:24 ` Michael Eager
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).