Commit 0fa85d43d47151e71e63754e419340bfcff97e80

Authored by bellard
1 parent b4ff5987

64 bit target support


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1195 c046a42c-6fe2-441c-8c8c-71466251a162
target-arm/translate.c
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 29
30 /* internal defines */ 30 /* internal defines */
31 typedef struct DisasContext { 31 typedef struct DisasContext {
32 - uint8_t *pc; 32 + target_ulong pc;
33 int is_jmp; 33 int is_jmp;
34 struct TranslationBlock *tb; 34 struct TranslationBlock *tb;
35 } DisasContext; 35 } DisasContext;
@@ -762,10 +762,10 @@ static inline int gen_intermediate_code_internal(CPUState *env, @@ -762,10 +762,10 @@ static inline int gen_intermediate_code_internal(CPUState *env,
762 DisasContext dc1, *dc = &dc1; 762 DisasContext dc1, *dc = &dc1;
763 uint16_t *gen_opc_end; 763 uint16_t *gen_opc_end;
764 int j, lj; 764 int j, lj;
765 - uint8_t *pc_start; 765 + target_ulong pc_start;
766 766
767 /* generate intermediate code */ 767 /* generate intermediate code */
768 - pc_start = (uint8_t *)tb->pc; 768 + pc_start = tb->pc;
769 769
770 dc->tb = tb; 770 dc->tb = tb;
771 771
@@ -784,7 +784,7 @@ static inline int gen_intermediate_code_internal(CPUState *env, @@ -784,7 +784,7 @@ static inline int gen_intermediate_code_internal(CPUState *env,
784 while (lj < j) 784 while (lj < j)
785 gen_opc_instr_start[lj++] = 0; 785 gen_opc_instr_start[lj++] = 0;
786 } 786 }
787 - gen_opc_pc[lj] = (uint32_t)dc->pc; 787 + gen_opc_pc[lj] = dc->pc;
788 gen_opc_instr_start[lj] = 1; 788 gen_opc_instr_start[lj] = 1;
789 } 789 }
790 disas_arm_insn(dc); 790 disas_arm_insn(dc);
@@ -811,7 +811,7 @@ static inline int gen_intermediate_code_internal(CPUState *env, @@ -811,7 +811,7 @@ static inline int gen_intermediate_code_internal(CPUState *env,
811 if (loglevel & CPU_LOG_TB_IN_ASM) { 811 if (loglevel & CPU_LOG_TB_IN_ASM) {
812 fprintf(logfile, "----------------\n"); 812 fprintf(logfile, "----------------\n");
813 fprintf(logfile, "IN: %s\n", lookup_symbol(pc_start)); 813 fprintf(logfile, "IN: %s\n", lookup_symbol(pc_start));
814 - disas(logfile, pc_start, dc->pc - pc_start, 0, 0); 814 + target_disas(logfile, pc_start, dc->pc - pc_start, 0);
815 fprintf(logfile, "\n"); 815 fprintf(logfile, "\n");
816 if (loglevel & (CPU_LOG_TB_OP)) { 816 if (loglevel & (CPU_LOG_TB_OP)) {
817 fprintf(logfile, "OP:\n"); 817 fprintf(logfile, "OP:\n");
target-ppc/exec.h
@@ -173,4 +173,7 @@ static inline void regs_to_env(void) @@ -173,4 +173,7 @@ static inline void regs_to_env(void)
173 { 173 {
174 } 174 }
175 175
  176 +int cpu_ppc_handle_mmu_fault (CPUState *env, uint32_t address, int rw,
  177 + int is_user, int is_softmmu);
  178 +
176 #endif /* !defined (__PPC_H__) */ 179 #endif /* !defined (__PPC_H__) */
target-ppc/helper.c
@@ -29,8 +29,6 @@ @@ -29,8 +29,6 @@
29 29
30 /*****************************************************************************/ 30 /*****************************************************************************/
31 /* PPC MMU emulation */ 31 /* PPC MMU emulation */
32 -int cpu_ppc_handle_mmu_fault (CPUState *env, uint32_t address, int rw,  
33 - int is_user, int is_softmmu);  
34 32
35 /* Perform BAT hit & translation */ 33 /* Perform BAT hit & translation */
36 static int get_bat (CPUState *env, uint32_t *real, int *prot, 34 static int get_bat (CPUState *env, uint32_t *real, int *prot,
@@ -421,7 +419,7 @@ target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr) @@ -421,7 +419,7 @@ target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr)
421 NULL, it means that the function was called in C code (i.e. not 419 NULL, it means that the function was called in C code (i.e. not
422 from generated code or from helper.c) */ 420 from generated code or from helper.c) */
423 /* XXX: fix it to restore all registers */ 421 /* XXX: fix it to restore all registers */
424 -void tlb_fill(unsigned long addr, int is_write, int is_user, void *retaddr) 422 +void tlb_fill(target_ulong addr, int is_write, int is_user, void *retaddr)
425 { 423 {
426 TranslationBlock *tb; 424 TranslationBlock *tb;
427 CPUState *saved_env; 425 CPUState *saved_env;
@@ -782,7 +780,7 @@ void do_interrupt (CPUState *env) @@ -782,7 +780,7 @@ void do_interrupt (CPUState *env)
782 /* Store exception cause */ 780 /* Store exception cause */
783 /* Get rS/rD and rA from faulting opcode */ 781 /* Get rS/rD and rA from faulting opcode */
784 env->spr[DSISR] |= 782 env->spr[DSISR] |=
785 - (ldl_code((void *)(env->nip - 4)) & 0x03FF0000) >> 16; 783 + (ldl_code((env->nip - 4)) & 0x03FF0000) >> 16;
786 /* data location address has been stored 784 /* data location address has been stored
787 * when the fault has been detected 785 * when the fault has been detected
788 */ 786 */
target-ppc/op_helper_mem.h
@@ -8,14 +8,14 @@ void glue(do_lsw, MEMSUFFIX) (int dst) @@ -8,14 +8,14 @@ void glue(do_lsw, MEMSUFFIX) (int dst)
8 __func__, T0, T1, dst); 8 __func__, T0, T1, dst);
9 } 9 }
10 for (; T1 > 3; T1 -= 4, T0 += 4) { 10 for (; T1 > 3; T1 -= 4, T0 += 4) {
11 - ugpr(dst++) = glue(ldl, MEMSUFFIX)((void *)T0); 11 + ugpr(dst++) = glue(ldl, MEMSUFFIX)(T0);
12 if (dst == 32) 12 if (dst == 32)
13 dst = 0; 13 dst = 0;
14 } 14 }
15 if (T1 > 0) { 15 if (T1 > 0) {
16 tmp = 0; 16 tmp = 0;
17 for (sh = 24; T1 > 0; T1--, T0++, sh -= 8) { 17 for (sh = 24; T1 > 0; T1--, T0++, sh -= 8) {
18 - tmp |= glue(ldub, MEMSUFFIX)((void *)T0) << sh; 18 + tmp |= glue(ldub, MEMSUFFIX)(T0) << sh;
19 } 19 }
20 ugpr(dst) = tmp; 20 ugpr(dst) = tmp;
21 } 21 }
@@ -30,13 +30,13 @@ void glue(do_stsw, MEMSUFFIX) (int src) @@ -30,13 +30,13 @@ void glue(do_stsw, MEMSUFFIX) (int src)
30 __func__, T0, T1, src); 30 __func__, T0, T1, src);
31 } 31 }
32 for (; T1 > 3; T1 -= 4, T0 += 4) { 32 for (; T1 > 3; T1 -= 4, T0 += 4) {
33 - glue(stl, MEMSUFFIX)((void *)T0, ugpr(src++)); 33 + glue(stl, MEMSUFFIX)(T0, ugpr(src++));
34 if (src == 32) 34 if (src == 32)
35 src = 0; 35 src = 0;
36 } 36 }
37 if (T1 > 0) { 37 if (T1 > 0) {
38 for (sh = 24; T1 > 0; T1--, T0++, sh -= 8) 38 for (sh = 24; T1 > 0; T1--, T0++, sh -= 8)
39 - glue(stb, MEMSUFFIX)((void *)T0, (ugpr(src) >> sh) & 0xFF); 39 + glue(stb, MEMSUFFIX)(T0, (ugpr(src) >> sh) & 0xFF);
40 } 40 }
41 } 41 }
42 42
target-ppc/op_mem.h
@@ -2,26 +2,26 @@ @@ -2,26 +2,26 @@
2 void glue(do_lsw, MEMSUFFIX) (int dst); 2 void glue(do_lsw, MEMSUFFIX) (int dst);
3 void glue(do_stsw, MEMSUFFIX) (int src); 3 void glue(do_stsw, MEMSUFFIX) (int src);
4 4
5 -static inline uint16_t glue(ld16r, MEMSUFFIX) (void *EA) 5 +static inline uint16_t glue(ld16r, MEMSUFFIX) (target_ulong EA)
6 { 6 {
7 uint16_t tmp = glue(lduw, MEMSUFFIX)(EA); 7 uint16_t tmp = glue(lduw, MEMSUFFIX)(EA);
8 return ((tmp & 0xFF00) >> 8) | ((tmp & 0x00FF) << 8); 8 return ((tmp & 0xFF00) >> 8) | ((tmp & 0x00FF) << 8);
9 } 9 }
10 10
11 -static inline uint32_t glue(ld32r, MEMSUFFIX) (void *EA) 11 +static inline uint32_t glue(ld32r, MEMSUFFIX) (target_ulong EA)
12 { 12 {
13 uint32_t tmp = glue(ldl, MEMSUFFIX)(EA); 13 uint32_t tmp = glue(ldl, MEMSUFFIX)(EA);
14 return ((tmp & 0xFF000000) >> 24) | ((tmp & 0x00FF0000) >> 8) | 14 return ((tmp & 0xFF000000) >> 24) | ((tmp & 0x00FF0000) >> 8) |
15 ((tmp & 0x0000FF00) << 8) | ((tmp & 0x000000FF) << 24); 15 ((tmp & 0x0000FF00) << 8) | ((tmp & 0x000000FF) << 24);
16 } 16 }
17 17
18 -static inline void glue(st16r, MEMSUFFIX) (void *EA, uint16_t data) 18 +static inline void glue(st16r, MEMSUFFIX) (target_ulong EA, uint16_t data)
19 { 19 {
20 uint16_t tmp = ((data & 0xFF00) >> 8) | ((data & 0x00FF) << 8); 20 uint16_t tmp = ((data & 0xFF00) >> 8) | ((data & 0x00FF) << 8);
21 glue(stw, MEMSUFFIX)(EA, tmp); 21 glue(stw, MEMSUFFIX)(EA, tmp);
22 } 22 }
23 23
24 -static inline void glue(st32r, MEMSUFFIX) (void *EA, uint32_t data) 24 +static inline void glue(st32r, MEMSUFFIX) (target_ulong EA, uint32_t data)
25 { 25 {
26 uint32_t tmp = ((data & 0xFF000000) >> 24) | ((data & 0x00FF0000) >> 8) | 26 uint32_t tmp = ((data & 0xFF000000) >> 24) | ((data & 0x00FF0000) >> 8) |
27 ((data & 0x0000FF00) << 8) | ((data & 0x000000FF) << 24); 27 ((data & 0x0000FF00) << 8) | ((data & 0x000000FF) << 24);
@@ -32,14 +32,14 @@ static inline void glue(st32r, MEMSUFFIX) (void *EA, uint32_t data) @@ -32,14 +32,14 @@ static inline void glue(st32r, MEMSUFFIX) (void *EA, uint32_t data)
32 #define PPC_LD_OP(name, op) \ 32 #define PPC_LD_OP(name, op) \
33 PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ 33 PPC_OP(glue(glue(l, name), MEMSUFFIX)) \
34 { \ 34 { \
35 - T1 = glue(op, MEMSUFFIX)((void *)T0); \ 35 + T1 = glue(op, MEMSUFFIX)(T0); \
36 RETURN(); \ 36 RETURN(); \
37 } 37 }
38 38
39 #define PPC_ST_OP(name, op) \ 39 #define PPC_ST_OP(name, op) \
40 PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ 40 PPC_OP(glue(glue(st, name), MEMSUFFIX)) \
41 { \ 41 { \
42 - glue(op, MEMSUFFIX)((void *)T0, T1); \ 42 + glue(op, MEMSUFFIX)(T0, T1); \
43 RETURN(); \ 43 RETURN(); \
44 } 44 }
45 45
@@ -65,7 +65,7 @@ PPC_OP(glue(lmw, MEMSUFFIX)) @@ -65,7 +65,7 @@ PPC_OP(glue(lmw, MEMSUFFIX))
65 int dst = PARAM(1); 65 int dst = PARAM(1);
66 66
67 for (; dst < 32; dst++, T0 += 4) { 67 for (; dst < 32; dst++, T0 += 4) {
68 - ugpr(dst) = glue(ldl, MEMSUFFIX)((void *)T0); 68 + ugpr(dst) = glue(ldl, MEMSUFFIX)(T0);
69 } 69 }
70 RETURN(); 70 RETURN();
71 } 71 }
@@ -75,7 +75,7 @@ PPC_OP(glue(stmw, MEMSUFFIX)) @@ -75,7 +75,7 @@ PPC_OP(glue(stmw, MEMSUFFIX))
75 int src = PARAM(1); 75 int src = PARAM(1);
76 76
77 for (; src < 32; src++, T0 += 4) { 77 for (; src < 32; src++, T0 += 4) {
78 - glue(stl, MEMSUFFIX)((void *)T0, ugpr(src)); 78 + glue(stl, MEMSUFFIX)(T0, ugpr(src));
79 } 79 }
80 RETURN(); 80 RETURN();
81 } 81 }
@@ -115,7 +115,7 @@ PPC_OP(glue(stsw, MEMSUFFIX)) @@ -115,7 +115,7 @@ PPC_OP(glue(stsw, MEMSUFFIX))
115 #define PPC_STF_OP(name, op) \ 115 #define PPC_STF_OP(name, op) \
116 PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ 116 PPC_OP(glue(glue(st, name), MEMSUFFIX)) \
117 { \ 117 { \
118 - glue(op, MEMSUFFIX)((void *)T0, FT1); \ 118 + glue(op, MEMSUFFIX)(T0, FT1); \
119 RETURN(); \ 119 RETURN(); \
120 } 120 }
121 121
@@ -126,7 +126,7 @@ PPC_STF_OP(fs, stfl); @@ -126,7 +126,7 @@ PPC_STF_OP(fs, stfl);
126 #define PPC_LDF_OP(name, op) \ 126 #define PPC_LDF_OP(name, op) \
127 PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ 127 PPC_OP(glue(glue(l, name), MEMSUFFIX)) \
128 { \ 128 { \
129 - FT1 = glue(op, MEMSUFFIX)((void *)T0); \ 129 + FT1 = glue(op, MEMSUFFIX)(T0); \
130 RETURN(); \ 130 RETURN(); \
131 } 131 }
132 132
@@ -139,7 +139,7 @@ PPC_OP(glue(lwarx, MEMSUFFIX)) @@ -139,7 +139,7 @@ PPC_OP(glue(lwarx, MEMSUFFIX))
139 if (T0 & 0x03) { 139 if (T0 & 0x03) {
140 do_raise_exception(EXCP_ALIGN); 140 do_raise_exception(EXCP_ALIGN);
141 } else { 141 } else {
142 - T1 = glue(ldl, MEMSUFFIX)((void *)T0); 142 + T1 = glue(ldl, MEMSUFFIX)(T0);
143 regs->reserve = T0; 143 regs->reserve = T0;
144 } 144 }
145 RETURN(); 145 RETURN();
@@ -154,7 +154,7 @@ PPC_OP(glue(stwcx, MEMSUFFIX)) @@ -154,7 +154,7 @@ PPC_OP(glue(stwcx, MEMSUFFIX))
154 if (regs->reserve != T0) { 154 if (regs->reserve != T0) {
155 env->crf[0] = xer_ov; 155 env->crf[0] = xer_ov;
156 } else { 156 } else {
157 - glue(stl, MEMSUFFIX)((void *)T0, T1); 157 + glue(stl, MEMSUFFIX)(T0, T1);
158 env->crf[0] = xer_ov | 0x02; 158 env->crf[0] = xer_ov | 0x02;
159 } 159 }
160 } 160 }
@@ -164,27 +164,27 @@ PPC_OP(glue(stwcx, MEMSUFFIX)) @@ -164,27 +164,27 @@ PPC_OP(glue(stwcx, MEMSUFFIX))
164 164
165 PPC_OP(glue(dcbz, MEMSUFFIX)) 165 PPC_OP(glue(dcbz, MEMSUFFIX))
166 { 166 {
167 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x00), 0);  
168 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x04), 0);  
169 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x08), 0);  
170 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x0C), 0);  
171 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x10), 0);  
172 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x14), 0);  
173 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x18), 0);  
174 - glue(stl, MEMSUFFIX)((void *)(T0 + 0x1C), 0); 167 + glue(stl, MEMSUFFIX)(T0 + 0x00, 0);
  168 + glue(stl, MEMSUFFIX)(T0 + 0x04, 0);
  169 + glue(stl, MEMSUFFIX)(T0 + 0x08, 0);
  170 + glue(stl, MEMSUFFIX)(T0 + 0x0C, 0);
  171 + glue(stl, MEMSUFFIX)(T0 + 0x10, 0);
  172 + glue(stl, MEMSUFFIX)(T0 + 0x14, 0);
  173 + glue(stl, MEMSUFFIX)(T0 + 0x18, 0);
  174 + glue(stl, MEMSUFFIX)(T0 + 0x1C, 0);
175 RETURN(); 175 RETURN();
176 } 176 }
177 177
178 /* External access */ 178 /* External access */
179 PPC_OP(glue(eciwx, MEMSUFFIX)) 179 PPC_OP(glue(eciwx, MEMSUFFIX))
180 { 180 {
181 - T1 = glue(ldl, MEMSUFFIX)((void *)T0); 181 + T1 = glue(ldl, MEMSUFFIX)(T0);
182 RETURN(); 182 RETURN();
183 } 183 }
184 184
185 PPC_OP(glue(ecowx, MEMSUFFIX)) 185 PPC_OP(glue(ecowx, MEMSUFFIX))
186 { 186 {
187 - glue(stl, MEMSUFFIX)((void *)T0, T1); 187 + glue(stl, MEMSUFFIX)(T0, T1);
188 RETURN(); 188 RETURN();
189 } 189 }
190 190
target-ppc/translate.c
@@ -131,7 +131,7 @@ static uint8_t spr_access[1024 / 2]; @@ -131,7 +131,7 @@ static uint8_t spr_access[1024 / 2];
131 /* internal defines */ 131 /* internal defines */
132 typedef struct DisasContext { 132 typedef struct DisasContext {
133 struct TranslationBlock *tb; 133 struct TranslationBlock *tb;
134 - uint32_t nip; 134 + target_ulong nip;
135 uint32_t opcode; 135 uint32_t opcode;
136 uint32_t exception; 136 uint32_t exception;
137 /* Execution mode */ 137 /* Execution mode */
@@ -3029,7 +3029,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, @@ -3029,7 +3029,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
3029 { 3029 {
3030 DisasContext ctx, *ctxp = &ctx; 3030 DisasContext ctx, *ctxp = &ctx;
3031 opc_handler_t **table, *handler; 3031 opc_handler_t **table, *handler;
3032 - uint32_t pc_start; 3032 + target_ulong pc_start;
3033 uint16_t *gen_opc_end; 3033 uint16_t *gen_opc_end;
3034 int j, lj = -1; 3034 int j, lj = -1;
3035 3035
@@ -3069,7 +3069,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, @@ -3069,7 +3069,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
3069 ctx.nip, 1 - msr_pr, msr_ir); 3069 ctx.nip, 1 - msr_pr, msr_ir);
3070 } 3070 }
3071 #endif 3071 #endif
3072 - ctx.opcode = ldl_code((void *)ctx.nip); 3072 + ctx.opcode = ldl_code(ctx.nip);
3073 #if defined PPC_DEBUG_DISAS 3073 #if defined PPC_DEBUG_DISAS
3074 if (loglevel & CPU_LOG_TB_IN_ASM) { 3074 if (loglevel & CPU_LOG_TB_IN_ASM) {
3075 fprintf(logfile, "translate opcode %08x (%02x %02x %02x)\n", 3075 fprintf(logfile, "translate opcode %08x (%02x %02x %02x)\n",
@@ -3174,8 +3174,8 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, @@ -3174,8 +3174,8 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
3174 cpu_dump_state(env, logfile, fprintf, 0); 3174 cpu_dump_state(env, logfile, fprintf, 0);
3175 } 3175 }
3176 if (loglevel & CPU_LOG_TB_IN_ASM) { 3176 if (loglevel & CPU_LOG_TB_IN_ASM) {
3177 - fprintf(logfile, "IN: %s\n", lookup_symbol((void *)pc_start));  
3178 - disas(logfile, (void *)pc_start, ctx.nip - pc_start, 0, 0); 3177 + fprintf(logfile, "IN: %s\n", lookup_symbol(pc_start));
  3178 + target_disas(logfile, pc_start, ctx.nip - pc_start, 0);
3179 fprintf(logfile, "\n"); 3179 fprintf(logfile, "\n");
3180 } 3180 }
3181 if (loglevel & CPU_LOG_TB_OP) { 3181 if (loglevel & CPU_LOG_TB_OP) {
target-sparc/helper.c
@@ -62,7 +62,7 @@ void cpu_unlock(void) @@ -62,7 +62,7 @@ void cpu_unlock(void)
62 NULL, it means that the function was called in C code (i.e. not 62 NULL, it means that the function was called in C code (i.e. not
63 from generated code or from helper.c) */ 63 from generated code or from helper.c) */
64 /* XXX: fix it to restore all registers */ 64 /* XXX: fix it to restore all registers */
65 -void tlb_fill(unsigned long addr, int is_write, int is_user, void *retaddr) 65 +void tlb_fill(target_ulong addr, int is_write, int is_user, void *retaddr)
66 { 66 {
67 TranslationBlock *tb; 67 TranslationBlock *tb;
68 int ret; 68 int ret;
@@ -282,6 +282,15 @@ void set_cwp(int new_cwp) @@ -282,6 +282,15 @@ void set_cwp(int new_cwp)
282 env->regwptr = env->regbase + (new_cwp * 16); 282 env->regwptr = env->regbase + (new_cwp * 16);
283 } 283 }
284 284
  285 +void cpu_set_cwp(CPUState *env1, int new_cwp)
  286 +{
  287 + CPUState *saved_env;
  288 + saved_env = env;
  289 + env = env1;
  290 + set_cwp(new_cwp);
  291 + env = saved_env;
  292 +}
  293 +
285 /* 294 /*
286 * Begin execution of an interruption. is_int is TRUE if coming from 295 * Begin execution of an interruption. is_int is TRUE if coming from
287 * the int instruction. next_eip is the EIP value AFTER the interrupt 296 * the int instruction. next_eip is the EIP value AFTER the interrupt
@@ -318,8 +327,7 @@ void do_interrupt(int intno, int is_int, int error_code, @@ -318,8 +327,7 @@ void do_interrupt(int intno, int is_int, int error_code,
318 #endif 327 #endif
319 #if !defined(CONFIG_USER_ONLY) 328 #if !defined(CONFIG_USER_ONLY)
320 if (env->psret == 0) { 329 if (env->psret == 0) {
321 - fprintf(logfile, "Trap while interrupts disabled, Error state!\n");  
322 - qemu_system_shutdown_request(); 330 + cpu_abort(cpu_single_env, "Trap while interrupts disabled, Error state");
323 return; 331 return;
324 } 332 }
325 #endif 333 #endif
target-sparc/op_helper.c
@@ -108,7 +108,7 @@ void helper_ld_asi(int asi, int size, int sign) @@ -108,7 +108,7 @@ void helper_ld_asi(int asi, int size, int sign)
108 if (size == 4) 108 if (size == 4)
109 bswap32s(&ret); 109 bswap32s(&ret);
110 else if (size == 2) 110 else if (size == 2)
111 - bswap16s(&ret); 111 + bswap16s((uint16_t *)&ret);
112 break; 112 break;
113 default: 113 default:
114 ret = 0; 114 ret = 0;
@@ -198,7 +198,7 @@ void helper_st_asi(int asi, int size, int sign) @@ -198,7 +198,7 @@ void helper_st_asi(int asi, int size, int sign)
198 if (size == 4) 198 if (size == 4)
199 bswap32s(&temp); 199 bswap32s(&temp);
200 else if (size == 2) 200 else if (size == 2)
201 - bswap16s(&temp); 201 + bswap16s((uint16_t *)&temp);
202 202
203 cpu_physical_memory_write(T0, (void *) &temp, size); 203 cpu_physical_memory_write(T0, (void *) &temp, size);
204 } 204 }
target-sparc/op_mem.h
@@ -2,13 +2,13 @@ @@ -2,13 +2,13 @@
2 #define SPARC_LD_OP(name, qp) \ 2 #define SPARC_LD_OP(name, qp) \
3 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \ 3 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \
4 { \ 4 { \
5 - T1 = glue(qp, MEMSUFFIX)((void *)T0); \ 5 + T1 = glue(qp, MEMSUFFIX)(T0); \
6 } 6 }
7 7
8 #define SPARC_ST_OP(name, op) \ 8 #define SPARC_ST_OP(name, op) \
9 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \ 9 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \
10 { \ 10 { \
11 - glue(op, MEMSUFFIX)((void *)T0, T1); \ 11 + glue(op, MEMSUFFIX)(T0, T1); \
12 } 12 }
13 13
14 SPARC_LD_OP(ld, ldl); 14 SPARC_LD_OP(ld, ldl);
@@ -24,48 +24,48 @@ SPARC_ST_OP(sth, stw); @@ -24,48 +24,48 @@ SPARC_ST_OP(sth, stw);
24 24
25 void OPPROTO glue(op_std, MEMSUFFIX)(void) 25 void OPPROTO glue(op_std, MEMSUFFIX)(void)
26 { 26 {
27 - glue(stl, MEMSUFFIX)((void *) T0, T1);  
28 - glue(stl, MEMSUFFIX)((void *) (T0 + 4), T2); 27 + glue(stl, MEMSUFFIX)(T0, T1);
  28 + glue(stl, MEMSUFFIX)((T0 + 4), T2);
29 } 29 }
30 30
31 void OPPROTO glue(op_ldstub, MEMSUFFIX)(void) 31 void OPPROTO glue(op_ldstub, MEMSUFFIX)(void)
32 { 32 {
33 - T1 = glue(ldub, MEMSUFFIX)((void *) T0);  
34 - glue(stb, MEMSUFFIX)((void *) T0, 0xff); /* XXX: Should be Atomically */ 33 + T1 = glue(ldub, MEMSUFFIX)(T0);
  34 + glue(stb, MEMSUFFIX)(T0, 0xff); /* XXX: Should be Atomically */
35 } 35 }
36 36
37 void OPPROTO glue(op_swap, MEMSUFFIX)(void) 37 void OPPROTO glue(op_swap, MEMSUFFIX)(void)
38 { 38 {
39 - unsigned int tmp = glue(ldl, MEMSUFFIX)((void *) T0);  
40 - glue(stl, MEMSUFFIX)((void *) T0, T1); /* XXX: Should be Atomically */ 39 + unsigned int tmp = glue(ldl, MEMSUFFIX)(T0);
  40 + glue(stl, MEMSUFFIX)(T0, T1); /* XXX: Should be Atomically */
41 T1 = tmp; 41 T1 = tmp;
42 } 42 }
43 43
44 void OPPROTO glue(op_ldd, MEMSUFFIX)(void) 44 void OPPROTO glue(op_ldd, MEMSUFFIX)(void)
45 { 45 {
46 - T1 = glue(ldl, MEMSUFFIX)((void *) T0);  
47 - T0 = glue(ldl, MEMSUFFIX)((void *) (T0 + 4)); 46 + T1 = glue(ldl, MEMSUFFIX)(T0);
  47 + T0 = glue(ldl, MEMSUFFIX)((T0 + 4));
48 } 48 }
49 49
50 /*** Floating-point store ***/ 50 /*** Floating-point store ***/
51 void OPPROTO glue(op_stf, MEMSUFFIX) (void) 51 void OPPROTO glue(op_stf, MEMSUFFIX) (void)
52 { 52 {
53 - glue(stfl, MEMSUFFIX)((void *) T0, FT0); 53 + glue(stfl, MEMSUFFIX)(T0, FT0);
54 } 54 }
55 55
56 void OPPROTO glue(op_stdf, MEMSUFFIX) (void) 56 void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
57 { 57 {
58 - glue(stfq, MEMSUFFIX)((void *) T0, DT0); 58 + glue(stfq, MEMSUFFIX)(T0, DT0);
59 } 59 }
60 60
61 /*** Floating-point load ***/ 61 /*** Floating-point load ***/
62 void OPPROTO glue(op_ldf, MEMSUFFIX) (void) 62 void OPPROTO glue(op_ldf, MEMSUFFIX) (void)
63 { 63 {
64 - FT0 = glue(ldfl, MEMSUFFIX)((void *) T0); 64 + FT0 = glue(ldfl, MEMSUFFIX)(T0);
65 } 65 }
66 66
67 void OPPROTO glue(op_lddf, MEMSUFFIX) (void) 67 void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
68 { 68 {
69 - DT0 = glue(ldfq, MEMSUFFIX)((void *) T0); 69 + DT0 = glue(ldfq, MEMSUFFIX)(T0);
70 } 70 }
71 #undef MEMSUFFIX 71 #undef MEMSUFFIX
target-sparc/translate.c
@@ -291,10 +291,7 @@ GEN32(gen_op_store_DT2_fpr, gen_op_store_DT2_fpr_fprf); @@ -291,10 +291,7 @@ GEN32(gen_op_store_DT2_fpr, gen_op_store_DT2_fpr_fprf);
291 291
292 #if defined(CONFIG_USER_ONLY) 292 #if defined(CONFIG_USER_ONLY)
293 #define gen_op_ldst(name) gen_op_##name##_raw() 293 #define gen_op_ldst(name) gen_op_##name##_raw()
294 -#define OP_LD_TABLE(width) \  
295 -static void gen_op_##width##a(int insn, int is_ld, int size, int sign) \  
296 -{ \  
297 -} 294 +#define OP_LD_TABLE(width)
298 #define supervisor(dc) 0 295 #define supervisor(dc) 0
299 #else 296 #else
300 #define gen_op_ldst(name) (*gen_op_##name[dc->mem_idx])() 297 #define gen_op_ldst(name) (*gen_op_##name[dc->mem_idx])()
@@ -614,12 +611,14 @@ static void do_fbranch(DisasContext * dc, uint32_t target, uint32_t insn) @@ -614,12 +611,14 @@ static void do_fbranch(DisasContext * dc, uint32_t target, uint32_t insn)
614 } 611 }
615 } 612 }
616 613
  614 +#if 0
617 static void gen_debug(DisasContext *s, uint32_t pc) 615 static void gen_debug(DisasContext *s, uint32_t pc)
618 { 616 {
619 gen_op_jmp_im(pc); 617 gen_op_jmp_im(pc);
620 gen_op_debug(); 618 gen_op_debug();
621 s->is_br = 1; 619 s->is_br = 1;
622 } 620 }
  621 +#endif
623 622
624 #define GET_FIELDs(x,a,b) sign_extend (GET_FIELD(x,a,b), (b) - (a) + 1) 623 #define GET_FIELDs(x,a,b) sign_extend (GET_FIELD(x,a,b), (b) - (a) + 1)
625 624
@@ -633,7 +632,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -633,7 +632,7 @@ static void disas_sparc_insn(DisasContext * dc)
633 { 632 {
634 unsigned int insn, opc, rs1, rs2, rd; 633 unsigned int insn, opc, rs1, rs2, rd;
635 634
636 - insn = ldl_code((uint8_t *)dc->pc); 635 + insn = ldl_code(dc->pc);
637 opc = GET_FIELD(insn, 0, 1); 636 opc = GET_FIELD(insn, 0, 1);
638 637
639 rd = GET_FIELD(insn, 2, 6); 638 rd = GET_FIELD(insn, 2, 6);
@@ -1290,6 +1289,12 @@ static void disas_sparc_insn(DisasContext * dc) @@ -1290,6 +1289,12 @@ static void disas_sparc_insn(DisasContext * dc)
1290 gen_movl_reg_T1(rd); 1289 gen_movl_reg_T1(rd);
1291 gen_op_swapa(insn, 1, 4, 0); 1290 gen_op_swapa(insn, 1, 4, 0);
1292 break; 1291 break;
  1292 +
  1293 + /* avoid warnings */
  1294 + (void) &gen_op_stfa;
  1295 + (void) &gen_op_stdfa;
  1296 + (void) &gen_op_ldfa;
  1297 + (void) &gen_op_lddfa;
1293 #endif 1298 #endif
1294 default: 1299 default:
1295 goto illegal_insn; 1300 goto illegal_insn;
@@ -1520,8 +1525,8 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, @@ -1520,8 +1525,8 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb,
1520 #ifdef DEBUG_DISAS 1525 #ifdef DEBUG_DISAS
1521 if (loglevel & CPU_LOG_TB_IN_ASM) { 1526 if (loglevel & CPU_LOG_TB_IN_ASM) {
1522 fprintf(logfile, "--------------\n"); 1527 fprintf(logfile, "--------------\n");
1523 - fprintf(logfile, "IN: %s\n", lookup_symbol((uint8_t *)pc_start));  
1524 - disas(logfile, (uint8_t *)pc_start, last_pc + 4 - pc_start, 0, 0); 1528 + fprintf(logfile, "IN: %s\n", lookup_symbol(pc_start));
  1529 + target_disas(logfile, pc_start, last_pc + 4 - pc_start, 0);
1525 fprintf(logfile, "\n"); 1530 fprintf(logfile, "\n");
1526 if (loglevel & CPU_LOG_TB_OP) { 1531 if (loglevel & CPU_LOG_TB_OP) {
1527 fprintf(logfile, "OP:\n"); 1532 fprintf(logfile, "OP:\n");
@@ -1626,6 +1631,10 @@ target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr) @@ -1626,6 +1631,10 @@ target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr)
1626 } 1631 }
1627 1632
1628 #else 1633 #else
  1634 +extern int get_physical_address (CPUState *env, uint32_t *physical, int *prot,
  1635 + int *access_index, uint32_t address, int rw,
  1636 + int is_user);
  1637 +
1629 target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr) 1638 target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr)
1630 { 1639 {
1631 uint32_t phys_addr; 1640 uint32_t phys_addr;