Index: include/avr/ina90.h =================================================================== RCS file: /home/cvs/avr-libc/avr-libc/include/avr/ina90.h,v retrieving revision 1.2 diff -u -u -r1.2 ina90.h --- include/avr/ina90.h 26 Aug 2002 16:00:25 -0000 1.2 +++ include/avr/ina90.h 6 Oct 2002 21:41:42 -0000 @@ -49,72 +49,10 @@ #define _SLEEP() __asm__ __volatile__ ("sleep") #define _OPC(op) __asm__ __volatile__ (".word %0" : : "n" (op)) -#define __LPM_enhanced__(addr) ({ \ - unsigned short __addr16 = (unsigned short)(addr); \ - unsigned char __result; \ - __asm__ ( \ - "lpm %0, Z" \ - : "=r" (__result) \ - : "z" (__addr16) \ - ); \ - __result; \ - }) - -#define __LPM_classic__(addr) ({ \ - unsigned short __addr16 = (unsigned short)(addr); \ - unsigned char __result; \ - __asm__ ( \ - "lpm" "\n\t" \ - "mov %0, r0" \ - : "=r" (__result) \ - : "z" (__addr16) \ - : "r0" \ - ); \ - __result; \ - }) - -/* Only for devices with more than 64K of program memory. - RAMPZ must be defined (see iom103.h). */ - -#define __ELPM_enhanced__(addr) ({ \ - unsigned long __addr32 = (unsigned long)(addr); \ - unsigned char __result; \ - __asm__ ( \ - "out %2, %C1" "\n\t" \ - "movw r30, %1" "\n\t" \ - "elpm %0, Z" \ - : "=r" (__result) \ - : "r" (__addr32), \ - "I" (_SFR_IO_ADDR(RAMPZ)) \ - : "r30", "r31" \ - ); \ - __result; \ - }) - -#define __ELPM_classic__(addr) ({ \ - unsigned long __addr32 = (unsigned long)(addr); \ - unsigned char __result; \ - __asm__ ( \ - "out %2, %C1" "\n\t" \ - "mov r31, %B1" "\n\t" \ - "mov r30, %A1" "\n\t" \ - "elpm" "\n\t" \ - "mov %0, r0" \ - : "=r" (__result) \ - : "r" (__addr32), \ - "I" (_SFR_IO_ADDR(RAMPZ)) \ - : "r0", "r30", "r31" \ - ); \ - __result; \ - }) - -#if defined (__AVR_ENHANCED__) -#define _LPM(addr) __LPM_enhanced__(addr) -#define _ELPM(addr) __ELPM_enhanced__(addr) -#else -#define _LPM(addr) __LPM_classic__(addr) -#define _ELPM(addr) __ELPM_classic__(addr) -#endif +/* _LPM, _ELPM */ +#include +#define _LPM(x) __LPM(x) +#define _ELPM(x) __ELPM(x) /* _EEGET, _EEPUT */ #include Index: include/avr/pgmspace.h =================================================================== RCS file: /home/cvs/avr-libc/avr-libc/include/avr/pgmspace.h,v retrieving revision 1.3 diff -u -u -r1.3 pgmspace.h --- include/avr/pgmspace.h 26 Aug 2002 16:00:25 -0000 1.3 +++ include/avr/pgmspace.h 6 Oct 2002 21:49:18 -0000 @@ -34,6 +34,7 @@ */ /** \defgroup avr_pgmspace Program Space String Utilities + \code #include \endcode \code #include \endcode The functions in this module provide interfaces for a program to access @@ -52,8 +53,6 @@ #define __need_size_t #include -/* #include */ - #ifndef __ATTR_CONST__ #define __ATTR_CONST__ __attribute__((__const__)) #endif @@ -86,13 +85,78 @@ #define PSTR(s) ({static char __c[] PROGMEM = (s); __c;}) -/* _LPM(), _ELPM() */ -#include +#define __LPM_enhanced__(addr) ({ \ + unsigned short __addr16 = (unsigned short)(addr); \ + unsigned char __result; \ + __asm__ ( \ + "lpm %0, Z" \ + : "=r" (__result) \ + : "z" (__addr16) \ + ); \ + __result; \ + }) + +#define __LPM_classic__(addr) ({ \ + unsigned short __addr16 = (unsigned short)(addr); \ + unsigned char __result; \ + __asm__ ( \ + "lpm" "\n\t" \ + "mov %0, r0" \ + : "=r" (__result) \ + : "z" (__addr16) \ + : "r0" \ + ); \ + __result; \ + }) + +/* Only for devices with more than 64K of program memory. + RAMPZ must be defined (see iom103.h). */ + +#define __ELPM_enhanced__(addr) ({ \ + unsigned long __addr32 = (unsigned long)(addr); \ + unsigned char __result; \ + __asm__ ( \ + "out %2, %C1" "\n\t" \ + "movw r30, %1" "\n\t" \ + "elpm %0, Z" \ + : "=r" (__result) \ + : "r" (__addr32), \ + "I" (_SFR_IO_ADDR(RAMPZ)) \ + : "r30", "r31" \ + ); \ + __result; \ + }) + +#define __ELPM_classic__(addr) ({ \ + unsigned long __addr32 = (unsigned long)(addr); \ + unsigned char __result; \ + __asm__ ( \ + "out %2, %C1" "\n\t" \ + "mov r31, %B1" "\n\t" \ + "mov r30, %A1" "\n\t" \ + "elpm" "\n\t" \ + "mov %0, r0" \ + : "=r" (__result) \ + : "r" (__addr32), \ + "I" (_SFR_IO_ADDR(RAMPZ)) \ + : "r0", "r30", "r31" \ + ); \ + __result; \ + }) + +#if defined (__AVR_ENHANCED__) +#define __LPM(addr) __LPM_enhanced__(addr) +#define __ELPM(addr) __ELPM_enhanced__(addr) +#else +#define __LPM(addr) __LPM_classic__(addr) +#define __ELPM(addr) __ELPM_classic__(addr) +#endif + static inline unsigned char __lpm_inline(unsigned short __addr) __ATTR_CONST__; static inline unsigned char __lpm_inline(unsigned short __addr) { - return _LPM(__addr); + return __LPM(__addr); } #ifdef RAMPZ /* >64K program memory (ATmega103) */ @@ -110,7 +174,7 @@ static inline unsigned char __elpm_inline(unsigned long __addr) __ATTR_CONST__; static inline unsigned char __elpm_inline(unsigned long __addr) { - return _ELPM(__addr); + return __ELPM(__addr); } #endif