diff options
Diffstat (limited to 'toolchain/gcc/3.4.1/400-mips-delay-slot.patch')
-rw-r--r-- | toolchain/gcc/3.4.1/400-mips-delay-slot.patch | 46 |
1 files changed, 0 insertions, 46 deletions
diff --git a/toolchain/gcc/3.4.1/400-mips-delay-slot.patch b/toolchain/gcc/3.4.1/400-mips-delay-slot.patch deleted file mode 100644 index 8111dba185..0000000000 --- a/toolchain/gcc/3.4.1/400-mips-delay-slot.patch +++ /dev/null @@ -1,46 +0,0 @@ -http://www.linux-mips.org/archives/linux-mips/2004-09/msg00000.html - -Atsushi Nemoto <anemo@mba.ocn.ne.jp> writes: ->/ Is this a get_user's problem or gcc's?/ - -The latter. gcc is putting the empty asm: - - __asm__ ("":"=r" (__gu_val)); - -into the delay slot of the call. - -Part of the problem is that gcc estimates the length of an asm to be the -number of instruction separators + 1. This means that it estimates the -asm above to be one instruction long, which is perhaps a little silly -for an empty string. - -But the real problem is that gcc should never trust this estimate anyway, -since each "instruction" could obviously be a multi-instruction macro. -gcc should certainly never put asms into delay slots. - -FWIW, I don't think the bug is specific to 3.3 or 3.4. It could -probably trigger for other gcc versions too. It is highly dependent -on scheduling though. - -The attached 3.4.x patch fixes the problem there, but if you want to work -around it for old versions, just avoid using empty asms if you can, -or make them volatile if you can't. - -Of course, the problem isn't confined to empty asms. If you have an asm -with a single, multi-instruction macro, gcc might try putting that in a -delay slot too. You should at least get an assembler warning in that case. - -Richard - - ---- gcc-3.4.1/gcc/config/mips/mips.md-orig 2004-09-02 10:38:36.000000000 -0500 -+++ gcc-3.4.1/gcc/config/mips/mips.md 2004-09-02 10:38:42.000000000 -0500 -@@ -251,7 +251,7 @@ - - ;; Can the instruction be put into a delay slot? - (define_attr "can_delay" "no,yes" -- (if_then_else (and (eq_attr "type" "!branch,call,jump") -+ (if_then_else (and (eq_attr "type" "!branch,call,jump,multi") - (and (eq_attr "hazard" "none") - (eq_attr "single_insn" "yes"))) - (const_string "yes") |