Skip to contentSkip to conversation

gcc: mips32 vs mips3

DISCUSSION Marian Jancar 2 participants 4 messages Mar 6, 2009 – Apr 6, 2009 MIPS

lore
Share & tools
lore
#0 lore raw

Hi,

which option is supposed to compile faster code, -mips3 or -mips32?

Marian

#1 lore raw
Quoted 1 line · Marian Jancar

which option is supposed to compile faster code, -mips3 or -mips32?

That question doesn't quite make sense. A MIPS32 processor can't execute
MIPS III code and a MIPS III processor can't execute MIPS32 code. Only a MIPS64 processor could execute code compiled for either MIPS32 or MIPS III. So choose the option to match the architecture of your processor.

Ralf

#2 lore raw
Quoted 8 lines · Ralf Baechle
Quoted 1 line · Marian Jancar

which option is supposed to compile faster code, -mips3 or -mips32?

That question doesn't quite make sense. A MIPS32 processor can't execute
MIPS III code and a MIPS III processor can't execute MIPS32 code. Only a MIPS64 processor could execute code compiled for either MIPS32 or MIPS III. So choose the option to match the architecture of your processor.

The processor in question is the processos in the Atheros 802.11 SoC AR5312, 4Kc AFAIK. OpenWRT uses -mips32 for this target but the GPL SDK for NanoStation
uses -march=r4600. Both options produce code that runs without oops
or any other immediately manifested issues.
So you are right, the correct question is "-mips32 vs -march=r4600".
I got confused because I left some bits compiled with -march=4600 when recompiling with -mips32 and gcc complained about it being compiled
for MIPS III when linking.

Marian

# cat /proc/cpuinfo
system type             : Atheros AR2313
processor               : 0
cpu model               : MIPS 4Kc V0.10
BogoMIPS                : 179.40
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 16
extra interrupt vector  : yes
hardware watchpoint     : yes
ASEs implemented        :
VCED exceptions         : not available
VCEI exceptions         : not available
#3 lore raw
Quoted 11 lines · Marian Jancar
Quoted 4 lines

That question doesn't quite make sense. A MIPS32 processor can't execute
MIPS III code and a MIPS III processor can't execute MIPS32 code. Only a MIPS64 processor could execute code compiled for either MIPS32 or MIPS III. So choose the option to match the architecture of your processor.

The processor in question is the processos in the Atheros 802.11 SoC AR5312, 4Kc AFAIK.
OpenWRT uses -mips32 for this target but the GPL SDK for NanoStation uses -march=r4600. Both options produce code that runs without oops or any other immediately manifested issues.

Quoted 4 lines

So you are right, the correct question is "-mips32 vs -march=r4600". I got confused because I left some bits compiled with -march=4600 when recompiling with -mips32 and gcc complained about it being compiled for MIPS III when linking.

That's correct because the the R4600 is MIPS III but but when building o32 binaries gcc will automatically limit itself to the 32-bit subset of MIPS III which is MIPS II. MIPS II in turn is a subset of MIPS32. So that's actually safe but it won't deliver optimal code.

Occasionally one may have to cheat to the compiler like this for example if the compiler is very (VERY!!!) old and doesn't know about the 4K or MIPS32 yet. Not recommended for those who don't know what gcc will actually do with the options.

Ralf