Commit 0fa85d43d47151e71e63754e419340bfcff97e80
1 parent
b4ff5987
64 bit target support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1195 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
10 changed files
with
84 additions
and
66 deletions
target-arm/translate.c
| ... | ... | @@ -29,7 +29,7 @@ |
| 29 | 29 | |
| 30 | 30 | /* internal defines */ |
| 31 | 31 | typedef struct DisasContext { |
| 32 | - uint8_t *pc; | |
| 32 | + target_ulong pc; | |
| 33 | 33 | int is_jmp; |
| 34 | 34 | struct TranslationBlock *tb; |
| 35 | 35 | } DisasContext; |
| ... | ... | @@ -762,10 +762,10 @@ static inline int gen_intermediate_code_internal(CPUState *env, |
| 762 | 762 | DisasContext dc1, *dc = &dc1; |
| 763 | 763 | uint16_t *gen_opc_end; |
| 764 | 764 | int j, lj; |
| 765 | - uint8_t *pc_start; | |
| 765 | + target_ulong pc_start; | |
| 766 | 766 | |
| 767 | 767 | /* generate intermediate code */ |
| 768 | - pc_start = (uint8_t *)tb->pc; | |
| 768 | + pc_start = tb->pc; | |
| 769 | 769 | |
| 770 | 770 | dc->tb = tb; |
| 771 | 771 | |
| ... | ... | @@ -784,7 +784,7 @@ static inline int gen_intermediate_code_internal(CPUState *env, |
| 784 | 784 | while (lj < j) |
| 785 | 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 | 788 | gen_opc_instr_start[lj] = 1; |
| 789 | 789 | } |
| 790 | 790 | disas_arm_insn(dc); |
| ... | ... | @@ -811,7 +811,7 @@ static inline int gen_intermediate_code_internal(CPUState *env, |
| 811 | 811 | if (loglevel & CPU_LOG_TB_IN_ASM) { |
| 812 | 812 | fprintf(logfile, "----------------\n"); |
| 813 | 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 | 815 | fprintf(logfile, "\n"); |
| 816 | 816 | if (loglevel & (CPU_LOG_TB_OP)) { |
| 817 | 817 | fprintf(logfile, "OP:\n"); | ... | ... |
target-ppc/exec.h
target-ppc/helper.c
| ... | ... | @@ -29,8 +29,6 @@ |
| 29 | 29 | |
| 30 | 30 | /*****************************************************************************/ |
| 31 | 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 | 33 | /* Perform BAT hit & translation */ |
| 36 | 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 | 419 | NULL, it means that the function was called in C code (i.e. not |
| 422 | 420 | from generated code or from helper.c) */ |
| 423 | 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 | 424 | TranslationBlock *tb; |
| 427 | 425 | CPUState *saved_env; |
| ... | ... | @@ -782,7 +780,7 @@ void do_interrupt (CPUState *env) |
| 782 | 780 | /* Store exception cause */ |
| 783 | 781 | /* Get rS/rD and rA from faulting opcode */ |
| 784 | 782 | env->spr[DSISR] |= |
| 785 | - (ldl_code((void *)(env->nip - 4)) & 0x03FF0000) >> 16; | |
| 783 | + (ldl_code((env->nip - 4)) & 0x03FF0000) >> 16; | |
| 786 | 784 | /* data location address has been stored |
| 787 | 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 | 8 | __func__, T0, T1, dst); |
| 9 | 9 | } |
| 10 | 10 | for (; T1 > 3; T1 -= 4, T0 += 4) { |
| 11 | - ugpr(dst++) = glue(ldl, MEMSUFFIX)((void *)T0); | |
| 11 | + ugpr(dst++) = glue(ldl, MEMSUFFIX)(T0); | |
| 12 | 12 | if (dst == 32) |
| 13 | 13 | dst = 0; |
| 14 | 14 | } |
| 15 | 15 | if (T1 > 0) { |
| 16 | 16 | tmp = 0; |
| 17 | 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 | 20 | ugpr(dst) = tmp; |
| 21 | 21 | } |
| ... | ... | @@ -30,13 +30,13 @@ void glue(do_stsw, MEMSUFFIX) (int src) |
| 30 | 30 | __func__, T0, T1, src); |
| 31 | 31 | } |
| 32 | 32 | for (; T1 > 3; T1 -= 4, T0 += 4) { |
| 33 | - glue(stl, MEMSUFFIX)((void *)T0, ugpr(src++)); | |
| 33 | + glue(stl, MEMSUFFIX)(T0, ugpr(src++)); | |
| 34 | 34 | if (src == 32) |
| 35 | 35 | src = 0; |
| 36 | 36 | } |
| 37 | 37 | if (T1 > 0) { |
| 38 | 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 | 2 | void glue(do_lsw, MEMSUFFIX) (int dst); |
| 3 | 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 | 7 | uint16_t tmp = glue(lduw, MEMSUFFIX)(EA); |
| 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 | 13 | uint32_t tmp = glue(ldl, MEMSUFFIX)(EA); |
| 14 | 14 | return ((tmp & 0xFF000000) >> 24) | ((tmp & 0x00FF0000) >> 8) | |
| 15 | 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 | 20 | uint16_t tmp = ((data & 0xFF00) >> 8) | ((data & 0x00FF) << 8); |
| 21 | 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 | 26 | uint32_t tmp = ((data & 0xFF000000) >> 24) | ((data & 0x00FF0000) >> 8) | |
| 27 | 27 | ((data & 0x0000FF00) << 8) | ((data & 0x000000FF) << 24); |
| ... | ... | @@ -32,14 +32,14 @@ static inline void glue(st32r, MEMSUFFIX) (void *EA, uint32_t data) |
| 32 | 32 | #define PPC_LD_OP(name, op) \ |
| 33 | 33 | PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ |
| 34 | 34 | { \ |
| 35 | - T1 = glue(op, MEMSUFFIX)((void *)T0); \ | |
| 35 | + T1 = glue(op, MEMSUFFIX)(T0); \ | |
| 36 | 36 | RETURN(); \ |
| 37 | 37 | } |
| 38 | 38 | |
| 39 | 39 | #define PPC_ST_OP(name, op) \ |
| 40 | 40 | PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ |
| 41 | 41 | { \ |
| 42 | - glue(op, MEMSUFFIX)((void *)T0, T1); \ | |
| 42 | + glue(op, MEMSUFFIX)(T0, T1); \ | |
| 43 | 43 | RETURN(); \ |
| 44 | 44 | } |
| 45 | 45 | |
| ... | ... | @@ -65,7 +65,7 @@ PPC_OP(glue(lmw, MEMSUFFIX)) |
| 65 | 65 | int dst = PARAM(1); |
| 66 | 66 | |
| 67 | 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 | 70 | RETURN(); |
| 71 | 71 | } |
| ... | ... | @@ -75,7 +75,7 @@ PPC_OP(glue(stmw, MEMSUFFIX)) |
| 75 | 75 | int src = PARAM(1); |
| 76 | 76 | |
| 77 | 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 | 80 | RETURN(); |
| 81 | 81 | } |
| ... | ... | @@ -115,7 +115,7 @@ PPC_OP(glue(stsw, MEMSUFFIX)) |
| 115 | 115 | #define PPC_STF_OP(name, op) \ |
| 116 | 116 | PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ |
| 117 | 117 | { \ |
| 118 | - glue(op, MEMSUFFIX)((void *)T0, FT1); \ | |
| 118 | + glue(op, MEMSUFFIX)(T0, FT1); \ | |
| 119 | 119 | RETURN(); \ |
| 120 | 120 | } |
| 121 | 121 | |
| ... | ... | @@ -126,7 +126,7 @@ PPC_STF_OP(fs, stfl); |
| 126 | 126 | #define PPC_LDF_OP(name, op) \ |
| 127 | 127 | PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ |
| 128 | 128 | { \ |
| 129 | - FT1 = glue(op, MEMSUFFIX)((void *)T0); \ | |
| 129 | + FT1 = glue(op, MEMSUFFIX)(T0); \ | |
| 130 | 130 | RETURN(); \ |
| 131 | 131 | } |
| 132 | 132 | |
| ... | ... | @@ -139,7 +139,7 @@ PPC_OP(glue(lwarx, MEMSUFFIX)) |
| 139 | 139 | if (T0 & 0x03) { |
| 140 | 140 | do_raise_exception(EXCP_ALIGN); |
| 141 | 141 | } else { |
| 142 | - T1 = glue(ldl, MEMSUFFIX)((void *)T0); | |
| 142 | + T1 = glue(ldl, MEMSUFFIX)(T0); | |
| 143 | 143 | regs->reserve = T0; |
| 144 | 144 | } |
| 145 | 145 | RETURN(); |
| ... | ... | @@ -154,7 +154,7 @@ PPC_OP(glue(stwcx, MEMSUFFIX)) |
| 154 | 154 | if (regs->reserve != T0) { |
| 155 | 155 | env->crf[0] = xer_ov; |
| 156 | 156 | } else { |
| 157 | - glue(stl, MEMSUFFIX)((void *)T0, T1); | |
| 157 | + glue(stl, MEMSUFFIX)(T0, T1); | |
| 158 | 158 | env->crf[0] = xer_ov | 0x02; |
| 159 | 159 | } |
| 160 | 160 | } |
| ... | ... | @@ -164,27 +164,27 @@ PPC_OP(glue(stwcx, MEMSUFFIX)) |
| 164 | 164 | |
| 165 | 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 | 175 | RETURN(); |
| 176 | 176 | } |
| 177 | 177 | |
| 178 | 178 | /* External access */ |
| 179 | 179 | PPC_OP(glue(eciwx, MEMSUFFIX)) |
| 180 | 180 | { |
| 181 | - T1 = glue(ldl, MEMSUFFIX)((void *)T0); | |
| 181 | + T1 = glue(ldl, MEMSUFFIX)(T0); | |
| 182 | 182 | RETURN(); |
| 183 | 183 | } |
| 184 | 184 | |
| 185 | 185 | PPC_OP(glue(ecowx, MEMSUFFIX)) |
| 186 | 186 | { |
| 187 | - glue(stl, MEMSUFFIX)((void *)T0, T1); | |
| 187 | + glue(stl, MEMSUFFIX)(T0, T1); | |
| 188 | 188 | RETURN(); |
| 189 | 189 | } |
| 190 | 190 | ... | ... |
target-ppc/translate.c
| ... | ... | @@ -131,7 +131,7 @@ static uint8_t spr_access[1024 / 2]; |
| 131 | 131 | /* internal defines */ |
| 132 | 132 | typedef struct DisasContext { |
| 133 | 133 | struct TranslationBlock *tb; |
| 134 | - uint32_t nip; | |
| 134 | + target_ulong nip; | |
| 135 | 135 | uint32_t opcode; |
| 136 | 136 | uint32_t exception; |
| 137 | 137 | /* Execution mode */ |
| ... | ... | @@ -3029,7 +3029,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, |
| 3029 | 3029 | { |
| 3030 | 3030 | DisasContext ctx, *ctxp = &ctx; |
| 3031 | 3031 | opc_handler_t **table, *handler; |
| 3032 | - uint32_t pc_start; | |
| 3032 | + target_ulong pc_start; | |
| 3033 | 3033 | uint16_t *gen_opc_end; |
| 3034 | 3034 | int j, lj = -1; |
| 3035 | 3035 | |
| ... | ... | @@ -3069,7 +3069,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, |
| 3069 | 3069 | ctx.nip, 1 - msr_pr, msr_ir); |
| 3070 | 3070 | } |
| 3071 | 3071 | #endif |
| 3072 | - ctx.opcode = ldl_code((void *)ctx.nip); | |
| 3072 | + ctx.opcode = ldl_code(ctx.nip); | |
| 3073 | 3073 | #if defined PPC_DEBUG_DISAS |
| 3074 | 3074 | if (loglevel & CPU_LOG_TB_IN_ASM) { |
| 3075 | 3075 | fprintf(logfile, "translate opcode %08x (%02x %02x %02x)\n", |
| ... | ... | @@ -3174,8 +3174,8 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, |
| 3174 | 3174 | cpu_dump_state(env, logfile, fprintf, 0); |
| 3175 | 3175 | } |
| 3176 | 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 | 3179 | fprintf(logfile, "\n"); |
| 3180 | 3180 | } |
| 3181 | 3181 | if (loglevel & CPU_LOG_TB_OP) { | ... | ... |
target-sparc/helper.c
| ... | ... | @@ -62,7 +62,7 @@ void cpu_unlock(void) |
| 62 | 62 | NULL, it means that the function was called in C code (i.e. not |
| 63 | 63 | from generated code or from helper.c) */ |
| 64 | 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 | 67 | TranslationBlock *tb; |
| 68 | 68 | int ret; |
| ... | ... | @@ -282,6 +282,15 @@ void set_cwp(int new_cwp) |
| 282 | 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 | 295 | * Begin execution of an interruption. is_int is TRUE if coming from |
| 287 | 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 | 327 | #endif |
| 319 | 328 | #if !defined(CONFIG_USER_ONLY) |
| 320 | 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 | 331 | return; |
| 324 | 332 | } |
| 325 | 333 | #endif | ... | ... |
target-sparc/op_helper.c
| ... | ... | @@ -108,7 +108,7 @@ void helper_ld_asi(int asi, int size, int sign) |
| 108 | 108 | if (size == 4) |
| 109 | 109 | bswap32s(&ret); |
| 110 | 110 | else if (size == 2) |
| 111 | - bswap16s(&ret); | |
| 111 | + bswap16s((uint16_t *)&ret); | |
| 112 | 112 | break; |
| 113 | 113 | default: |
| 114 | 114 | ret = 0; |
| ... | ... | @@ -198,7 +198,7 @@ void helper_st_asi(int asi, int size, int sign) |
| 198 | 198 | if (size == 4) |
| 199 | 199 | bswap32s(&temp); |
| 200 | 200 | else if (size == 2) |
| 201 | - bswap16s(&temp); | |
| 201 | + bswap16s((uint16_t *)&temp); | |
| 202 | 202 | |
| 203 | 203 | cpu_physical_memory_write(T0, (void *) &temp, size); |
| 204 | 204 | } | ... | ... |
target-sparc/op_mem.h
| ... | ... | @@ -2,13 +2,13 @@ |
| 2 | 2 | #define SPARC_LD_OP(name, qp) \ |
| 3 | 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 | 8 | #define SPARC_ST_OP(name, op) \ |
| 9 | 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 | 14 | SPARC_LD_OP(ld, ldl); |
| ... | ... | @@ -24,48 +24,48 @@ SPARC_ST_OP(sth, stw); |
| 24 | 24 | |
| 25 | 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 | 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 | 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 | 41 | T1 = tmp; |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 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 | 50 | /*** Floating-point store ***/ |
| 51 | 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 | 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 | 61 | /*** Floating-point load ***/ |
| 62 | 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 | 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 | 71 | #undef MEMSUFFIX | ... | ... |
target-sparc/translate.c
| ... | ... | @@ -291,10 +291,7 @@ GEN32(gen_op_store_DT2_fpr, gen_op_store_DT2_fpr_fprf); |
| 291 | 291 | |
| 292 | 292 | #if defined(CONFIG_USER_ONLY) |
| 293 | 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 | 295 | #define supervisor(dc) 0 |
| 299 | 296 | #else |
| 300 | 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 | 611 | } |
| 615 | 612 | } |
| 616 | 613 | |
| 614 | +#if 0 | |
| 617 | 615 | static void gen_debug(DisasContext *s, uint32_t pc) |
| 618 | 616 | { |
| 619 | 617 | gen_op_jmp_im(pc); |
| 620 | 618 | gen_op_debug(); |
| 621 | 619 | s->is_br = 1; |
| 622 | 620 | } |
| 621 | +#endif | |
| 623 | 622 | |
| 624 | 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 | 632 | { |
| 634 | 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 | 636 | opc = GET_FIELD(insn, 0, 1); |
| 638 | 637 | |
| 639 | 638 | rd = GET_FIELD(insn, 2, 6); |
| ... | ... | @@ -1290,6 +1289,12 @@ static void disas_sparc_insn(DisasContext * dc) |
| 1290 | 1289 | gen_movl_reg_T1(rd); |
| 1291 | 1290 | gen_op_swapa(insn, 1, 4, 0); |
| 1292 | 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 | 1298 | #endif |
| 1294 | 1299 | default: |
| 1295 | 1300 | goto illegal_insn; |
| ... | ... | @@ -1520,8 +1525,8 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, |
| 1520 | 1525 | #ifdef DEBUG_DISAS |
| 1521 | 1526 | if (loglevel & CPU_LOG_TB_IN_ASM) { |
| 1522 | 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 | 1530 | fprintf(logfile, "\n"); |
| 1526 | 1531 | if (loglevel & CPU_LOG_TB_OP) { |
| 1527 | 1532 | fprintf(logfile, "OP:\n"); |
| ... | ... | @@ -1626,6 +1631,10 @@ target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr) |
| 1626 | 1631 | } |
| 1627 | 1632 | |
| 1628 | 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 | 1638 | target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr) |
| 1630 | 1639 | { |
| 1631 | 1640 | uint32_t phys_addr; | ... | ... |