From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by oss.sgi.com (8.11.2/8.11.3) id g2EHNkv15117 for linux-mips-outgoing; Thu, 14 Mar 2002 09:23:46 -0800 Received: from hell (buserror-extern.convergence.de [212.84.236.66]) by oss.sgi.com (8.11.2/8.11.3) with SMTP id g2EHNe915114 for ; Thu, 14 Mar 2002 09:23:40 -0800 Received: from js by hell with local (Exim 3.35 #1 (Debian)) id 16lYyM-0001Py-00 for ; Thu, 14 Mar 2002 18:25:02 +0100 Date: Thu, 14 Mar 2002 18:25:02 +0100 From: Johannes Stezenbach To: linux-mips@oss.sgi.com Subject: Q: -mcpu= vs. -march= for VR41xx specific instructions Message-ID: <20020314172502.GA5365@convergence.de> Mail-Followup-To: Johannes Stezenbach , linux-mips@oss.sgi.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.27i Sender: owner-linux-mips@oss.sgi.com Precedence: bulk I am trying to implement power management for an embedded device using a NEC VR4120 CPU core, which has the special instructions "standby", "suspend" and "hibernate". 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 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? Then I the tried to compile the kernel with the standard GCCFLAGS, setting -march=vr4100 only for the one file which contains the standby/suspend/hibernate instructions. This fails a link time with: mips-linux-ld: power.o: uses different e_flags (0x1100) fields than previous modules (0x1000) Bad value: failed to merge target specific data of file power.o I looked at an old arch/mips/Makefile from http://sourceforge.net/projects/linux-vr/, which has: CFLAGS += -mcpu=r4600 -mips2 -Wa,-m4100,--trap This does not work with my toolchain. So I think I need either: - make gas accept -march=vr4100 along with -mcpu=r4600 (or -mcpu=r4100?) - or have a ".set vr4100" directive to enable the vr41xx specific instructions where needed, without changing the flags in the ELF header - 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? Regards, Johannes