Revision d785e6be target-i386/exec.h
b/target-i386/exec.h | ||
---|---|---|
21 | 21 |
#include "dyngen-exec.h" |
22 | 22 |
|
23 | 23 |
/* XXX: factorize this mess */ |
24 |
#if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__) |
|
25 |
#define HOST_LONG_BITS 64 |
|
26 |
#else |
|
27 |
#define HOST_LONG_BITS 32 |
|
28 |
#endif |
|
29 |
|
|
30 | 24 |
#ifdef TARGET_X86_64 |
31 | 25 |
#define TARGET_LONG_BITS 64 |
32 | 26 |
#else |
33 | 27 |
#define TARGET_LONG_BITS 32 |
34 | 28 |
#endif |
35 | 29 |
|
30 |
#include "cpu-defs.h" |
|
31 |
|
|
36 | 32 |
/* at least 4 register variables are defined */ |
37 | 33 |
register struct CPUX86State *env asm(AREG0); |
38 | 34 |
|
39 |
/* XXX: use 64 bit regs if HOST_LONG_BITS == 64 */ |
|
40 |
#if TARGET_LONG_BITS == 32 |
|
35 |
#if TARGET_LONG_BITS > HOST_LONG_BITS |
|
36 |
|
|
37 |
/* no registers can be used */ |
|
38 |
#define T0 (env->t0) |
|
39 |
#define T1 (env->t1) |
|
40 |
#define T2 (env->t2) |
|
41 | 41 |
|
42 |
register uint32_t T0 asm(AREG1); |
|
43 |
register uint32_t T1 asm(AREG2); |
|
44 |
register uint32_t T2 asm(AREG3); |
|
42 |
#else |
|
43 |
|
|
44 |
/* XXX: use unsigned long instead of target_ulong - better code will |
|
45 |
be generated for 64 bit CPUs */ |
|
46 |
register target_ulong T0 asm(AREG1); |
|
47 |
register target_ulong T1 asm(AREG2); |
|
48 |
register target_ulong T2 asm(AREG3); |
|
45 | 49 |
|
46 | 50 |
/* if more registers are available, we define some registers too */ |
47 | 51 |
#ifdef AREG4 |
48 |
register uint32_t EAX asm(AREG4);
|
|
52 |
register target_ulong EAX asm(AREG4);
|
|
49 | 53 |
#define reg_EAX |
50 | 54 |
#endif |
51 | 55 |
|
52 | 56 |
#ifdef AREG5 |
53 |
register uint32_t ESP asm(AREG5);
|
|
57 |
register target_ulong ESP asm(AREG5);
|
|
54 | 58 |
#define reg_ESP |
55 | 59 |
#endif |
56 | 60 |
|
57 | 61 |
#ifdef AREG6 |
58 |
register uint32_t EBP asm(AREG6);
|
|
62 |
register target_ulong EBP asm(AREG6);
|
|
59 | 63 |
#define reg_EBP |
60 | 64 |
#endif |
61 | 65 |
|
62 | 66 |
#ifdef AREG7 |
63 |
register uint32_t ECX asm(AREG7);
|
|
67 |
register target_ulong ECX asm(AREG7);
|
|
64 | 68 |
#define reg_ECX |
65 | 69 |
#endif |
66 | 70 |
|
67 | 71 |
#ifdef AREG8 |
68 |
register uint32_t EDX asm(AREG8);
|
|
72 |
register target_ulong EDX asm(AREG8);
|
|
69 | 73 |
#define reg_EDX |
70 | 74 |
#endif |
71 | 75 |
|
72 | 76 |
#ifdef AREG9 |
73 |
register uint32_t EBX asm(AREG9);
|
|
77 |
register target_ulong EBX asm(AREG9);
|
|
74 | 78 |
#define reg_EBX |
75 | 79 |
#endif |
76 | 80 |
|
77 | 81 |
#ifdef AREG10 |
78 |
register uint32_t ESI asm(AREG10);
|
|
82 |
register target_ulong ESI asm(AREG10);
|
|
79 | 83 |
#define reg_ESI |
80 | 84 |
#endif |
81 | 85 |
|
82 | 86 |
#ifdef AREG11 |
83 |
register uint32_t EDI asm(AREG11);
|
|
87 |
register target_ulong EDI asm(AREG11);
|
|
84 | 88 |
#define reg_EDI |
85 | 89 |
#endif |
86 | 90 |
|
87 |
#else |
|
88 |
|
|
89 |
/* no registers can be used */ |
|
90 |
#define T0 (env->t0) |
|
91 |
#define T1 (env->t1) |
|
92 |
#define T2 (env->t2) |
|
93 |
|
|
94 |
#endif |
|
91 |
#endif /* ! (TARGET_LONG_BITS > HOST_LONG_BITS) */ |
|
95 | 92 |
|
96 | 93 |
#define A0 T2 |
97 | 94 |
|
Also available in: Unified diff