Commit b12363e1b7d7454daa21c861290f49de42c2ea71
1 parent
6e35d524
target-ppc: remove FPRF optimization
FPRF optimization is totally broken, remove it. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6033 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
0 additions
and
29 deletions
target-ppc/translate.c
... | ... | @@ -41,7 +41,6 @@ |
41 | 41 | //#define DO_SINGLE_STEP |
42 | 42 | //#define PPC_DEBUG_DISAS |
43 | 43 | //#define DO_PPC_STATISTICS |
44 | -//#define OPTIMIZE_FPRF_UPDATE | |
45 | 44 | |
46 | 45 | /*****************************************************************************/ |
47 | 46 | /* Code translation helpers */ |
... | ... | @@ -162,11 +161,6 @@ void ppc_translate_init(void) |
162 | 161 | done_init = 1; |
163 | 162 | } |
164 | 163 | |
165 | -#if defined(OPTIMIZE_FPRF_UPDATE) | |
166 | -static uint16_t *gen_fprf_buf[OPC_BUF_SIZE]; | |
167 | -static uint16_t **gen_fprf_ptr; | |
168 | -#endif | |
169 | - | |
170 | 164 | /* internal defines */ |
171 | 165 | typedef struct DisasContext { |
172 | 166 | struct TranslationBlock *tb; |
... | ... | @@ -216,9 +210,6 @@ static always_inline void gen_compute_fprf (TCGv_i64 arg, int set_fprf, int set_ |
216 | 210 | |
217 | 211 | if (set_fprf != 0) { |
218 | 212 | /* This case might be optimized later */ |
219 | -#if defined(OPTIMIZE_FPRF_UPDATE) | |
220 | - *gen_fprf_ptr++ = gen_opc_ptr; | |
221 | -#endif | |
222 | 213 | tcg_gen_movi_i32(t0, 1); |
223 | 214 | gen_helper_compute_fprf(t0, arg, t0); |
224 | 215 | if (unlikely(set_rc)) { |
... | ... | @@ -235,17 +226,6 @@ static always_inline void gen_compute_fprf (TCGv_i64 arg, int set_fprf, int set_ |
235 | 226 | tcg_temp_free_i32(t0); |
236 | 227 | } |
237 | 228 | |
238 | -static always_inline void gen_optimize_fprf (void) | |
239 | -{ | |
240 | -#if defined(OPTIMIZE_FPRF_UPDATE) | |
241 | - uint16_t **ptr; | |
242 | - | |
243 | - for (ptr = gen_fprf_buf; ptr != (gen_fprf_ptr - 1); ptr++) | |
244 | - *ptr = INDEX_op_nop1; | |
245 | - gen_fprf_ptr = gen_fprf_buf; | |
246 | -#endif | |
247 | -} | |
248 | - | |
249 | 229 | static always_inline void gen_set_access_type (DisasContext *ctx, int access_type) |
250 | 230 | { |
251 | 231 | if (ctx->access_type != access_type) { |
... | ... | @@ -2326,7 +2306,6 @@ GEN_HANDLER(mcrfs, 0x3F, 0x00, 0x02, 0x0063F801, PPC_FLOAT) |
2326 | 2306 | gen_exception(ctx, POWERPC_EXCP_FPU); |
2327 | 2307 | return; |
2328 | 2308 | } |
2329 | - gen_optimize_fprf(); | |
2330 | 2309 | bfa = 4 * (7 - crfS(ctx->opcode)); |
2331 | 2310 | tcg_gen_shri_i32(cpu_crf[crfD(ctx->opcode)], cpu_fpscr, bfa); |
2332 | 2311 | tcg_gen_andi_i32(cpu_crf[crfD(ctx->opcode)], cpu_crf[crfD(ctx->opcode)], 0xf); |
... | ... | @@ -2340,7 +2319,6 @@ GEN_HANDLER(mffs, 0x3F, 0x07, 0x12, 0x001FF800, PPC_FLOAT) |
2340 | 2319 | gen_exception(ctx, POWERPC_EXCP_FPU); |
2341 | 2320 | return; |
2342 | 2321 | } |
2343 | - gen_optimize_fprf(); | |
2344 | 2322 | gen_reset_fpstatus(); |
2345 | 2323 | tcg_gen_extu_i32_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpscr); |
2346 | 2324 | gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); |
... | ... | @@ -2356,7 +2334,6 @@ GEN_HANDLER(mtfsb0, 0x3F, 0x06, 0x02, 0x001FF800, PPC_FLOAT) |
2356 | 2334 | return; |
2357 | 2335 | } |
2358 | 2336 | crb = 31 - crbD(ctx->opcode); |
2359 | - gen_optimize_fprf(); | |
2360 | 2337 | gen_reset_fpstatus(); |
2361 | 2338 | if (likely(crb != FPSCR_FEX && crb != FPSCR_VX)) { |
2362 | 2339 | TCGv_i32 t0 = tcg_const_i32(crb); |
... | ... | @@ -2378,7 +2355,6 @@ GEN_HANDLER(mtfsb1, 0x3F, 0x06, 0x01, 0x001FF800, PPC_FLOAT) |
2378 | 2355 | return; |
2379 | 2356 | } |
2380 | 2357 | crb = 31 - crbD(ctx->opcode); |
2381 | - gen_optimize_fprf(); | |
2382 | 2358 | gen_reset_fpstatus(); |
2383 | 2359 | /* XXX: we pretend we can only do IEEE floating-point computations */ |
2384 | 2360 | if (likely(crb != FPSCR_FEX && crb != FPSCR_VX && crb != FPSCR_NI)) { |
... | ... | @@ -2402,7 +2378,6 @@ GEN_HANDLER(mtfsf, 0x3F, 0x07, 0x16, 0x02010000, PPC_FLOAT) |
2402 | 2378 | gen_exception(ctx, POWERPC_EXCP_FPU); |
2403 | 2379 | return; |
2404 | 2380 | } |
2405 | - gen_optimize_fprf(); | |
2406 | 2381 | gen_reset_fpstatus(); |
2407 | 2382 | t0 = tcg_const_i32(FM(ctx->opcode)); |
2408 | 2383 | gen_helper_store_fpscr(cpu_fpr[rB(ctx->opcode)], t0); |
... | ... | @@ -2427,7 +2402,6 @@ GEN_HANDLER(mtfsfi, 0x3F, 0x06, 0x04, 0x006f0800, PPC_FLOAT) |
2427 | 2402 | } |
2428 | 2403 | bf = crbD(ctx->opcode) >> 2; |
2429 | 2404 | sh = 7 - bf; |
2430 | - gen_optimize_fprf(); | |
2431 | 2405 | gen_reset_fpstatus(); |
2432 | 2406 | t0 = tcg_const_i64(FPIMM(ctx->opcode) << (4 * sh)); |
2433 | 2407 | t1 = tcg_const_i32(1 << sh); |
... | ... | @@ -7727,9 +7701,6 @@ static always_inline void gen_intermediate_code_internal (CPUState *env, |
7727 | 7701 | |
7728 | 7702 | pc_start = tb->pc; |
7729 | 7703 | gen_opc_end = gen_opc_buf + OPC_MAX_SIZE; |
7730 | -#if defined(OPTIMIZE_FPRF_UPDATE) | |
7731 | - gen_fprf_ptr = gen_fprf_buf; | |
7732 | -#endif | |
7733 | 7704 | ctx.nip = pc_start; |
7734 | 7705 | ctx.tb = tb; |
7735 | 7706 | ctx.exception = POWERPC_EXCP_NONE; | ... | ... |