diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2012-03-20 17:38:29 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2012-03-20 17:38:29 +0000 |
commit | 73f46872b4d140254e9d167138e2e8e92be989c3 (patch) | |
tree | 291f5a2d943b5759e1cc8eef7137007097263ba4 /gcc | |
parent | 1056a3604bdd0d5ce389936615bd3061b638deb6 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/progmem.h | 11 |
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 |