#define TEST(NUM,TMODE,VAL) \
|
#define TEST(NUM,TMODE,VAL) \
|
extern v##NUM##TMODE g_v##NUM##TMODE; \
|
extern v##NUM##TMODE g_v##NUM##TMODE; \
|
extern TMODE g_##TMODE; \
|
extern TMODE g_##TMODE; \
|
\
|
\
|
extern void pass_v##NUM##TMODE (v##NUM##TMODE); \
|
extern void pass_v##NUM##TMODE (v##NUM##TMODE); \
|
extern v##NUM##TMODE return_v##NUM##TMODE (void); \
|
extern v##NUM##TMODE return_v##NUM##TMODE (void); \
|
\
|
\
|
void \
|
void \
|
checkp_##NUM##TMODE (TMODE *p) \
|
checkp_##NUM##TMODE (TMODE *p) \
|
{ \
|
{ \
|
int i; \
|
int i; \
|
for (i = 0; i < NUM; i++) \
|
for (i = 0; i < NUM; i++) \
|
{ \
|
{ \
|
if (p[i] != g_##TMODE + i) \
|
if (p[i] != g_##TMODE + i) \
|
DEBUG_CHECK; \
|
DEBUG_CHECK; \
|
} \
|
} \
|
} \
|
} \
|
\
|
\
|
void \
|
void \
|
checkg_##NUM##TMODE (void) \
|
checkg_##NUM##TMODE (void) \
|
{ \
|
{ \
|
u##NUM##TMODE u; \
|
u##NUM##TMODE u; \
|
TMODE *p = u.a; \
|
TMODE *p = u.a; \
|
\
|
\
|
u.v = g_v##NUM##TMODE; \
|
u.v = g_v##NUM##TMODE; \
|
checkp_##NUM##TMODE (p); \
|
checkp_##NUM##TMODE (p); \
|
} \
|
} \
|
\
|
\
|
void \
|
void \
|
init_##NUM##TMODE (void) \
|
init_##NUM##TMODE (void) \
|
{ \
|
{ \
|
int i; \
|
int i; \
|
u##NUM##TMODE u; \
|
u##NUM##TMODE u; \
|
g_##TMODE = VAL; \
|
g_##TMODE = VAL; \
|
for (i = 0; i < NUM; i++) \
|
for (i = 0; i < NUM; i++) \
|
u.a[i] = VAL + i; \
|
u.a[i] = VAL + i; \
|
g_v##NUM##TMODE = u.v; \
|
g_v##NUM##TMODE = u.v; \
|
} \
|
} \
|
\
|
\
|
void \
|
void \
|
test_v##NUM##TMODE (void) \
|
test_v##NUM##TMODE (void) \
|
{ \
|
{ \
|
v##NUM##TMODE v; \
|
v##NUM##TMODE v; \
|
u##NUM##TMODE u; \
|
u##NUM##TMODE u; \
|
TMODE *p = u.a; \
|
TMODE *p = u.a; \
|
\
|
\
|
DEBUG_FPUTS ("v" #NUM #TMODE); \
|
DEBUG_FPUTS ("v" #NUM #TMODE); \
|
DEBUG_NL; \
|
DEBUG_NL; \
|
DEBUG_FPUTS (" global variable:"); \
|
DEBUG_FPUTS (" global variable:"); \
|
init_##NUM##TMODE (); \
|
init_##NUM##TMODE (); \
|
checkg_##NUM##TMODE (); \
|
checkg_##NUM##TMODE (); \
|
DEBUG_NL; \
|
DEBUG_NL; \
|
DEBUG_FPUTS (" pass global variable:"); \
|
DEBUG_FPUTS (" pass global variable:"); \
|
pass_v##NUM##TMODE (g_v##NUM##TMODE); \
|
pass_v##NUM##TMODE (g_v##NUM##TMODE); \
|
DEBUG_NL; \
|
DEBUG_NL; \
|
DEBUG_FPUTS (" pass local variable:"); \
|
DEBUG_FPUTS (" pass local variable:"); \
|
v = g_v##NUM##TMODE; \
|
v = g_v##NUM##TMODE; \
|
pass_v##NUM##TMODE (v); \
|
pass_v##NUM##TMODE (v); \
|
DEBUG_NL; \
|
DEBUG_NL; \
|
DEBUG_FPUTS (" function return:"); \
|
DEBUG_FPUTS (" function return:"); \
|
u.v = return_v##NUM##TMODE (); \
|
u.v = return_v##NUM##TMODE (); \
|
checkp_##NUM##TMODE (p); \
|
checkp_##NUM##TMODE (p); \
|
DEBUG_NL; \
|
DEBUG_NL; \
|
}
|
}
|
|
|