linux-mips
[Top] [All Lists]

Re: Q: -mcpu= vs. -march= for VR41xx specific instructions

To: linux-mips@oss.sgi.com
Subject: Re: Q: -mcpu= vs. -march= for VR41xx specific instructions
From: Thiemo Seufer <ica2_ts@csv.ica.uni-stuttgart.de>
Date: Thu, 14 Mar 2002 19:10:31 +0100
In-reply-to: <20020314172502.GA5365@convergence.de>
References: <20020314172502.GA5365@convergence.de>
Sender: owner-linux-mips@oss.sgi.com
User-agent: Mutt/1.3.27i
Johannes Stezenbach wrote:
[snip]
> I use a toolchain based on binutils 2.12.90.0.1 and
> gcc 2.95.4-debian.
> 
> To use that instructions I have to pass -march=vr4100
> to the assembler. Unfortunately, -march and -mcpu cannot
> be used together, so first I changed arch/mips/Makefile
> from
>   GCCFLAGS += -mcpu=r4600 -mips2 -Wa,--trap

If this gcc already supports vr4100 you could use

        GCCFLAGS += -mcpu=vr4100 -mips2 -Wa,--trap

> to
>   GCCFLAGS += -Wa,-march=vr4100 -mips2 -Wa,--trap
> 
> This works, but I am unshure what the effects of the
> missing -mcpu switch are wrt the code generated by gcc.
> AFAICS the kernel still works, but is the generated
> code slower or subtly incorrect?

I don't know what the compiler does then. I assume it defaults to
r3000 scheduling/opcodes.

The assembler will emit vr4100 code scheduled for vr4100. If you still
want r4600 scheduling (I doubt so), you could add

        -Wa,-mtune=r4600

to the GCCFLAGS line.

[snip]
> So I think I need either:
> - make gas accept -march=vr4100 along with -mcpu=r4600 (or -mcpu=r4100?)

-mcpu is deprecated and remains for backward compatibility to gcc < 3.0.
it should be replaced by -march/-mtune.

> - or have a ".set vr4100" directive to enable the vr41xx specific
>   instructions where needed, without changing the flags in the
>   ELF header

I would suggest the syntax

        .set march=vr4100

This is in my TODO list for gas, but don't hold your breath.

> - or make the linker link modules with different (but compatible) e_flags
> - or is "GCCFLAGS += -Wa,-march=vr4100 -mips2 -Wa,--trap" perfect?
> 
> 
> Please, does anybody have suggestions how to solve this issue?

The real fix is to use a newer compiler (gcc >= 3). :-)


Thiemo

<Prev in Thread] Current Thread [Next in Thread>