aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2012-03-20 17:38:29 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2012-03-20 17:38:29 +0000
commit73f46872b4d140254e9d167138e2e8e92be989c3 (patch)
tree291f5a2d943b5759e1cc8eef7137007097263ba4 /gcc
parent1056a3604bdd0d5ce389936615bd3061b638deb6 (diff)
downloadgcc-73f46872b4d140254e9d167138e2e8e92be989c3.zip
gcc-73f46872b4d140254e9d167138e2e8e92be989c3.tar.gz
gcc-73f46872b4d140254e9d167138e2e8e92be989c3.tar.bz2
progmem.h (pgm_read_char): Define depending on __AVR_HAVE_LPMX__
* gcc.target/avr/progmem.h (pgm_read_char): Define depending on __AVR_HAVE_LPMX__ From-SVN: r185583
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/avr/progmem.h11
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dfdee37..124ea72 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2012-03-20 Georg-Johann Lay <avr@gjlay.de>
+ * gcc.target/avr/progmem.h (pgm_read_char): Define depending on
+ __AVR_HAVE_LPMX__
+
+2012-03-20 Georg-Johann Lay <avr@gjlay.de>
+
PR target/49868
* gcc.target/avr/torture/addr-space-2.h: New file.
* gcc.target/avr/torture/addr-space-2-g.h: New test.
diff --git a/gcc/testsuite/gcc.target/avr/progmem.h b/gcc/testsuite/gcc.target/avr/progmem.h
index d5e86c9..17bb771 100644
--- a/gcc/testsuite/gcc.target/avr/progmem.h
+++ b/gcc/testsuite/gcc.target/avr/progmem.h
@@ -5,6 +5,7 @@
static const char __c[] PROGMEM = (s); \
&__c[0];}))
+#ifdef __AVR_HAVE_LPMX__
#define pgm_read_char(addr) \
(__extension__({ \
unsigned int __addr16 = (unsigned int)(addr); \
@@ -12,3 +13,13 @@
__asm__ ("lpm %0, %a1" \
: "=r" (__result) : "z" (__addr16)); \
__result; }))
+#else
+#define pgm_read_char(addr) \
+ (__extension__({ \
+ unsigned int __addr16 = (unsigned int)(addr); \
+ char __result; \
+ __asm__ ("lpm" "\n\t" \
+ "mov %0, r0" \
+ : "=r" (__result) : "z" (__addr16)); \
+ __result; }))
+#endif