[patch, mips] Micromips delay slot fix
Maciej W. Rozycki
macro@codesourcery.com
Mon Jun 10 22:13:00 GMT 2013
On Mon, 10 Jun 2013, Steve Ellcey wrote:
> We found a bug in the micromips implementation where the branch delay slot
> was not getting filled for micromips. You can reproduce this with a program
> that just has an empty main function. Andrew Bennett created this fix for
> it and we would like to check it in. I am submitting it for Andrew since he
> doesn't have write access.
Your fix aside shouldn't empty main expand simply to:
jrc $ra
? There's no delay slot there.
> diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
> index 2fdc79d..f18ab50 100644
> --- a/gcc/config/mips/mips.md
> +++ b/gcc/config/mips/mips.md
> @@ -704,7 +704,9 @@
>
> ;; Is it a single instruction?
> (define_attr "single_insn" "no,yes"
> - (symbol_ref "(get_attr_length (insn) == (TARGET_MIPS16 ? 2 : 4)
> + (symbol_ref "(((TARGET_MIPS16 || TARGET_MICROMIPS)
> + && get_attr_length (insn) == 2)
> + || (!TARGET_MIPS16 && get_attr_length (insn) == 4)
> ? SINGLE_INSN_YES : SINGLE_INSN_NO)"))
Is it safe to assume an RTL insn whose length is 4 has only a single
machine instruction in the microMIPS mode? What's the difference to the
MIPS16 instruction set here?
Maciej
More information about the Gcc-patches
mailing list