Revision ba1c6e37 op-i386.c
b/op-i386.c | ||
---|---|---|
10 | 10 |
|
11 | 11 |
#define NULL 0 |
12 | 12 |
|
13 |
typedef struct FILE FILE; |
|
14 |
|
|
15 |
extern FILE *stderr; |
|
16 |
extern int fprintf(FILE *, const char *, ...); |
|
17 |
|
|
13 | 18 |
#ifdef __i386__ |
14 | 19 |
register int T0 asm("esi"); |
15 | 20 |
register int T1 asm("ebx"); |
16 | 21 |
register int A0 asm("edi"); |
17 |
register struct CPU86State *env asm("ebp"); |
|
22 |
register struct CPUX86State *env asm("ebp");
|
|
18 | 23 |
#define FORCE_RET() asm volatile ("ret"); |
19 | 24 |
#endif |
20 | 25 |
#ifdef __powerpc__ |
21 | 26 |
register int T0 asm("r24"); |
22 | 27 |
register int T1 asm("r25"); |
23 | 28 |
register int A0 asm("r26"); |
24 |
register struct CPU86State *env asm("r27"); |
|
29 |
register struct CPUX86State *env asm("r27");
|
|
25 | 30 |
#define FORCE_RET() asm volatile ("blr"); |
26 | 31 |
#endif |
27 | 32 |
#ifdef __arm__ |
28 | 33 |
register int T0 asm("r4"); |
29 | 34 |
register int T1 asm("r5"); |
30 | 35 |
register int A0 asm("r6"); |
31 |
register struct CPU86State *env asm("r7"); |
|
36 |
register struct CPUX86State *env asm("r7");
|
|
32 | 37 |
#define FORCE_RET() asm volatile ("mov pc, lr"); |
33 | 38 |
#endif |
34 | 39 |
#ifdef __mips__ |
35 | 40 |
register int T0 asm("s0"); |
36 | 41 |
register int T1 asm("s1"); |
37 | 42 |
register int A0 asm("s2"); |
38 |
register struct CPU86State *env asm("s3"); |
|
43 |
register struct CPUX86State *env asm("s3");
|
|
39 | 44 |
#define FORCE_RET() asm volatile ("jr $31"); |
40 | 45 |
#endif |
41 | 46 |
#ifdef __sparc__ |
42 | 47 |
register int T0 asm("l0"); |
43 | 48 |
register int T1 asm("l1"); |
44 | 49 |
register int A0 asm("l2"); |
45 |
register struct CPU86State *env asm("l3"); |
|
50 |
register struct CPUX86State *env asm("l3");
|
|
46 | 51 |
#define FORCE_RET() asm volatile ("retl ; nop"); |
47 | 52 |
#endif |
48 | 53 |
|
... | ... | |
465 | 470 |
|
466 | 471 |
/* constant load */ |
467 | 472 |
|
468 |
void OPPROTO op1_movl_T0_im(void)
|
|
473 |
void OPPROTO op_movl_T0_im(void) |
|
469 | 474 |
{ |
470 | 475 |
T0 = PARAM1; |
471 | 476 |
} |
472 | 477 |
|
473 |
void OPPROTO op1_movl_T1_im(void)
|
|
478 |
void OPPROTO op_movl_T1_im(void) |
|
474 | 479 |
{ |
475 | 480 |
T1 = PARAM1; |
476 | 481 |
} |
477 | 482 |
|
478 |
void OPPROTO op1_movl_A0_im(void)
|
|
483 |
void OPPROTO op_movl_A0_im(void) |
|
479 | 484 |
{ |
480 | 485 |
A0 = PARAM1; |
481 | 486 |
} |
... | ... | |
1592 | 1597 |
helper_fcos(); |
1593 | 1598 |
} |
1594 | 1599 |
|
1600 |
/* main execution loop */ |
|
1601 |
uint8_t code_gen_buffer[65536]; |
|
1602 |
|
|
1603 |
|
|
1604 |
int cpu_x86_exec(CPUX86State *env1) |
|
1605 |
{ |
|
1606 |
int saved_T0, saved_T1, saved_A0; |
|
1607 |
CPUX86State *saved_env; |
|
1608 |
int code_gen_size; |
|
1609 |
void (*gen_func)(void); |
|
1610 |
|
|
1611 |
/* first we save global registers */ |
|
1612 |
saved_T0 = T0; |
|
1613 |
saved_T1 = T1; |
|
1614 |
saved_A0 = A0; |
|
1615 |
saved_env = env; |
|
1616 |
env = env1; |
|
1617 |
|
|
1618 |
for(;;) { |
|
1619 |
cpu_x86_gen_code(code_gen_buffer, &code_gen_size, (uint8_t *)env->pc); |
|
1620 |
/* execute the generated code */ |
|
1621 |
gen_func = (void *)code_gen_buffer; |
|
1622 |
gen_func(); |
|
1623 |
} |
|
1624 |
|
|
1625 |
/* restore global registers */ |
|
1626 |
T0 = saved_T0; |
|
1627 |
T1 = saved_T1; |
|
1628 |
A0 = saved_A0; |
|
1629 |
env = saved_env; |
|
1630 |
return 0; |
|
1631 |
} |
Also available in: Unified diff