153 |
{ |
{ |
154 |
/* NOTE: the register at this point must be saved by hand because |
/* NOTE: the register at this point must be saved by hand because |
155 |
longjmp restore them */ |
longjmp restore them */ |
156 |
|
#ifdef __sparc__ |
157 |
|
/* We have to stay in the same register window as our caller, |
158 |
|
* thus this trick. |
159 |
|
*/ |
160 |
|
__asm__ __volatile__("restore\n\t" |
161 |
|
"mov\t%o0, %i0"); |
162 |
|
#endif |
163 |
#ifdef reg_EAX |
#ifdef reg_EAX |
164 |
env->regs[R_EAX] = EAX; |
env->regs[R_EAX] = EAX; |
165 |
#endif |
#endif |
416 |
/* execute the generated code */ |
/* execute the generated code */ |
417 |
tc_ptr = tb->tc_ptr; |
tc_ptr = tb->tc_ptr; |
418 |
gen_func = (void *)tc_ptr; |
gen_func = (void *)tc_ptr; |
419 |
|
#ifdef __sparc__ |
420 |
|
__asm__ __volatile__("call %0\n\t" |
421 |
|
" mov %%o7,%%i0" |
422 |
|
: /* no outputs */ |
423 |
|
: "r" (gen_func) |
424 |
|
: "i0", "i1", "i2", "i3", "i4", "i5"); |
425 |
|
#else |
426 |
gen_func(); |
gen_func(); |
427 |
|
#endif |
428 |
} |
} |
429 |
} |
} |
430 |
ret = env->exception_index; |
ret = env->exception_index; |