Revision 638737ad
b/target-sparc/translate.c | ||
---|---|---|
1558 | 1558 |
return 0; |
1559 | 1559 |
} |
1560 | 1560 |
|
1561 |
static inline void gen_update_fprs_dirty(int rd) |
|
1562 |
{ |
|
1563 |
#if defined(TARGET_SPARC64) |
|
1564 |
tcg_gen_ori_i32(cpu_fprs, cpu_fprs, (rd < 32) ? 1 : 2); |
|
1565 |
#endif |
|
1566 |
} |
|
1567 |
|
|
1561 | 1568 |
static inline void gen_op_clear_ieee_excp_and_FTT(void) |
1562 | 1569 |
{ |
1563 | 1570 |
tcg_gen_andi_tl(cpu_fsr, cpu_fsr, FSR_FTT_CEXC_NMASK); |
... | ... | |
2351 | 2358 |
switch (xop) { |
2352 | 2359 |
case 0x1: /* fmovs */ |
2353 | 2360 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs2]); |
2361 |
gen_update_fprs_dirty(rd); |
|
2354 | 2362 |
break; |
2355 | 2363 |
case 0x5: /* fnegs */ |
2356 | 2364 |
gen_helper_fnegs(cpu_fpr[rd], cpu_fpr[rs2]); |
2365 |
gen_update_fprs_dirty(rd); |
|
2357 | 2366 |
break; |
2358 | 2367 |
case 0x9: /* fabss */ |
2359 | 2368 |
gen_helper_fabss(cpu_fpr[rd], cpu_fpr[rs2]); |
2369 |
gen_update_fprs_dirty(rd); |
|
2360 | 2370 |
break; |
2361 | 2371 |
case 0x29: /* fsqrts */ |
2362 | 2372 |
CHECK_FPU_FEATURE(dc, FSQRT); |
... | ... | |
2364 | 2374 |
gen_helper_fsqrts(cpu_tmp32, cpu_fpr[rs2]); |
2365 | 2375 |
gen_helper_check_ieee_exceptions(); |
2366 | 2376 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2377 |
gen_update_fprs_dirty(rd); |
|
2367 | 2378 |
break; |
2368 | 2379 |
case 0x2a: /* fsqrtd */ |
2369 | 2380 |
CHECK_FPU_FEATURE(dc, FSQRT); |
... | ... | |
2372 | 2383 |
gen_helper_fsqrtd(); |
2373 | 2384 |
gen_helper_check_ieee_exceptions(); |
2374 | 2385 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2386 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2375 | 2387 |
break; |
2376 | 2388 |
case 0x2b: /* fsqrtq */ |
2377 | 2389 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2380 | 2392 |
gen_helper_fsqrtq(); |
2381 | 2393 |
gen_helper_check_ieee_exceptions(); |
2382 | 2394 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2395 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2383 | 2396 |
break; |
2384 | 2397 |
case 0x41: /* fadds */ |
2385 | 2398 |
gen_clear_float_exceptions(); |
2386 | 2399 |
gen_helper_fadds(cpu_tmp32, cpu_fpr[rs1], cpu_fpr[rs2]); |
2387 | 2400 |
gen_helper_check_ieee_exceptions(); |
2388 | 2401 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2402 |
gen_update_fprs_dirty(rd); |
|
2389 | 2403 |
break; |
2390 | 2404 |
case 0x42: /* faddd */ |
2391 | 2405 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
... | ... | |
2394 | 2408 |
gen_helper_faddd(); |
2395 | 2409 |
gen_helper_check_ieee_exceptions(); |
2396 | 2410 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2411 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2397 | 2412 |
break; |
2398 | 2413 |
case 0x43: /* faddq */ |
2399 | 2414 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2403 | 2418 |
gen_helper_faddq(); |
2404 | 2419 |
gen_helper_check_ieee_exceptions(); |
2405 | 2420 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2421 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2406 | 2422 |
break; |
2407 | 2423 |
case 0x45: /* fsubs */ |
2408 | 2424 |
gen_clear_float_exceptions(); |
2409 | 2425 |
gen_helper_fsubs(cpu_tmp32, cpu_fpr[rs1], cpu_fpr[rs2]); |
2410 | 2426 |
gen_helper_check_ieee_exceptions(); |
2411 | 2427 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2428 |
gen_update_fprs_dirty(rd); |
|
2412 | 2429 |
break; |
2413 | 2430 |
case 0x46: /* fsubd */ |
2414 | 2431 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
... | ... | |
2417 | 2434 |
gen_helper_fsubd(); |
2418 | 2435 |
gen_helper_check_ieee_exceptions(); |
2419 | 2436 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2437 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2420 | 2438 |
break; |
2421 | 2439 |
case 0x47: /* fsubq */ |
2422 | 2440 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2426 | 2444 |
gen_helper_fsubq(); |
2427 | 2445 |
gen_helper_check_ieee_exceptions(); |
2428 | 2446 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2447 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2429 | 2448 |
break; |
2430 | 2449 |
case 0x49: /* fmuls */ |
2431 | 2450 |
CHECK_FPU_FEATURE(dc, FMUL); |
... | ... | |
2433 | 2452 |
gen_helper_fmuls(cpu_tmp32, cpu_fpr[rs1], cpu_fpr[rs2]); |
2434 | 2453 |
gen_helper_check_ieee_exceptions(); |
2435 | 2454 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2455 |
gen_update_fprs_dirty(rd); |
|
2436 | 2456 |
break; |
2437 | 2457 |
case 0x4a: /* fmuld */ |
2438 | 2458 |
CHECK_FPU_FEATURE(dc, FMUL); |
... | ... | |
2442 | 2462 |
gen_helper_fmuld(); |
2443 | 2463 |
gen_helper_check_ieee_exceptions(); |
2444 | 2464 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2465 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2445 | 2466 |
break; |
2446 | 2467 |
case 0x4b: /* fmulq */ |
2447 | 2468 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2452 | 2473 |
gen_helper_fmulq(); |
2453 | 2474 |
gen_helper_check_ieee_exceptions(); |
2454 | 2475 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2476 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2455 | 2477 |
break; |
2456 | 2478 |
case 0x4d: /* fdivs */ |
2457 | 2479 |
gen_clear_float_exceptions(); |
2458 | 2480 |
gen_helper_fdivs(cpu_tmp32, cpu_fpr[rs1], cpu_fpr[rs2]); |
2459 | 2481 |
gen_helper_check_ieee_exceptions(); |
2460 | 2482 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2483 |
gen_update_fprs_dirty(rd); |
|
2461 | 2484 |
break; |
2462 | 2485 |
case 0x4e: /* fdivd */ |
2463 | 2486 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
... | ... | |
2466 | 2489 |
gen_helper_fdivd(); |
2467 | 2490 |
gen_helper_check_ieee_exceptions(); |
2468 | 2491 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2492 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2469 | 2493 |
break; |
2470 | 2494 |
case 0x4f: /* fdivq */ |
2471 | 2495 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2475 | 2499 |
gen_helper_fdivq(); |
2476 | 2500 |
gen_helper_check_ieee_exceptions(); |
2477 | 2501 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2502 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2478 | 2503 |
break; |
2479 | 2504 |
case 0x69: /* fsmuld */ |
2480 | 2505 |
CHECK_FPU_FEATURE(dc, FSMULD); |
... | ... | |
2482 | 2507 |
gen_helper_fsmuld(cpu_fpr[rs1], cpu_fpr[rs2]); |
2483 | 2508 |
gen_helper_check_ieee_exceptions(); |
2484 | 2509 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2510 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2485 | 2511 |
break; |
2486 | 2512 |
case 0x6e: /* fdmulq */ |
2487 | 2513 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2491 | 2517 |
gen_helper_fdmulq(); |
2492 | 2518 |
gen_helper_check_ieee_exceptions(); |
2493 | 2519 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2520 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2494 | 2521 |
break; |
2495 | 2522 |
case 0xc4: /* fitos */ |
2496 | 2523 |
gen_clear_float_exceptions(); |
2497 | 2524 |
gen_helper_fitos(cpu_tmp32, cpu_fpr[rs2]); |
2498 | 2525 |
gen_helper_check_ieee_exceptions(); |
2499 | 2526 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2527 |
gen_update_fprs_dirty(rd); |
|
2500 | 2528 |
break; |
2501 | 2529 |
case 0xc6: /* fdtos */ |
2502 | 2530 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
... | ... | |
2504 | 2532 |
gen_helper_fdtos(cpu_tmp32); |
2505 | 2533 |
gen_helper_check_ieee_exceptions(); |
2506 | 2534 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2535 |
gen_update_fprs_dirty(rd); |
|
2507 | 2536 |
break; |
2508 | 2537 |
case 0xc7: /* fqtos */ |
2509 | 2538 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2512 | 2541 |
gen_helper_fqtos(cpu_tmp32); |
2513 | 2542 |
gen_helper_check_ieee_exceptions(); |
2514 | 2543 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2544 |
gen_update_fprs_dirty(rd); |
|
2515 | 2545 |
break; |
2516 | 2546 |
case 0xc8: /* fitod */ |
2517 | 2547 |
gen_helper_fitod(cpu_fpr[rs2]); |
2518 | 2548 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2549 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2519 | 2550 |
break; |
2520 | 2551 |
case 0xc9: /* fstod */ |
2521 | 2552 |
gen_helper_fstod(cpu_fpr[rs2]); |
2522 | 2553 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2554 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2523 | 2555 |
break; |
2524 | 2556 |
case 0xcb: /* fqtod */ |
2525 | 2557 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2528 | 2560 |
gen_helper_fqtod(); |
2529 | 2561 |
gen_helper_check_ieee_exceptions(); |
2530 | 2562 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2563 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2531 | 2564 |
break; |
2532 | 2565 |
case 0xcc: /* fitoq */ |
2533 | 2566 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
2534 | 2567 |
gen_helper_fitoq(cpu_fpr[rs2]); |
2535 | 2568 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2569 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2536 | 2570 |
break; |
2537 | 2571 |
case 0xcd: /* fstoq */ |
2538 | 2572 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
2539 | 2573 |
gen_helper_fstoq(cpu_fpr[rs2]); |
2540 | 2574 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2575 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2541 | 2576 |
break; |
2542 | 2577 |
case 0xce: /* fdtoq */ |
2543 | 2578 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
2544 | 2579 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
2545 | 2580 |
gen_helper_fdtoq(); |
2546 | 2581 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2582 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2547 | 2583 |
break; |
2548 | 2584 |
case 0xd1: /* fstoi */ |
2549 | 2585 |
gen_clear_float_exceptions(); |
2550 | 2586 |
gen_helper_fstoi(cpu_tmp32, cpu_fpr[rs2]); |
2551 | 2587 |
gen_helper_check_ieee_exceptions(); |
2552 | 2588 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2589 |
gen_update_fprs_dirty(rd); |
|
2553 | 2590 |
break; |
2554 | 2591 |
case 0xd2: /* fdtoi */ |
2555 | 2592 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
... | ... | |
2557 | 2594 |
gen_helper_fdtoi(cpu_tmp32); |
2558 | 2595 |
gen_helper_check_ieee_exceptions(); |
2559 | 2596 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2597 |
gen_update_fprs_dirty(rd); |
|
2560 | 2598 |
break; |
2561 | 2599 |
case 0xd3: /* fqtoi */ |
2562 | 2600 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2565 | 2603 |
gen_helper_fqtoi(cpu_tmp32); |
2566 | 2604 |
gen_helper_check_ieee_exceptions(); |
2567 | 2605 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2606 |
gen_update_fprs_dirty(rd); |
|
2568 | 2607 |
break; |
2569 | 2608 |
#ifdef TARGET_SPARC64 |
2570 | 2609 |
case 0x2: /* V9 fmovd */ |
2571 | 2610 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs2)]); |
2572 | 2611 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd) + 1], |
2573 | 2612 |
cpu_fpr[DFPREG(rs2) + 1]); |
2613 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2574 | 2614 |
break; |
2575 | 2615 |
case 0x3: /* V9 fmovq */ |
2576 | 2616 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2581 | 2621 |
cpu_fpr[QFPREG(rs2) + 2]); |
2582 | 2622 |
tcg_gen_mov_i32(cpu_fpr[QFPREG(rd) + 3], |
2583 | 2623 |
cpu_fpr[QFPREG(rs2) + 3]); |
2624 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2584 | 2625 |
break; |
2585 | 2626 |
case 0x6: /* V9 fnegd */ |
2586 | 2627 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
2587 | 2628 |
gen_helper_fnegd(); |
2588 | 2629 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2630 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2589 | 2631 |
break; |
2590 | 2632 |
case 0x7: /* V9 fnegq */ |
2591 | 2633 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
2592 | 2634 |
gen_op_load_fpr_QT1(QFPREG(rs2)); |
2593 | 2635 |
gen_helper_fnegq(); |
2594 | 2636 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2637 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2595 | 2638 |
break; |
2596 | 2639 |
case 0xa: /* V9 fabsd */ |
2597 | 2640 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
2598 | 2641 |
gen_helper_fabsd(); |
2599 | 2642 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2643 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2600 | 2644 |
break; |
2601 | 2645 |
case 0xb: /* V9 fabsq */ |
2602 | 2646 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
2603 | 2647 |
gen_op_load_fpr_QT1(QFPREG(rs2)); |
2604 | 2648 |
gen_helper_fabsq(); |
2605 | 2649 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2650 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2606 | 2651 |
break; |
2607 | 2652 |
case 0x81: /* V9 fstox */ |
2608 | 2653 |
gen_clear_float_exceptions(); |
2609 | 2654 |
gen_helper_fstox(cpu_fpr[rs2]); |
2610 | 2655 |
gen_helper_check_ieee_exceptions(); |
2611 | 2656 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2657 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2612 | 2658 |
break; |
2613 | 2659 |
case 0x82: /* V9 fdtox */ |
2614 | 2660 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
... | ... | |
2616 | 2662 |
gen_helper_fdtox(); |
2617 | 2663 |
gen_helper_check_ieee_exceptions(); |
2618 | 2664 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2665 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2619 | 2666 |
break; |
2620 | 2667 |
case 0x83: /* V9 fqtox */ |
2621 | 2668 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2624 | 2671 |
gen_helper_fqtox(); |
2625 | 2672 |
gen_helper_check_ieee_exceptions(); |
2626 | 2673 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2674 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2627 | 2675 |
break; |
2628 | 2676 |
case 0x84: /* V9 fxtos */ |
2629 | 2677 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
... | ... | |
2631 | 2679 |
gen_helper_fxtos(cpu_tmp32); |
2632 | 2680 |
gen_helper_check_ieee_exceptions(); |
2633 | 2681 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_tmp32); |
2682 |
gen_update_fprs_dirty(rd); |
|
2634 | 2683 |
break; |
2635 | 2684 |
case 0x88: /* V9 fxtod */ |
2636 | 2685 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
... | ... | |
2638 | 2687 |
gen_helper_fxtod(); |
2639 | 2688 |
gen_helper_check_ieee_exceptions(); |
2640 | 2689 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
2690 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2641 | 2691 |
break; |
2642 | 2692 |
case 0x8c: /* V9 fxtoq */ |
2643 | 2693 |
CHECK_FPU_FEATURE(dc, FLOAT128); |
... | ... | |
2646 | 2696 |
gen_helper_fxtoq(); |
2647 | 2697 |
gen_helper_check_ieee_exceptions(); |
2648 | 2698 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
2699 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2649 | 2700 |
break; |
2650 | 2701 |
#endif |
2651 | 2702 |
default: |
... | ... | |
2672 | 2723 |
tcg_gen_brcondi_tl(gen_tcg_cond_reg[cond], cpu_src1, |
2673 | 2724 |
0, l1); |
2674 | 2725 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs2]); |
2726 |
gen_update_fprs_dirty(rd); |
|
2675 | 2727 |
gen_set_label(l1); |
2676 | 2728 |
break; |
2677 | 2729 |
} else if ((xop & 0x11f) == 0x006) { // V9 fmovdr |
... | ... | |
2684 | 2736 |
0, l1); |
2685 | 2737 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs2)]); |
2686 | 2738 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd) + 1], cpu_fpr[DFPREG(rs2) + 1]); |
2739 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
2687 | 2740 |
gen_set_label(l1); |
2688 | 2741 |
break; |
2689 | 2742 |
} else if ((xop & 0x11f) == 0x007) { // V9 fmovqr |
... | ... | |
2699 | 2752 |
tcg_gen_mov_i32(cpu_fpr[QFPREG(rd) + 1], cpu_fpr[QFPREG(rs2) + 1]); |
2700 | 2753 |
tcg_gen_mov_i32(cpu_fpr[QFPREG(rd) + 2], cpu_fpr[QFPREG(rs2) + 2]); |
2701 | 2754 |
tcg_gen_mov_i32(cpu_fpr[QFPREG(rd) + 3], cpu_fpr[QFPREG(rs2) + 3]); |
2755 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
2702 | 2756 |
gen_set_label(l1); |
2703 | 2757 |
break; |
2704 | 2758 |
} |
... | ... | |
2717 | 2771 |
tcg_gen_brcondi_tl(TCG_COND_EQ, r_cond, \ |
2718 | 2772 |
0, l1); \ |
2719 | 2773 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs2]); \ |
2774 |
gen_update_fprs_dirty(rd); \ |
|
2720 | 2775 |
gen_set_label(l1); \ |
2721 | 2776 |
tcg_temp_free(r_cond); \ |
2722 | 2777 |
} |
... | ... | |
2735 | 2790 |
cpu_fpr[DFPREG(rs2)]); \ |
2736 | 2791 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd) + 1], \ |
2737 | 2792 |
cpu_fpr[DFPREG(rs2) + 1]); \ |
2793 |
gen_update_fprs_dirty(DFPREG(rd)); \ |
|
2738 | 2794 |
gen_set_label(l1); \ |
2739 | 2795 |
tcg_temp_free(r_cond); \ |
2740 | 2796 |
} |
... | ... | |
2757 | 2813 |
cpu_fpr[QFPREG(rs2) + 2]); \ |
2758 | 2814 |
tcg_gen_mov_i32(cpu_fpr[QFPREG(rd) + 3], \ |
2759 | 2815 |
cpu_fpr[QFPREG(rs2) + 3]); \ |
2816 |
gen_update_fprs_dirty(QFPREG(rd)); \ |
|
2760 | 2817 |
gen_set_label(l1); \ |
2761 | 2818 |
tcg_temp_free(r_cond); \ |
2762 | 2819 |
} |
... | ... | |
2815 | 2872 |
tcg_gen_brcondi_tl(TCG_COND_EQ, r_cond, \ |
2816 | 2873 |
0, l1); \ |
2817 | 2874 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs2]); \ |
2875 |
gen_update_fprs_dirty(rd); \ |
|
2818 | 2876 |
gen_set_label(l1); \ |
2819 | 2877 |
tcg_temp_free(r_cond); \ |
2820 | 2878 |
} |
... | ... | |
2833 | 2891 |
cpu_fpr[DFPREG(rs2)]); \ |
2834 | 2892 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd) + 1], \ |
2835 | 2893 |
cpu_fpr[DFPREG(rs2) + 1]); \ |
2894 |
gen_update_fprs_dirty(DFPREG(rd)); \ |
|
2836 | 2895 |
gen_set_label(l1); \ |
2837 | 2896 |
tcg_temp_free(r_cond); \ |
2838 | 2897 |
} |
... | ... | |
2855 | 2914 |
cpu_fpr[QFPREG(rs2) + 2]); \ |
2856 | 2915 |
tcg_gen_mov_i32(cpu_fpr[QFPREG(rd) + 3], \ |
2857 | 2916 |
cpu_fpr[QFPREG(rs2) + 3]); \ |
2917 |
gen_update_fprs_dirty(QFPREG(rd)); \ |
|
2858 | 2918 |
gen_set_label(l1); \ |
2859 | 2919 |
tcg_temp_free(r_cond); \ |
2860 | 2920 |
} |
... | ... | |
3848 | 3908 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3849 | 3909 |
gen_helper_fmul8x16(); |
3850 | 3910 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3911 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3851 | 3912 |
break; |
3852 | 3913 |
case 0x033: /* VIS I fmul8x16au */ |
3853 | 3914 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3855 | 3916 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3856 | 3917 |
gen_helper_fmul8x16au(); |
3857 | 3918 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3919 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3858 | 3920 |
break; |
3859 | 3921 |
case 0x035: /* VIS I fmul8x16al */ |
3860 | 3922 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3862 | 3924 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3863 | 3925 |
gen_helper_fmul8x16al(); |
3864 | 3926 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3927 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3865 | 3928 |
break; |
3866 | 3929 |
case 0x036: /* VIS I fmul8sux16 */ |
3867 | 3930 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3869 | 3932 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3870 | 3933 |
gen_helper_fmul8sux16(); |
3871 | 3934 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3935 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3872 | 3936 |
break; |
3873 | 3937 |
case 0x037: /* VIS I fmul8ulx16 */ |
3874 | 3938 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3876 | 3940 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3877 | 3941 |
gen_helper_fmul8ulx16(); |
3878 | 3942 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3943 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3879 | 3944 |
break; |
3880 | 3945 |
case 0x038: /* VIS I fmuld8sux16 */ |
3881 | 3946 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3883 | 3948 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3884 | 3949 |
gen_helper_fmuld8sux16(); |
3885 | 3950 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3951 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3886 | 3952 |
break; |
3887 | 3953 |
case 0x039: /* VIS I fmuld8ulx16 */ |
3888 | 3954 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3890 | 3956 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3891 | 3957 |
gen_helper_fmuld8ulx16(); |
3892 | 3958 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3959 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3893 | 3960 |
break; |
3894 | 3961 |
case 0x03a: /* VIS I fpack32 */ |
3895 | 3962 |
case 0x03b: /* VIS I fpack16 */ |
... | ... | |
3903 | 3970 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3904 | 3971 |
gen_helper_faligndata(); |
3905 | 3972 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3973 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3906 | 3974 |
break; |
3907 | 3975 |
case 0x04b: /* VIS I fpmerge */ |
3908 | 3976 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3910 | 3978 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3911 | 3979 |
gen_helper_fpmerge(); |
3912 | 3980 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3981 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3913 | 3982 |
break; |
3914 | 3983 |
case 0x04c: /* VIS II bshuffle */ |
3915 | 3984 |
// XXX |
... | ... | |
3920 | 3989 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3921 | 3990 |
gen_helper_fexpand(); |
3922 | 3991 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
3992 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3923 | 3993 |
break; |
3924 | 3994 |
case 0x050: /* VIS I fpadd16 */ |
3925 | 3995 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3927 | 3997 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3928 | 3998 |
gen_helper_fpadd16(); |
3929 | 3999 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
4000 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3930 | 4001 |
break; |
3931 | 4002 |
case 0x051: /* VIS I fpadd16s */ |
3932 | 4003 |
CHECK_FPU_FEATURE(dc, VIS1); |
3933 | 4004 |
gen_helper_fpadd16s(cpu_fpr[rd], |
3934 | 4005 |
cpu_fpr[rs1], cpu_fpr[rs2]); |
4006 |
gen_update_fprs_dirty(rd); |
|
3935 | 4007 |
break; |
3936 | 4008 |
case 0x052: /* VIS I fpadd32 */ |
3937 | 4009 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3939 | 4011 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3940 | 4012 |
gen_helper_fpadd32(); |
3941 | 4013 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
4014 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3942 | 4015 |
break; |
3943 | 4016 |
case 0x053: /* VIS I fpadd32s */ |
3944 | 4017 |
CHECK_FPU_FEATURE(dc, VIS1); |
3945 | 4018 |
gen_helper_fpadd32s(cpu_fpr[rd], |
3946 | 4019 |
cpu_fpr[rs1], cpu_fpr[rs2]); |
4020 |
gen_update_fprs_dirty(rd); |
|
3947 | 4021 |
break; |
3948 | 4022 |
case 0x054: /* VIS I fpsub16 */ |
3949 | 4023 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3951 | 4025 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3952 | 4026 |
gen_helper_fpsub16(); |
3953 | 4027 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
4028 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3954 | 4029 |
break; |
3955 | 4030 |
case 0x055: /* VIS I fpsub16s */ |
3956 | 4031 |
CHECK_FPU_FEATURE(dc, VIS1); |
3957 | 4032 |
gen_helper_fpsub16s(cpu_fpr[rd], |
3958 | 4033 |
cpu_fpr[rs1], cpu_fpr[rs2]); |
4034 |
gen_update_fprs_dirty(rd); |
|
3959 | 4035 |
break; |
3960 | 4036 |
case 0x056: /* VIS I fpsub32 */ |
3961 | 4037 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3963 | 4039 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3964 | 4040 |
gen_helper_fpsub32(); |
3965 | 4041 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
4042 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3966 | 4043 |
break; |
3967 | 4044 |
case 0x057: /* VIS I fpsub32s */ |
3968 | 4045 |
CHECK_FPU_FEATURE(dc, VIS1); |
3969 | 4046 |
gen_helper_fpsub32s(cpu_fpr[rd], |
3970 | 4047 |
cpu_fpr[rs1], cpu_fpr[rs2]); |
4048 |
gen_update_fprs_dirty(rd); |
|
3971 | 4049 |
break; |
3972 | 4050 |
case 0x060: /* VIS I fzero */ |
3973 | 4051 |
CHECK_FPU_FEATURE(dc, VIS1); |
3974 | 4052 |
tcg_gen_movi_i32(cpu_fpr[DFPREG(rd)], 0); |
3975 | 4053 |
tcg_gen_movi_i32(cpu_fpr[DFPREG(rd) + 1], 0); |
4054 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3976 | 4055 |
break; |
3977 | 4056 |
case 0x061: /* VIS I fzeros */ |
3978 | 4057 |
CHECK_FPU_FEATURE(dc, VIS1); |
3979 | 4058 |
tcg_gen_movi_i32(cpu_fpr[rd], 0); |
4059 |
gen_update_fprs_dirty(rd); |
|
3980 | 4060 |
break; |
3981 | 4061 |
case 0x062: /* VIS I fnor */ |
3982 | 4062 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3985 | 4065 |
tcg_gen_nor_i32(cpu_fpr[DFPREG(rd) + 1], |
3986 | 4066 |
cpu_fpr[DFPREG(rs1) + 1], |
3987 | 4067 |
cpu_fpr[DFPREG(rs2) + 1]); |
4068 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
3988 | 4069 |
break; |
3989 | 4070 |
case 0x063: /* VIS I fnors */ |
3990 | 4071 |
CHECK_FPU_FEATURE(dc, VIS1); |
3991 | 4072 |
tcg_gen_nor_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4073 |
gen_update_fprs_dirty(rd); |
|
3992 | 4074 |
break; |
3993 | 4075 |
case 0x064: /* VIS I fandnot2 */ |
3994 | 4076 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
3997 | 4079 |
tcg_gen_andc_i32(cpu_fpr[DFPREG(rd) + 1], |
3998 | 4080 |
cpu_fpr[DFPREG(rs1) + 1], |
3999 | 4081 |
cpu_fpr[DFPREG(rs2) + 1]); |
4082 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4000 | 4083 |
break; |
4001 | 4084 |
case 0x065: /* VIS I fandnot2s */ |
4002 | 4085 |
CHECK_FPU_FEATURE(dc, VIS1); |
4003 | 4086 |
tcg_gen_andc_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4087 |
gen_update_fprs_dirty(rd); |
|
4004 | 4088 |
break; |
4005 | 4089 |
case 0x066: /* VIS I fnot2 */ |
4006 | 4090 |
CHECK_FPU_FEATURE(dc, VIS1); |
4007 | 4091 |
tcg_gen_not_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs2)]); |
4008 | 4092 |
tcg_gen_not_i32(cpu_fpr[DFPREG(rd) + 1], |
4009 | 4093 |
cpu_fpr[DFPREG(rs2) + 1]); |
4094 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4010 | 4095 |
break; |
4011 | 4096 |
case 0x067: /* VIS I fnot2s */ |
4012 | 4097 |
CHECK_FPU_FEATURE(dc, VIS1); |
4013 | 4098 |
tcg_gen_not_i32(cpu_fpr[rd], cpu_fpr[rs2]); |
4099 |
gen_update_fprs_dirty(rd); |
|
4014 | 4100 |
break; |
4015 | 4101 |
case 0x068: /* VIS I fandnot1 */ |
4016 | 4102 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4019 | 4105 |
tcg_gen_andc_i32(cpu_fpr[DFPREG(rd) + 1], |
4020 | 4106 |
cpu_fpr[DFPREG(rs2) + 1], |
4021 | 4107 |
cpu_fpr[DFPREG(rs1) + 1]); |
4108 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4022 | 4109 |
break; |
4023 | 4110 |
case 0x069: /* VIS I fandnot1s */ |
4024 | 4111 |
CHECK_FPU_FEATURE(dc, VIS1); |
4025 | 4112 |
tcg_gen_andc_i32(cpu_fpr[rd], cpu_fpr[rs2], cpu_fpr[rs1]); |
4113 |
gen_update_fprs_dirty(rd); |
|
4026 | 4114 |
break; |
4027 | 4115 |
case 0x06a: /* VIS I fnot1 */ |
4028 | 4116 |
CHECK_FPU_FEATURE(dc, VIS1); |
4029 | 4117 |
tcg_gen_not_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)]); |
4030 | 4118 |
tcg_gen_not_i32(cpu_fpr[DFPREG(rd) + 1], |
4031 | 4119 |
cpu_fpr[DFPREG(rs1) + 1]); |
4120 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4032 | 4121 |
break; |
4033 | 4122 |
case 0x06b: /* VIS I fnot1s */ |
4034 | 4123 |
CHECK_FPU_FEATURE(dc, VIS1); |
4035 | 4124 |
tcg_gen_not_i32(cpu_fpr[rd], cpu_fpr[rs1]); |
4125 |
gen_update_fprs_dirty(rd); |
|
4036 | 4126 |
break; |
4037 | 4127 |
case 0x06c: /* VIS I fxor */ |
4038 | 4128 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4041 | 4131 |
tcg_gen_xor_i32(cpu_fpr[DFPREG(rd) + 1], |
4042 | 4132 |
cpu_fpr[DFPREG(rs1) + 1], |
4043 | 4133 |
cpu_fpr[DFPREG(rs2) + 1]); |
4134 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4044 | 4135 |
break; |
4045 | 4136 |
case 0x06d: /* VIS I fxors */ |
4046 | 4137 |
CHECK_FPU_FEATURE(dc, VIS1); |
4047 | 4138 |
tcg_gen_xor_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4139 |
gen_update_fprs_dirty(rd); |
|
4048 | 4140 |
break; |
4049 | 4141 |
case 0x06e: /* VIS I fnand */ |
4050 | 4142 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4053 | 4145 |
tcg_gen_nand_i32(cpu_fpr[DFPREG(rd) + 1], |
4054 | 4146 |
cpu_fpr[DFPREG(rs1) + 1], |
4055 | 4147 |
cpu_fpr[DFPREG(rs2) + 1]); |
4148 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4056 | 4149 |
break; |
4057 | 4150 |
case 0x06f: /* VIS I fnands */ |
4058 | 4151 |
CHECK_FPU_FEATURE(dc, VIS1); |
4059 | 4152 |
tcg_gen_nand_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4153 |
gen_update_fprs_dirty(rd); |
|
4060 | 4154 |
break; |
4061 | 4155 |
case 0x070: /* VIS I fand */ |
4062 | 4156 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4065 | 4159 |
tcg_gen_and_i32(cpu_fpr[DFPREG(rd) + 1], |
4066 | 4160 |
cpu_fpr[DFPREG(rs1) + 1], |
4067 | 4161 |
cpu_fpr[DFPREG(rs2) + 1]); |
4162 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4068 | 4163 |
break; |
4069 | 4164 |
case 0x071: /* VIS I fands */ |
4070 | 4165 |
CHECK_FPU_FEATURE(dc, VIS1); |
4071 | 4166 |
tcg_gen_and_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4167 |
gen_update_fprs_dirty(rd); |
|
4072 | 4168 |
break; |
4073 | 4169 |
case 0x072: /* VIS I fxnor */ |
4074 | 4170 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4078 | 4174 |
tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2) + 1], -1); |
4079 | 4175 |
tcg_gen_xor_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, |
4080 | 4176 |
cpu_fpr[DFPREG(rs1) + 1]); |
4177 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4081 | 4178 |
break; |
4082 | 4179 |
case 0x073: /* VIS I fxnors */ |
4083 | 4180 |
CHECK_FPU_FEATURE(dc, VIS1); |
4084 | 4181 |
tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[rs2], -1); |
4085 | 4182 |
tcg_gen_xor_i32(cpu_fpr[rd], cpu_tmp32, cpu_fpr[rs1]); |
4183 |
gen_update_fprs_dirty(rd); |
|
4086 | 4184 |
break; |
4087 | 4185 |
case 0x074: /* VIS I fsrc1 */ |
4088 | 4186 |
CHECK_FPU_FEATURE(dc, VIS1); |
4089 | 4187 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)]); |
4090 | 4188 |
tcg_gen_mov_i32(cpu_fpr[DFPREG(rd) + 1], |
4091 | 4189 |
cpu_fpr[DFPREG(rs1) + 1]); |
4190 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4092 | 4191 |
break; |
4093 | 4192 |
case 0x075: /* VIS I fsrc1s */ |
4094 | 4193 |
CHECK_FPU_FEATURE(dc, VIS1); |
4095 | 4194 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs1]); |
4195 |
gen_update_fprs_dirty(rd); |
|
4096 | 4196 |
break; |
4097 | 4197 |
case 0x076: /* VIS I fornot2 */ |
4098 | 4198 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4101 | 4201 |
tcg_gen_orc_i32(cpu_fpr[DFPREG(rd) + 1], |
4102 | 4202 |
cpu_fpr[DFPREG(rs1) + 1], |
4103 | 4203 |
cpu_fpr[DFPREG(rs2) + 1]); |
4204 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4104 | 4205 |
break; |
4105 | 4206 |
case 0x077: /* VIS I fornot2s */ |
4106 | 4207 |
CHECK_FPU_FEATURE(dc, VIS1); |
4107 | 4208 |
tcg_gen_orc_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4209 |
gen_update_fprs_dirty(rd); |
|
4108 | 4210 |
break; |
4109 | 4211 |
case 0x078: /* VIS I fsrc2 */ |
4110 | 4212 |
CHECK_FPU_FEATURE(dc, VIS1); |
4111 | 4213 |
gen_op_load_fpr_DT0(DFPREG(rs2)); |
4112 | 4214 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
4215 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4113 | 4216 |
break; |
4114 | 4217 |
case 0x079: /* VIS I fsrc2s */ |
4115 | 4218 |
CHECK_FPU_FEATURE(dc, VIS1); |
4116 | 4219 |
tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs2]); |
4220 |
gen_update_fprs_dirty(rd); |
|
4117 | 4221 |
break; |
4118 | 4222 |
case 0x07a: /* VIS I fornot1 */ |
4119 | 4223 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4122 | 4226 |
tcg_gen_orc_i32(cpu_fpr[DFPREG(rd) + 1], |
4123 | 4227 |
cpu_fpr[DFPREG(rs2) + 1], |
4124 | 4228 |
cpu_fpr[DFPREG(rs1) + 1]); |
4229 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4125 | 4230 |
break; |
4126 | 4231 |
case 0x07b: /* VIS I fornot1s */ |
4127 | 4232 |
CHECK_FPU_FEATURE(dc, VIS1); |
4128 | 4233 |
tcg_gen_orc_i32(cpu_fpr[rd], cpu_fpr[rs2], cpu_fpr[rs1]); |
4234 |
gen_update_fprs_dirty(rd); |
|
4129 | 4235 |
break; |
4130 | 4236 |
case 0x07c: /* VIS I for */ |
4131 | 4237 |
CHECK_FPU_FEATURE(dc, VIS1); |
... | ... | |
4134 | 4240 |
tcg_gen_or_i32(cpu_fpr[DFPREG(rd) + 1], |
4135 | 4241 |
cpu_fpr[DFPREG(rs1) + 1], |
4136 | 4242 |
cpu_fpr[DFPREG(rs2) + 1]); |
4243 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4137 | 4244 |
break; |
4138 | 4245 |
case 0x07d: /* VIS I fors */ |
4139 | 4246 |
CHECK_FPU_FEATURE(dc, VIS1); |
4140 | 4247 |
tcg_gen_or_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); |
4248 |
gen_update_fprs_dirty(rd); |
|
4141 | 4249 |
break; |
4142 | 4250 |
case 0x07e: /* VIS I fone */ |
4143 | 4251 |
CHECK_FPU_FEATURE(dc, VIS1); |
4144 | 4252 |
tcg_gen_movi_i32(cpu_fpr[DFPREG(rd)], -1); |
4145 | 4253 |
tcg_gen_movi_i32(cpu_fpr[DFPREG(rd) + 1], -1); |
4254 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4146 | 4255 |
break; |
4147 | 4256 |
case 0x07f: /* VIS I fones */ |
4148 | 4257 |
CHECK_FPU_FEATURE(dc, VIS1); |
4149 | 4258 |
tcg_gen_movi_i32(cpu_fpr[rd], -1); |
4259 |
gen_update_fprs_dirty(rd); |
|
4150 | 4260 |
break; |
4151 | 4261 |
case 0x080: /* VIS I shutdown */ |
4152 | 4262 |
case 0x081: /* VIS II siam */ |
... | ... | |
4492 | 4602 |
} |
4493 | 4603 |
save_state(dc, cpu_cond); |
4494 | 4604 |
gen_ldf_asi(cpu_addr, insn, 4, rd); |
4605 |
gen_update_fprs_dirty(rd); |
|
4495 | 4606 |
goto skip_move; |
4496 | 4607 |
case 0x33: /* V9 lddfa */ |
4497 | 4608 |
if (gen_trap_ifnofpu(dc, cpu_cond)) { |
... | ... | |
4499 | 4610 |
} |
4500 | 4611 |
save_state(dc, cpu_cond); |
4501 | 4612 |
gen_ldf_asi(cpu_addr, insn, 8, DFPREG(rd)); |
4613 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4502 | 4614 |
goto skip_move; |
4503 | 4615 |
case 0x3d: /* V9 prefetcha, no effect */ |
4504 | 4616 |
goto skip_move; |
... | ... | |
4509 | 4621 |
} |
4510 | 4622 |
save_state(dc, cpu_cond); |
4511 | 4623 |
gen_ldf_asi(cpu_addr, insn, 16, QFPREG(rd)); |
4624 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
4512 | 4625 |
goto skip_move; |
4513 | 4626 |
#endif |
4514 | 4627 |
default: |
... | ... | |
4527 | 4640 |
gen_address_mask(dc, cpu_addr); |
4528 | 4641 |
tcg_gen_qemu_ld32u(cpu_tmp0, cpu_addr, dc->mem_idx); |
4529 | 4642 |
tcg_gen_trunc_tl_i32(cpu_fpr[rd], cpu_tmp0); |
4643 |
gen_update_fprs_dirty(rd); |
|
4530 | 4644 |
break; |
4531 | 4645 |
case 0x21: /* ldfsr, V9 ldxfsr */ |
4532 | 4646 |
#ifdef TARGET_SPARC64 |
... | ... | |
4556 | 4670 |
gen_helper_ldqf(cpu_addr, r_const); |
4557 | 4671 |
tcg_temp_free_i32(r_const); |
4558 | 4672 |
gen_op_store_QT0_fpr(QFPREG(rd)); |
4673 |
gen_update_fprs_dirty(QFPREG(rd)); |
|
4559 | 4674 |
} |
4560 | 4675 |
break; |
4561 | 4676 |
case 0x23: /* lddf, load double fpreg */ |
... | ... | |
4567 | 4682 |
gen_helper_lddf(cpu_addr, r_const); |
4568 | 4683 |
tcg_temp_free_i32(r_const); |
4569 | 4684 |
gen_op_store_DT0_fpr(DFPREG(rd)); |
4685 |
gen_update_fprs_dirty(DFPREG(rd)); |
|
4570 | 4686 |
} |
4571 | 4687 |
break; |
4572 | 4688 |
default: |
Also available in: Unified diff