aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2013-07-22 10:18:52 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2013-07-22 10:18:52 +0000
commitd5a6ef827fe40c01e6284b5bbf3c2e987987445c (patch)
treef4b89b6167c74cc0dbea087a4cbcfc74d4df3979
parent14ab1eaf2a303262fb2b11ee456eb5b984b83c65 (diff)
downloadgcc-d5a6ef827fe40c01e6284b5bbf3c2e987987445c.zip
gcc-d5a6ef827fe40c01e6284b5bbf3c2e987987445c.tar.gz
gcc-d5a6ef827fe40c01e6284b5bbf3c2e987987445c.tar.bz2
avr.c (avr_out_xload): No SBIS around LPM so that instruction sequence is 1 byte shorter.
* config/avr/avr.c (avr_out_xload): No SBIS around LPM so that instruction sequence is 1 byte shorter. From-SVN: r201121
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/avr/avr.c8
2 files changed, 7 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f0260dd..98cc565 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-07-22 Georg-Johann Lay <avr@gjlay.de>
+
+ * config/avr/avr.c (avr_out_xload): No SBIS around LPM so that
+ instruction sequence is 1 byte shorter.
+
2013-07-22 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (nonlocal_goto_receiver): Delete insn if
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 6d95c10..14a3eee7 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -3079,14 +3079,10 @@ avr_out_xload (rtx insn ATTRIBUTE_UNUSED, rtx *op, int *plen)
xop[2] = lpm_addr_reg_rtx;
xop[3] = AVR_HAVE_LPMX ? op[0] : lpm_reg_rtx;
- if (plen)
- *plen = 0;
+ avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, -1);
avr_asm_len ("sbrc %1,7" CR_TAB
- "ld %3,%a2" CR_TAB
- "sbrs %1,7", xop, plen, 3);
-
- avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1);
+ "ld %3,%a2", xop, plen, 2);
if (REGNO (xop[0]) != REGNO (xop[3]))
avr_asm_len ("mov %0,%3", xop, plen, 1);