improve PIC_STRING
This commit is contained in:
@@ -61,35 +61,33 @@ ssize_t write(int, void const *, size_t);
|
|||||||
|
|
||||||
#if defined(__i386__) /*{*/
|
#if defined(__i386__) /*{*/
|
||||||
#define PIC_STRING(value, var) \
|
#define PIC_STRING(value, var) \
|
||||||
char const *var; \
|
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"call 0f; .asciz \"" value "\"; \
|
"call 0f; .asciz \"" value "\"; \
|
||||||
0: pop %0;" : "=a"(var) : \
|
0: pop %0;" : "=r"(var) : \
|
||||||
); \
|
)
|
||||||
return var;
|
|
||||||
#elif defined(__arm__) /*}{*/
|
#elif defined(__arm__) /*}{*/
|
||||||
#define PIC_STRING(value, var) \
|
#define PIC_STRING(value, var) \
|
||||||
char const *var; \
|
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"mov r0,pc; ret; \
|
"mov %0,pc; b 0f; \
|
||||||
.asciz \"" value "\"; .balign 4" : "=a"(var) : \
|
.asciz \"" value "\"; .balign 4; \
|
||||||
); \
|
0: " : "=r"(var) \
|
||||||
return var;
|
)
|
||||||
#elif defined(__mips__) /*}{*/
|
#elif defined(__mips__) /*}{*/
|
||||||
#define PIC_STRING(value, var) \
|
#define PIC_STRING(value, var) \
|
||||||
register char const *var; \
|
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
".set noreorder; bal 0f; move %0,$31; .set reorder; \
|
".set noreorder; bal 0f; move %0,$31; .set reorder; \
|
||||||
.asciz \"" value "\"; .balign 4; \
|
.asciz \"" value "\"; .balign 4; \
|
||||||
0: " \
|
0: " \
|
||||||
: "=r"(var) : : "ra" \
|
: "=r"(var) : : "ra" \
|
||||||
); \
|
)
|
||||||
return var;
|
|
||||||
#endif /*}*/
|
#endif /*}*/
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_STRCON(name, value) \
|
#define DEBUG_STRCON(name, strcon) \
|
||||||
static char const *name(void) { PIC_STRING(value, rv); }
|
static char const *name(void) { \
|
||||||
|
register char const *rv; PIC_STRING(strcon, rv); \
|
||||||
|
return rv; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef __arm__ /*{*/
|
#ifdef __arm__ /*{*/
|
||||||
|
|||||||
Reference in New Issue
Block a user