www.pudn.com > MP3+JPEG.rar > unExtMem.h
// Description: Support long pointer for near pointer compiler
// Author :J.K.Chen and Taylor Wang
// Date :2004/3/15
////////////////////////////////////////////////////////////////
#ifndef __UNEXTMEM_H__
#define __UNEXTMEM_H__
#define LPCONST __attribute__((section(".code")))
#define GETSEG(label) ({ \
register unsigned int __t; \
__asm__ __volatile__ ("%0 = seg %1" \
:"=r"(__t) \
:"p"(&label) \
); \
__t; \
})
#define GETHI6(label) ({ \
register unsigned int __t; \
__asm__ __volatile__ ("%0 = high6 %1" \
:"=r"(__t) \
:"p"(&label) \
); \
__t; \
})
#define LB2LP(label) ({ \
register union { \
unsigned long oval; \
unsigned int ival[2]; \
}__t; \
__asm__ ("%0 = offset %2\n" \
"\t%1 = seg %2" \
: \
:"r"(__t.ival[0]),"r"(__t.ival[1]), \
"p"(&label) \
); \
__t.oval; \
})
#define SP2LP(b) \
(LPTR)(UINT) b
#define GLPSTR(content) ({ \
static LPCONST unsigned int __farstr[] = content; \
LB2LP(__farstr); \
})
#define T_LHEAD(name) \
__asm__ (".public _"###name##"\n" \
".code\n" \
"_"###name##":" \
);
#define T_LLIST(element) \
__asm__(".dw offset _"###element \
",seg _"###element);
void WVUL(unsigned long paddr,unsigned long value);
unsigned long RVUL(unsigned long paddr);
void WVUI(unsigned long paddr, int value);
unsigned int RVUI(unsigned long paddr);
void WLPUL(unsigned int seg,unsigned int offset,unsigned long value);
unsigned long RLPUL(unsigned int seg,unsigned int offset);
void WLPUI(unsigned int seg,unsigned int offset, int value);
unsigned int RLPUI(unsigned int seg,unsigned int offset);
#endif