Following the discussion here: http://gcc.gnu.org/ml/gcc/2011-05/msg00216.html
this patch makes -fno-delayed-branch imply -Wa,-O1. It also makes sure that we explicitly assemble with -O0 by default. (Previously, we'd assemble with -O0 if the user specified -O0, but assemble with the default -O2 if the user specified no -O option at all.) Tested on mipsisa64-elf and mips-linux-gnu. Also tested by examining the objects produced by -fno-delayed-branch, and by various other option combinations. Applied to trunk. Richard gcc/ * config/mips/mips.h (SUBTARGET_ASM_OPTIMIZING_SPEC): Delete. (ASM_SPEC): Add a -O* option here. Pass -O0 for -noasmopt, -O1 for -fno-delayed-branch, -O2 if optimization is enabled, and -O0 otherwise. (EXTRA_SPECS): Remove subtarget_asm_optimizing_spec. Index: gcc/config/mips/mips.h =================================================================== --- gcc/config/mips/mips.h 2011-05-22 22:19:08.000000000 +0100 +++ gcc/config/mips/mips.h 2011-05-22 22:29:17.000000000 +0100 @@ -1079,14 +1079,6 @@ #define NM_FLAGS "-Bn" #endif -/* SUBTARGET_ASM_OPTIMIZING_SPEC handles passing optimization options - to the assembler. It may be overridden by subtargets. */ -#ifndef SUBTARGET_ASM_OPTIMIZING_SPEC -#define SUBTARGET_ASM_OPTIMIZING_SPEC "\ -%{noasmopt:-O0} \ -%{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}}" -#endif - /* SUBTARGET_ASM_DEBUGGING_SPEC handles passing debugging options to the assembler. It may be overridden by subtargets. @@ -1123,7 +1115,7 @@ #define ASM_SPEC "\ %{mmt} %{mno-mt} \ %{mfix-vr4120} %{mfix-vr4130} \ %{mfix-24k} \ -%(subtarget_asm_optimizing_spec) \ +%{noasmopt:-O0; O0|fno-delayed-branch:-O1; O*:-O2; :-O1} \ %(subtarget_asm_debugging_spec) \ %{mabi=*} %{!mabi=*: %(asm_abi_default_spec)} \ %{mgp32} %{mgp64} %{march=*} %{mxgot:-xgot} \ @@ -1181,7 +1173,6 @@ #define CPP_SPEC "%(subtarget_cpp_spec)" #define EXTRA_SPECS \ { "subtarget_cc1_spec", SUBTARGET_CC1_SPEC }, \ { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \ - { "subtarget_asm_optimizing_spec", SUBTARGET_ASM_OPTIMIZING_SPEC }, \ { "subtarget_asm_debugging_spec", SUBTARGET_ASM_DEBUGGING_SPEC }, \ { "subtarget_asm_spec", SUBTARGET_ASM_SPEC }, \ { "asm_abi_default_spec", "-" MULTILIB_ABI_DEFAULT }, \