Revision 0487d6a8 target-ppc/op.c
b/target-ppc/op.c | ||
---|---|---|
1326 | 1326 |
/* count leading zero */ |
1327 | 1327 |
void OPPROTO op_cntlzw (void) |
1328 | 1328 |
{ |
1329 |
int cnt; |
|
1330 |
|
|
1331 |
cnt = 0; |
|
1332 |
if (!(T0 & 0xFFFF0000UL)) { |
|
1333 |
cnt += 16; |
|
1334 |
T0 <<= 16; |
|
1335 |
} |
|
1336 |
if (!(T0 & 0xFF000000UL)) { |
|
1337 |
cnt += 8; |
|
1338 |
T0 <<= 8; |
|
1339 |
} |
|
1340 |
if (!(T0 & 0xF0000000UL)) { |
|
1341 |
cnt += 4; |
|
1342 |
T0 <<= 4; |
|
1343 |
} |
|
1344 |
if (!(T0 & 0xC0000000UL)) { |
|
1345 |
cnt += 2; |
|
1346 |
T0 <<= 2; |
|
1347 |
} |
|
1348 |
if (!(T0 & 0x80000000UL)) { |
|
1349 |
cnt++; |
|
1350 |
T0 <<= 1; |
|
1351 |
} |
|
1352 |
if (!(T0 & 0x80000000UL)) { |
|
1353 |
cnt++; |
|
1354 |
} |
|
1355 |
T0 = cnt; |
|
1329 |
T0 = _do_cntlzw(T0); |
|
1356 | 1330 |
RETURN(); |
1357 | 1331 |
} |
1358 | 1332 |
|
1359 | 1333 |
#if defined(TARGET_PPC64) |
1360 | 1334 |
void OPPROTO op_cntlzd (void) |
1361 | 1335 |
{ |
1362 |
#if HOST_LONG_BITS == 64 |
|
1363 |
int cnt; |
|
1364 |
|
|
1365 |
cnt = 0; |
|
1366 |
if (!(T0 & 0xFFFFFFFF00000000ULL)) { |
|
1367 |
cnt += 32; |
|
1368 |
T0 <<= 32; |
|
1369 |
} |
|
1370 |
if (!(T0 & 0xFFFF000000000000ULL)) { |
|
1371 |
cnt += 16; |
|
1372 |
T0 <<= 16; |
|
1373 |
} |
|
1374 |
if (!(T0 & 0xFF00000000000000ULL)) { |
|
1375 |
cnt += 8; |
|
1376 |
T0 <<= 8; |
|
1377 |
} |
|
1378 |
if (!(T0 & 0xF000000000000000ULL)) { |
|
1379 |
cnt += 4; |
|
1380 |
T0 <<= 4; |
|
1381 |
} |
|
1382 |
if (!(T0 & 0xC000000000000000ULL)) { |
|
1383 |
cnt += 2; |
|
1384 |
T0 <<= 2; |
|
1385 |
} |
|
1386 |
if (!(T0 & 0x8000000000000000ULL)) { |
|
1387 |
cnt++; |
|
1388 |
T0 <<= 1; |
|
1389 |
} |
|
1390 |
if (!(T0 & 0x8000000000000000ULL)) { |
|
1391 |
cnt++; |
|
1392 |
} |
|
1393 |
T0 = cnt; |
|
1394 |
#else |
|
1395 |
uint32_t tmp; |
|
1396 |
|
|
1397 |
/* Make it easier on 32 bits host machines */ |
|
1398 |
if (!(T0 >> 32)) { |
|
1399 |
tmp = T0; |
|
1400 |
T0 = 32; |
|
1401 |
} else { |
|
1402 |
tmp = T0 >> 32; |
|
1403 |
T0 = 0; |
|
1404 |
} |
|
1405 |
if (!(tmp & 0xFFFF0000UL)) { |
|
1406 |
T0 += 16; |
|
1407 |
tmp <<= 16; |
|
1408 |
} |
|
1409 |
if (!(tmp & 0xFF000000UL)) { |
|
1410 |
T0 += 8; |
|
1411 |
tmp <<= 8; |
|
1412 |
} |
|
1413 |
if (!(tmp & 0xF0000000UL)) { |
|
1414 |
T0 += 4; |
|
1415 |
tmp <<= 4; |
|
1416 |
} |
|
1417 |
if (!(tmp & 0xC0000000UL)) { |
|
1418 |
T0 += 2; |
|
1419 |
tmp <<= 2; |
|
1420 |
} |
|
1421 |
if (!(tmp & 0x80000000UL)) { |
|
1422 |
T0++; |
|
1423 |
tmp <<= 1; |
|
1424 |
} |
|
1425 |
if (!(tmp & 0x80000000UL)) { |
|
1426 |
T0++; |
|
1427 |
} |
|
1428 |
#endif |
|
1336 |
T0 = _do_cntlzd(T0); |
|
1429 | 1337 |
RETURN(); |
1430 | 1338 |
} |
1431 | 1339 |
#endif |
... | ... | |
2462 | 2370 |
store_booke_tsr(env, T0); |
2463 | 2371 |
RETURN(); |
2464 | 2372 |
} |
2373 |
|
|
2465 | 2374 |
#endif /* !defined(CONFIG_USER_ONLY) */ |
2375 |
|
|
2376 |
#if defined(TARGET_PPCSPE) |
|
2377 |
/* SPE extension */ |
|
2378 |
void OPPROTO op_splatw_T1_64 (void) |
|
2379 |
{ |
|
2380 |
T1_64 = (T1_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL); |
|
2381 |
} |
|
2382 |
|
|
2383 |
void OPPROTO op_splatwi_T0_64 (void) |
|
2384 |
{ |
|
2385 |
uint64_t tmp = PARAM1; |
|
2386 |
|
|
2387 |
T0_64 = (tmp << 32) | tmp; |
|
2388 |
} |
|
2389 |
|
|
2390 |
void OPPROTO op_splatwi_T1_64 (void) |
|
2391 |
{ |
|
2392 |
uint64_t tmp = PARAM1; |
|
2393 |
|
|
2394 |
T1_64 = (tmp << 32) | tmp; |
|
2395 |
} |
|
2396 |
|
|
2397 |
void OPPROTO op_extsh_T1_64 (void) |
|
2398 |
{ |
|
2399 |
T1_64 = (int32_t)((int16_t)T1_64); |
|
2400 |
RETURN(); |
|
2401 |
} |
|
2402 |
|
|
2403 |
void OPPROTO op_sli16_T1_64 (void) |
|
2404 |
{ |
|
2405 |
T1_64 = T1_64 << 16; |
|
2406 |
RETURN(); |
|
2407 |
} |
|
2408 |
|
|
2409 |
void OPPROTO op_sli32_T1_64 (void) |
|
2410 |
{ |
|
2411 |
T1_64 = T1_64 << 32; |
|
2412 |
RETURN(); |
|
2413 |
} |
|
2414 |
|
|
2415 |
void OPPROTO op_srli32_T1_64 (void) |
|
2416 |
{ |
|
2417 |
T1_64 = T1_64 >> 32; |
|
2418 |
RETURN(); |
|
2419 |
} |
|
2420 |
|
|
2421 |
void OPPROTO op_evsel (void) |
|
2422 |
{ |
|
2423 |
do_evsel(); |
|
2424 |
RETURN(); |
|
2425 |
} |
|
2426 |
|
|
2427 |
void OPPROTO op_evaddw (void) |
|
2428 |
{ |
|
2429 |
do_evaddw(); |
|
2430 |
RETURN(); |
|
2431 |
} |
|
2432 |
|
|
2433 |
void OPPROTO op_evsubfw (void) |
|
2434 |
{ |
|
2435 |
do_evsubfw(); |
|
2436 |
RETURN(); |
|
2437 |
} |
|
2438 |
|
|
2439 |
void OPPROTO op_evneg (void) |
|
2440 |
{ |
|
2441 |
do_evneg(); |
|
2442 |
RETURN(); |
|
2443 |
} |
|
2444 |
|
|
2445 |
void OPPROTO op_evabs (void) |
|
2446 |
{ |
|
2447 |
do_evabs(); |
|
2448 |
RETURN(); |
|
2449 |
} |
|
2450 |
|
|
2451 |
void OPPROTO op_evextsh (void) |
|
2452 |
{ |
|
2453 |
T0_64 = ((uint64_t)((int32_t)(int16_t)(T0_64 >> 32)) << 32) | |
|
2454 |
(uint64_t)((int32_t)(int16_t)T0_64); |
|
2455 |
RETURN(); |
|
2456 |
} |
|
2457 |
|
|
2458 |
void OPPROTO op_evextsb (void) |
|
2459 |
{ |
|
2460 |
T0_64 = ((uint64_t)((int32_t)(int8_t)(T0_64 >> 32)) << 32) | |
|
2461 |
(uint64_t)((int32_t)(int8_t)T0_64); |
|
2462 |
RETURN(); |
|
2463 |
} |
|
2464 |
|
|
2465 |
void OPPROTO op_evcntlzw (void) |
|
2466 |
{ |
|
2467 |
do_evcntlzw(); |
|
2468 |
RETURN(); |
|
2469 |
} |
|
2470 |
|
|
2471 |
void OPPROTO op_evrndw (void) |
|
2472 |
{ |
|
2473 |
do_evrndw(); |
|
2474 |
RETURN(); |
|
2475 |
} |
|
2476 |
|
|
2477 |
void OPPROTO op_brinc (void) |
|
2478 |
{ |
|
2479 |
do_brinc(); |
|
2480 |
RETURN(); |
|
2481 |
} |
|
2482 |
|
|
2483 |
void OPPROTO op_evcntlsw (void) |
|
2484 |
{ |
|
2485 |
do_evcntlsw(); |
|
2486 |
RETURN(); |
|
2487 |
} |
|
2488 |
|
|
2489 |
void OPPROTO op_evand (void) |
|
2490 |
{ |
|
2491 |
T0_64 &= T1_64; |
|
2492 |
RETURN(); |
|
2493 |
} |
|
2494 |
|
|
2495 |
void OPPROTO op_evandc (void) |
|
2496 |
{ |
|
2497 |
T0_64 &= ~T1_64; |
|
2498 |
RETURN(); |
|
2499 |
} |
|
2500 |
|
|
2501 |
void OPPROTO op_evor (void) |
|
2502 |
{ |
|
2503 |
T0_64 |= T1_64; |
|
2504 |
RETURN(); |
|
2505 |
} |
|
2506 |
|
|
2507 |
void OPPROTO op_evxor (void) |
|
2508 |
{ |
|
2509 |
T0_64 ^= T1_64; |
|
2510 |
RETURN(); |
|
2511 |
} |
|
2512 |
|
|
2513 |
void OPPROTO op_eveqv (void) |
|
2514 |
{ |
|
2515 |
T0_64 = ~(T0_64 ^ T1_64); |
|
2516 |
RETURN(); |
|
2517 |
} |
|
2518 |
|
|
2519 |
void OPPROTO op_evnor (void) |
|
2520 |
{ |
|
2521 |
T0_64 = ~(T0_64 | T1_64); |
|
2522 |
RETURN(); |
|
2523 |
} |
|
2524 |
|
|
2525 |
void OPPROTO op_evorc (void) |
|
2526 |
{ |
|
2527 |
T0_64 |= ~T1_64; |
|
2528 |
RETURN(); |
|
2529 |
} |
|
2530 |
|
|
2531 |
void OPPROTO op_evnand (void) |
|
2532 |
{ |
|
2533 |
T0_64 = ~(T0_64 & T1_64); |
|
2534 |
RETURN(); |
|
2535 |
} |
|
2536 |
|
|
2537 |
void OPPROTO op_evsrws (void) |
|
2538 |
{ |
|
2539 |
do_evsrws(); |
|
2540 |
RETURN(); |
|
2541 |
} |
|
2542 |
|
|
2543 |
void OPPROTO op_evsrwu (void) |
|
2544 |
{ |
|
2545 |
do_evsrwu(); |
|
2546 |
RETURN(); |
|
2547 |
} |
|
2548 |
|
|
2549 |
void OPPROTO op_evslw (void) |
|
2550 |
{ |
|
2551 |
do_evslw(); |
|
2552 |
RETURN(); |
|
2553 |
} |
|
2554 |
|
|
2555 |
void OPPROTO op_evrlw (void) |
|
2556 |
{ |
|
2557 |
do_evrlw(); |
|
2558 |
RETURN(); |
|
2559 |
} |
|
2560 |
|
|
2561 |
void OPPROTO op_evmergelo (void) |
|
2562 |
{ |
|
2563 |
T0_64 = (T0_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL); |
|
2564 |
RETURN(); |
|
2565 |
} |
|
2566 |
|
|
2567 |
void OPPROTO op_evmergehi (void) |
|
2568 |
{ |
|
2569 |
T0_64 = (T0_64 & 0xFFFFFFFF00000000ULL) | (T1_64 >> 32); |
|
2570 |
RETURN(); |
|
2571 |
} |
|
2572 |
|
|
2573 |
void OPPROTO op_evmergelohi (void) |
|
2574 |
{ |
|
2575 |
T0_64 = (T0_64 << 32) | (T1_64 >> 32); |
|
2576 |
RETURN(); |
|
2577 |
} |
|
2578 |
|
|
2579 |
void OPPROTO op_evmergehilo (void) |
|
2580 |
{ |
|
2581 |
T0_64 = (T0_64 & 0xFFFFFFFF00000000ULL) | (T1_64 & 0x00000000FFFFFFFFULL); |
|
2582 |
RETURN(); |
|
2583 |
} |
|
2584 |
|
|
2585 |
void OPPROTO op_evcmpgts (void) |
|
2586 |
{ |
|
2587 |
do_evcmpgts(); |
|
2588 |
RETURN(); |
|
2589 |
} |
|
2590 |
|
|
2591 |
void OPPROTO op_evcmpgtu (void) |
|
2592 |
{ |
|
2593 |
do_evcmpgtu(); |
|
2594 |
RETURN(); |
|
2595 |
} |
|
2596 |
|
|
2597 |
void OPPROTO op_evcmplts (void) |
|
2598 |
{ |
|
2599 |
do_evcmplts(); |
|
2600 |
RETURN(); |
|
2601 |
} |
|
2602 |
|
|
2603 |
void OPPROTO op_evcmpltu (void) |
|
2604 |
{ |
|
2605 |
do_evcmpltu(); |
|
2606 |
RETURN(); |
|
2607 |
} |
|
2608 |
|
|
2609 |
void OPPROTO op_evcmpeq (void) |
|
2610 |
{ |
|
2611 |
do_evcmpeq(); |
|
2612 |
RETURN(); |
|
2613 |
} |
|
2614 |
|
|
2615 |
void OPPROTO op_evfssub (void) |
|
2616 |
{ |
|
2617 |
do_evfssub(); |
|
2618 |
RETURN(); |
|
2619 |
} |
|
2620 |
|
|
2621 |
void OPPROTO op_evfsadd (void) |
|
2622 |
{ |
|
2623 |
do_evfsadd(); |
|
2624 |
RETURN(); |
|
2625 |
} |
|
2626 |
|
|
2627 |
void OPPROTO op_evfsnabs (void) |
|
2628 |
{ |
|
2629 |
do_evfsnabs(); |
|
2630 |
RETURN(); |
|
2631 |
} |
|
2632 |
|
|
2633 |
void OPPROTO op_evfsabs (void) |
|
2634 |
{ |
|
2635 |
do_evfsabs(); |
|
2636 |
RETURN(); |
|
2637 |
} |
|
2638 |
|
|
2639 |
void OPPROTO op_evfsneg (void) |
|
2640 |
{ |
|
2641 |
do_evfsneg(); |
|
2642 |
RETURN(); |
|
2643 |
} |
|
2644 |
|
|
2645 |
void OPPROTO op_evfsdiv (void) |
|
2646 |
{ |
|
2647 |
do_evfsdiv(); |
|
2648 |
RETURN(); |
|
2649 |
} |
|
2650 |
|
|
2651 |
void OPPROTO op_evfsmul (void) |
|
2652 |
{ |
|
2653 |
do_evfsmul(); |
|
2654 |
RETURN(); |
|
2655 |
} |
|
2656 |
|
|
2657 |
void OPPROTO op_evfscmplt (void) |
|
2658 |
{ |
|
2659 |
do_evfscmplt(); |
|
2660 |
RETURN(); |
|
2661 |
} |
|
2662 |
|
|
2663 |
void OPPROTO op_evfscmpgt (void) |
|
2664 |
{ |
|
2665 |
do_evfscmpgt(); |
|
2666 |
RETURN(); |
|
2667 |
} |
|
2668 |
|
|
2669 |
void OPPROTO op_evfscmpeq (void) |
|
2670 |
{ |
|
2671 |
do_evfscmpeq(); |
|
2672 |
RETURN(); |
|
2673 |
} |
|
2674 |
|
|
2675 |
void OPPROTO op_evfscfsi (void) |
|
2676 |
{ |
|
2677 |
do_evfscfsi(); |
|
2678 |
RETURN(); |
|
2679 |
} |
|
2680 |
|
|
2681 |
void OPPROTO op_evfscfui (void) |
|
2682 |
{ |
|
2683 |
do_evfscfui(); |
|
2684 |
RETURN(); |
|
2685 |
} |
|
2686 |
|
|
2687 |
void OPPROTO op_evfscfsf (void) |
|
2688 |
{ |
|
2689 |
do_evfscfsf(); |
|
2690 |
RETURN(); |
|
2691 |
} |
|
2692 |
|
|
2693 |
void OPPROTO op_evfscfuf (void) |
|
2694 |
{ |
|
2695 |
do_evfscfuf(); |
|
2696 |
RETURN(); |
|
2697 |
} |
|
2698 |
|
|
2699 |
void OPPROTO op_evfsctsi (void) |
|
2700 |
{ |
|
2701 |
do_evfsctsi(); |
|
2702 |
RETURN(); |
|
2703 |
} |
|
2704 |
|
|
2705 |
void OPPROTO op_evfsctui (void) |
|
2706 |
{ |
|
2707 |
do_evfsctui(); |
|
2708 |
RETURN(); |
|
2709 |
} |
|
2710 |
|
|
2711 |
void OPPROTO op_evfsctsf (void) |
|
2712 |
{ |
|
2713 |
do_evfsctsf(); |
|
2714 |
RETURN(); |
|
2715 |
} |
|
2716 |
|
|
2717 |
void OPPROTO op_evfsctuf (void) |
|
2718 |
{ |
|
2719 |
do_evfsctuf(); |
|
2720 |
RETURN(); |
|
2721 |
} |
|
2722 |
|
|
2723 |
void OPPROTO op_evfsctuiz (void) |
|
2724 |
{ |
|
2725 |
do_evfsctuiz(); |
|
2726 |
RETURN(); |
|
2727 |
} |
|
2728 |
|
|
2729 |
void OPPROTO op_evfsctsiz (void) |
|
2730 |
{ |
|
2731 |
do_evfsctsiz(); |
|
2732 |
RETURN(); |
|
2733 |
} |
|
2734 |
|
|
2735 |
void OPPROTO op_evfststlt (void) |
|
2736 |
{ |
|
2737 |
do_evfststlt(); |
|
2738 |
RETURN(); |
|
2739 |
} |
|
2740 |
|
|
2741 |
void OPPROTO op_evfststgt (void) |
|
2742 |
{ |
|
2743 |
do_evfststgt(); |
|
2744 |
RETURN(); |
|
2745 |
} |
|
2746 |
|
|
2747 |
void OPPROTO op_evfststeq (void) |
|
2748 |
{ |
|
2749 |
do_evfststeq(); |
|
2750 |
RETURN(); |
|
2751 |
} |
|
2752 |
|
|
2753 |
void OPPROTO op_efssub (void) |
|
2754 |
{ |
|
2755 |
T0_64 = _do_efssub(T0_64, T1_64); |
|
2756 |
RETURN(); |
|
2757 |
} |
|
2758 |
|
|
2759 |
void OPPROTO op_efsadd (void) |
|
2760 |
{ |
|
2761 |
T0_64 = _do_efsadd(T0_64, T1_64); |
|
2762 |
RETURN(); |
|
2763 |
} |
|
2764 |
|
|
2765 |
void OPPROTO op_efsnabs (void) |
|
2766 |
{ |
|
2767 |
T0_64 = _do_efsnabs(T0_64); |
|
2768 |
RETURN(); |
|
2769 |
} |
|
2770 |
|
|
2771 |
void OPPROTO op_efsabs (void) |
|
2772 |
{ |
|
2773 |
T0_64 = _do_efsabs(T0_64); |
|
2774 |
RETURN(); |
|
2775 |
} |
|
2776 |
|
|
2777 |
void OPPROTO op_efsneg (void) |
|
2778 |
{ |
|
2779 |
T0_64 = _do_efsneg(T0_64); |
|
2780 |
RETURN(); |
|
2781 |
} |
|
2782 |
|
|
2783 |
void OPPROTO op_efsdiv (void) |
|
2784 |
{ |
|
2785 |
T0_64 = _do_efsdiv(T0_64, T1_64); |
|
2786 |
RETURN(); |
|
2787 |
} |
|
2788 |
|
|
2789 |
void OPPROTO op_efsmul (void) |
|
2790 |
{ |
|
2791 |
T0_64 = _do_efsmul(T0_64, T1_64); |
|
2792 |
RETURN(); |
|
2793 |
} |
|
2794 |
|
|
2795 |
void OPPROTO op_efscmplt (void) |
|
2796 |
{ |
|
2797 |
do_efscmplt(); |
|
2798 |
RETURN(); |
|
2799 |
} |
|
2800 |
|
|
2801 |
void OPPROTO op_efscmpgt (void) |
|
2802 |
{ |
|
2803 |
do_efscmpgt(); |
|
2804 |
RETURN(); |
|
2805 |
} |
|
2806 |
|
|
2807 |
void OPPROTO op_efscfd (void) |
|
2808 |
{ |
|
2809 |
do_efscfd(); |
|
2810 |
RETURN(); |
|
2811 |
} |
|
2812 |
|
|
2813 |
void OPPROTO op_efscmpeq (void) |
|
2814 |
{ |
|
2815 |
do_efscmpeq(); |
|
2816 |
RETURN(); |
|
2817 |
} |
|
2818 |
|
|
2819 |
void OPPROTO op_efscfsi (void) |
|
2820 |
{ |
|
2821 |
do_efscfsi(); |
|
2822 |
RETURN(); |
|
2823 |
} |
|
2824 |
|
|
2825 |
void OPPROTO op_efscfui (void) |
|
2826 |
{ |
|
2827 |
do_efscfui(); |
|
2828 |
RETURN(); |
|
2829 |
} |
|
2830 |
|
|
2831 |
void OPPROTO op_efscfsf (void) |
|
2832 |
{ |
|
2833 |
do_efscfsf(); |
|
2834 |
RETURN(); |
|
2835 |
} |
|
2836 |
|
|
2837 |
void OPPROTO op_efscfuf (void) |
|
2838 |
{ |
|
2839 |
do_efscfuf(); |
|
2840 |
RETURN(); |
|
2841 |
} |
|
2842 |
|
|
2843 |
void OPPROTO op_efsctsi (void) |
|
2844 |
{ |
|
2845 |
do_efsctsi(); |
|
2846 |
RETURN(); |
|
2847 |
} |
|
2848 |
|
|
2849 |
void OPPROTO op_efsctui (void) |
|
2850 |
{ |
|
2851 |
do_efsctui(); |
|
2852 |
RETURN(); |
|
2853 |
} |
|
2854 |
|
|
2855 |
void OPPROTO op_efsctsf (void) |
|
2856 |
{ |
|
2857 |
do_efsctsf(); |
|
2858 |
RETURN(); |
|
2859 |
} |
|
2860 |
|
|
2861 |
void OPPROTO op_efsctuf (void) |
|
2862 |
{ |
|
2863 |
do_efsctuf(); |
|
2864 |
RETURN(); |
|
2865 |
} |
|
2866 |
|
|
2867 |
void OPPROTO op_efsctsiz (void) |
|
2868 |
{ |
|
2869 |
do_efsctsiz(); |
|
2870 |
RETURN(); |
|
2871 |
} |
|
2872 |
|
|
2873 |
void OPPROTO op_efsctuiz (void) |
|
2874 |
{ |
|
2875 |
do_efsctuiz(); |
|
2876 |
RETURN(); |
|
2877 |
} |
|
2878 |
|
|
2879 |
void OPPROTO op_efststlt (void) |
|
2880 |
{ |
|
2881 |
T0 = _do_efststlt(T0_64, T1_64); |
|
2882 |
RETURN(); |
|
2883 |
} |
|
2884 |
|
|
2885 |
void OPPROTO op_efststgt (void) |
|
2886 |
{ |
|
2887 |
T0 = _do_efststgt(T0_64, T1_64); |
|
2888 |
RETURN(); |
|
2889 |
} |
|
2890 |
|
|
2891 |
void OPPROTO op_efststeq (void) |
|
2892 |
{ |
|
2893 |
T0 = _do_efststeq(T0_64, T1_64); |
|
2894 |
RETURN(); |
|
2895 |
} |
|
2896 |
|
|
2897 |
void OPPROTO op_efdsub (void) |
|
2898 |
{ |
|
2899 |
union { |
|
2900 |
uint64_t u; |
|
2901 |
float64 f; |
|
2902 |
} u1, u2; |
|
2903 |
u1.u = T0_64; |
|
2904 |
u2.u = T1_64; |
|
2905 |
u1.f = float64_sub(u1.f, u2.f, &env->spe_status); |
|
2906 |
T0_64 = u1.u; |
|
2907 |
RETURN(); |
|
2908 |
} |
|
2909 |
|
|
2910 |
void OPPROTO op_efdadd (void) |
|
2911 |
{ |
|
2912 |
union { |
|
2913 |
uint64_t u; |
|
2914 |
float64 f; |
|
2915 |
} u1, u2; |
|
2916 |
u1.u = T0_64; |
|
2917 |
u2.u = T1_64; |
|
2918 |
u1.f = float64_add(u1.f, u2.f, &env->spe_status); |
|
2919 |
T0_64 = u1.u; |
|
2920 |
RETURN(); |
|
2921 |
} |
|
2922 |
|
|
2923 |
void OPPROTO op_efdcfsid (void) |
|
2924 |
{ |
|
2925 |
do_efdcfsi(); |
|
2926 |
RETURN(); |
|
2927 |
} |
|
2928 |
|
|
2929 |
void OPPROTO op_efdcfuid (void) |
|
2930 |
{ |
|
2931 |
do_efdcfui(); |
|
2932 |
RETURN(); |
|
2933 |
} |
|
2934 |
|
|
2935 |
void OPPROTO op_efdnabs (void) |
|
2936 |
{ |
|
2937 |
T0_64 |= 0x8000000000000000ULL; |
|
2938 |
RETURN(); |
|
2939 |
} |
|
2940 |
|
|
2941 |
void OPPROTO op_efdabs (void) |
|
2942 |
{ |
|
2943 |
T0_64 &= ~0x8000000000000000ULL; |
|
2944 |
RETURN(); |
|
2945 |
} |
|
2946 |
|
|
2947 |
void OPPROTO op_efdneg (void) |
|
2948 |
{ |
|
2949 |
T0_64 ^= 0x8000000000000000ULL; |
|
2950 |
RETURN(); |
|
2951 |
} |
|
2952 |
|
|
2953 |
void OPPROTO op_efddiv (void) |
|
2954 |
{ |
|
2955 |
union { |
|
2956 |
uint64_t u; |
|
2957 |
float64 f; |
|
2958 |
} u1, u2; |
|
2959 |
u1.u = T0_64; |
|
2960 |
u2.u = T1_64; |
|
2961 |
u1.f = float64_div(u1.f, u2.f, &env->spe_status); |
|
2962 |
T0_64 = u1.u; |
|
2963 |
RETURN(); |
|
2964 |
} |
|
2965 |
|
|
2966 |
void OPPROTO op_efdmul (void) |
|
2967 |
{ |
|
2968 |
union { |
|
2969 |
uint64_t u; |
|
2970 |
float64 f; |
|
2971 |
} u1, u2; |
|
2972 |
u1.u = T0_64; |
|
2973 |
u2.u = T1_64; |
|
2974 |
u1.f = float64_mul(u1.f, u2.f, &env->spe_status); |
|
2975 |
T0_64 = u1.u; |
|
2976 |
RETURN(); |
|
2977 |
} |
|
2978 |
|
|
2979 |
void OPPROTO op_efdctsidz (void) |
|
2980 |
{ |
|
2981 |
do_efdctsiz(); |
|
2982 |
RETURN(); |
|
2983 |
} |
|
2984 |
|
|
2985 |
void OPPROTO op_efdctuidz (void) |
|
2986 |
{ |
|
2987 |
do_efdctuiz(); |
|
2988 |
RETURN(); |
|
2989 |
} |
|
2990 |
|
|
2991 |
void OPPROTO op_efdcmplt (void) |
|
2992 |
{ |
|
2993 |
do_efdcmplt(); |
|
2994 |
RETURN(); |
|
2995 |
} |
|
2996 |
|
|
2997 |
void OPPROTO op_efdcmpgt (void) |
|
2998 |
{ |
|
2999 |
do_efdcmpgt(); |
|
3000 |
RETURN(); |
|
3001 |
} |
|
3002 |
|
|
3003 |
void OPPROTO op_efdcfs (void) |
|
3004 |
{ |
|
3005 |
do_efdcfs(); |
|
3006 |
RETURN(); |
|
3007 |
} |
|
3008 |
|
|
3009 |
void OPPROTO op_efdcmpeq (void) |
|
3010 |
{ |
|
3011 |
do_efdcmpeq(); |
|
3012 |
RETURN(); |
|
3013 |
} |
|
3014 |
|
|
3015 |
void OPPROTO op_efdcfsi (void) |
|
3016 |
{ |
|
3017 |
do_efdcfsi(); |
|
3018 |
RETURN(); |
|
3019 |
} |
|
3020 |
|
|
3021 |
void OPPROTO op_efdcfui (void) |
|
3022 |
{ |
|
3023 |
do_efdcfui(); |
|
3024 |
RETURN(); |
|
3025 |
} |
|
3026 |
|
|
3027 |
void OPPROTO op_efdcfsf (void) |
|
3028 |
{ |
|
3029 |
do_efdcfsf(); |
|
3030 |
RETURN(); |
|
3031 |
} |
|
3032 |
|
|
3033 |
void OPPROTO op_efdcfuf (void) |
|
3034 |
{ |
|
3035 |
do_efdcfuf(); |
|
3036 |
RETURN(); |
|
3037 |
} |
|
3038 |
|
|
3039 |
void OPPROTO op_efdctsi (void) |
|
3040 |
{ |
|
3041 |
do_efdctsi(); |
|
3042 |
RETURN(); |
|
3043 |
} |
|
3044 |
|
|
3045 |
void OPPROTO op_efdctui (void) |
|
3046 |
{ |
|
3047 |
do_efdctui(); |
|
3048 |
RETURN(); |
|
3049 |
} |
|
3050 |
|
|
3051 |
void OPPROTO op_efdctsf (void) |
|
3052 |
{ |
|
3053 |
do_efdctsf(); |
|
3054 |
RETURN(); |
|
3055 |
} |
|
3056 |
|
|
3057 |
void OPPROTO op_efdctuf (void) |
|
3058 |
{ |
|
3059 |
do_efdctuf(); |
|
3060 |
RETURN(); |
|
3061 |
} |
|
3062 |
|
|
3063 |
void OPPROTO op_efdctuiz (void) |
|
3064 |
{ |
|
3065 |
do_efdctuiz(); |
|
3066 |
RETURN(); |
|
3067 |
} |
|
3068 |
|
|
3069 |
void OPPROTO op_efdctsiz (void) |
|
3070 |
{ |
|
3071 |
do_efdctsiz(); |
|
3072 |
RETURN(); |
|
3073 |
} |
|
3074 |
|
|
3075 |
void OPPROTO op_efdtstlt (void) |
|
3076 |
{ |
|
3077 |
T0 = _do_efdtstlt(T0_64, T1_64); |
|
3078 |
RETURN(); |
|
3079 |
} |
|
3080 |
|
|
3081 |
void OPPROTO op_efdtstgt (void) |
|
3082 |
{ |
|
3083 |
T0 = _do_efdtstgt(T0_64, T1_64); |
|
3084 |
RETURN(); |
|
3085 |
} |
|
3086 |
|
|
3087 |
void OPPROTO op_efdtsteq (void) |
|
3088 |
{ |
|
3089 |
T0 = _do_efdtsteq(T0_64, T1_64); |
|
3090 |
RETURN(); |
|
3091 |
} |
|
3092 |
#endif /* defined(TARGET_PPCSPE) */ |
Also available in: Unified diff