Commit 01d6a890b4dbfa63a6c2e23a768f0e6c9bee55e0
1 parent
6a1cbf68
Sparc arm/mips/sparc register patch, by Martin Bochnig.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2377 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
39 additions
and
0 deletions
target-arm/exec.h
... | ... | @@ -19,10 +19,17 @@ |
19 | 19 | */ |
20 | 20 | #include "dyngen-exec.h" |
21 | 21 | |
22 | +#if defined(__sparc__) | |
23 | +struct CPUARMState *env; | |
24 | +uint32_t T0; | |
25 | +uint32_t T1; | |
26 | +uint32_t T2; | |
27 | +#else | |
22 | 28 | register struct CPUARMState *env asm(AREG0); |
23 | 29 | register uint32_t T0 asm(AREG1); |
24 | 30 | register uint32_t T1 asm(AREG2); |
25 | 31 | register uint32_t T2 asm(AREG3); |
32 | +#endif | |
26 | 33 | |
27 | 34 | /* TODO: Put these in FP regs on targets that have such things. */ |
28 | 35 | /* It is ok for FT0s and FT0d to overlap. Likewise FT1s and FT1d. */ | ... | ... |
target-mips/exec.h
... | ... | @@ -7,7 +7,11 @@ |
7 | 7 | #include "mips-defs.h" |
8 | 8 | #include "dyngen-exec.h" |
9 | 9 | |
10 | +#if defined(__sparc__) | |
11 | +struct CPUMIPSState *env; | |
12 | +#else | |
10 | 13 | register struct CPUMIPSState *env asm(AREG0); |
14 | +#endif | |
11 | 15 | |
12 | 16 | #if defined (USE_64BITS_REGS) |
13 | 17 | typedef int64_t host_int_t; |
... | ... | @@ -17,6 +21,11 @@ typedef int32_t host_int_t; |
17 | 21 | typedef uint32_t host_uint_t; |
18 | 22 | #endif |
19 | 23 | |
24 | +#if defined(__sparc__) | |
25 | +host_uint_t T0; | |
26 | +host_uint_t T1; | |
27 | +host_uint_t T2; | |
28 | +#else | |
20 | 29 | #if TARGET_LONG_BITS > HOST_LONG_BITS |
21 | 30 | #define T0 (env->t0) |
22 | 31 | #define T1 (env->t1) |
... | ... | @@ -26,6 +35,7 @@ register host_uint_t T0 asm(AREG1); |
26 | 35 | register host_uint_t T1 asm(AREG2); |
27 | 36 | register host_uint_t T2 asm(AREG3); |
28 | 37 | #endif |
38 | +#endif | |
29 | 39 | |
30 | 40 | #if defined (USE_HOST_FLOAT_REGS) |
31 | 41 | #error "implement me." | ... | ... |
target-sparc/exec.h
... | ... | @@ -3,23 +3,41 @@ |
3 | 3 | #include "dyngen-exec.h" |
4 | 4 | #include "config.h" |
5 | 5 | |
6 | +#if defined(__sparc__) | |
7 | +struct CPUSPARCState *env; | |
8 | +#else | |
6 | 9 | register struct CPUSPARCState *env asm(AREG0); |
10 | +#endif | |
11 | + | |
7 | 12 | #ifdef TARGET_SPARC64 |
8 | 13 | #define T0 (env->t0) |
9 | 14 | #define T1 (env->t1) |
10 | 15 | #define T2 (env->t2) |
11 | 16 | #define REGWPTR env->regwptr |
12 | 17 | #else |
18 | +#if defined(__sparc__) | |
19 | +register uint32_t T0 asm(AREG3); | |
20 | +register uint32_t T1 asm(AREG2); | |
21 | +#else | |
13 | 22 | register uint32_t T0 asm(AREG1); |
14 | 23 | register uint32_t T1 asm(AREG2); |
24 | +#endif | |
15 | 25 | |
16 | 26 | #undef REG_REGWPTR // Broken |
17 | 27 | #ifdef REG_REGWPTR |
28 | +#if defined(__sparc__) | |
29 | +register uint32_t *REGWPTR asm(AREG4); | |
30 | +#else | |
18 | 31 | register uint32_t *REGWPTR asm(AREG3); |
32 | +#endif | |
19 | 33 | #define reg_REGWPTR |
20 | 34 | |
21 | 35 | #ifdef AREG4 |
36 | +#if defined(__sparc__) | |
37 | +register uint32_t T2 asm(AREG0); | |
38 | +#else | |
22 | 39 | register uint32_t T2 asm(AREG4); |
40 | +#endif | |
23 | 41 | #define reg_T2 |
24 | 42 | #else |
25 | 43 | #define T2 (env->t2) |
... | ... | @@ -27,7 +45,11 @@ register uint32_t T2 asm(AREG4); |
27 | 45 | |
28 | 46 | #else |
29 | 47 | #define REGWPTR env->regwptr |
48 | +#if defined(__sparc__) | |
49 | +register uint32_t T2 asm(AREG0); | |
50 | +#else | |
30 | 51 | register uint32_t T2 asm(AREG3); |
52 | +#endif | |
31 | 53 | #define reg_T2 |
32 | 54 | #endif |
33 | 55 | #endif | ... | ... |