Revision 2857068e
b/target-ppc/translate.c | ||
---|---|---|
1979 | 1979 |
#define op_ldst(name) (*gen_op_##name[ctx->mem_idx])() |
1980 | 1980 |
#if defined(CONFIG_USER_ONLY) |
1981 | 1981 |
#if defined(TARGET_PPC64) |
1982 |
/* User mode only - 64 bits */ |
|
1982 | 1983 |
#define OP_LD_TABLE(width) \ |
1983 | 1984 |
static GenOpFunc *gen_op_l##width[] = { \ |
1984 | 1985 |
&gen_op_l##width##_raw, \ |
... | ... | |
1997 | 1998 |
#define gen_op_stb_le_64_raw gen_op_stb_64_raw |
1998 | 1999 |
#define gen_op_lbz_le_64_raw gen_op_lbz_64_raw |
1999 | 2000 |
#else |
2001 |
/* User mode only - 32 bits */ |
|
2000 | 2002 |
#define OP_LD_TABLE(width) \ |
2001 | 2003 |
static GenOpFunc *gen_op_l##width[] = { \ |
2002 | 2004 |
&gen_op_l##width##_raw, \ |
... | ... | |
2013 | 2015 |
#define gen_op_lbz_le_raw gen_op_lbz_raw |
2014 | 2016 |
#else |
2015 | 2017 |
#if defined(TARGET_PPC64) |
2018 |
#if defined(TARGET_PPC64H) |
|
2019 |
/* Full system - 64 bits with hypervisor mode */ |
|
2016 | 2020 |
#define OP_LD_TABLE(width) \ |
2017 | 2021 |
static GenOpFunc *gen_op_l##width[] = { \ |
2018 | 2022 |
&gen_op_l##width##_user, \ |
2019 | 2023 |
&gen_op_l##width##_le_user, \ |
2020 |
&gen_op_l##width##_kernel, \ |
|
2021 |
&gen_op_l##width##_le_kernel, \ |
|
2022 | 2024 |
&gen_op_l##width##_64_user, \ |
2023 | 2025 |
&gen_op_l##width##_le_64_user, \ |
2026 |
&gen_op_l##width##_kernel, \ |
|
2027 |
&gen_op_l##width##_le_kernel, \ |
|
2024 | 2028 |
&gen_op_l##width##_64_kernel, \ |
2025 | 2029 |
&gen_op_l##width##_le_64_kernel, \ |
2030 |
&gen_op_l##width##_hypv, \ |
|
2031 |
&gen_op_l##width##_le_hypv, \ |
|
2032 |
&gen_op_l##width##_64_hypv, \ |
|
2033 |
&gen_op_l##width##_le_64_hypv, \ |
|
2026 | 2034 |
}; |
2027 | 2035 |
#define OP_ST_TABLE(width) \ |
2028 | 2036 |
static GenOpFunc *gen_op_st##width[] = { \ |
2029 | 2037 |
&gen_op_st##width##_user, \ |
2030 | 2038 |
&gen_op_st##width##_le_user, \ |
2039 |
&gen_op_st##width##_64_user, \ |
|
2040 |
&gen_op_st##width##_le_64_user, \ |
|
2031 | 2041 |
&gen_op_st##width##_kernel, \ |
2032 | 2042 |
&gen_op_st##width##_le_kernel, \ |
2043 |
&gen_op_st##width##_64_kernel, \ |
|
2044 |
&gen_op_st##width##_le_64_kernel, \ |
|
2045 |
&gen_op_st##width##_hypv, \ |
|
2046 |
&gen_op_st##width##_le_hypv, \ |
|
2047 |
&gen_op_st##width##_64_hypv, \ |
|
2048 |
&gen_op_st##width##_le_64_hypv, \ |
|
2049 |
}; |
|
2050 |
/* Byte access routine are endian safe */ |
|
2051 |
#define gen_op_stb_le_hypv gen_op_stb_64_hypv |
|
2052 |
#define gen_op_lbz_le_hypv gen_op_lbz_64_hypv |
|
2053 |
#define gen_op_stb_le_64_hypv gen_op_stb_64_hypv |
|
2054 |
#define gen_op_lbz_le_64_hypv gen_op_lbz_64_hypv |
|
2055 |
#else |
|
2056 |
/* Full system - 64 bits */ |
|
2057 |
#define OP_LD_TABLE(width) \ |
|
2058 |
static GenOpFunc *gen_op_l##width[] = { \ |
|
2059 |
&gen_op_l##width##_user, \ |
|
2060 |
&gen_op_l##width##_le_user, \ |
|
2061 |
&gen_op_l##width##_64_user, \ |
|
2062 |
&gen_op_l##width##_le_64_user, \ |
|
2063 |
&gen_op_l##width##_kernel, \ |
|
2064 |
&gen_op_l##width##_le_kernel, \ |
|
2065 |
&gen_op_l##width##_64_kernel, \ |
|
2066 |
&gen_op_l##width##_le_64_kernel, \ |
|
2067 |
}; |
|
2068 |
#define OP_ST_TABLE(width) \ |
|
2069 |
static GenOpFunc *gen_op_st##width[] = { \ |
|
2070 |
&gen_op_st##width##_user, \ |
|
2071 |
&gen_op_st##width##_le_user, \ |
|
2033 | 2072 |
&gen_op_st##width##_64_user, \ |
2034 | 2073 |
&gen_op_st##width##_le_64_user, \ |
2074 |
&gen_op_st##width##_kernel, \ |
|
2075 |
&gen_op_st##width##_le_kernel, \ |
|
2035 | 2076 |
&gen_op_st##width##_64_kernel, \ |
2036 | 2077 |
&gen_op_st##width##_le_64_kernel, \ |
2037 | 2078 |
}; |
2079 |
#endif |
|
2038 | 2080 |
/* Byte access routine are endian safe */ |
2039 |
#define gen_op_stb_le_64_user gen_op_stb_64_user |
|
2040 |
#define gen_op_lbz_le_64_user gen_op_lbz_64_user |
|
2081 |
#define gen_op_stb_le_64_user gen_op_stb_64_user
|
|
2082 |
#define gen_op_lbz_le_64_user gen_op_lbz_64_user
|
|
2041 | 2083 |
#define gen_op_stb_le_64_kernel gen_op_stb_64_kernel |
2042 | 2084 |
#define gen_op_lbz_le_64_kernel gen_op_lbz_64_kernel |
2043 | 2085 |
#else |
2086 |
/* Full system - 32 bits */ |
|
2044 | 2087 |
#define OP_LD_TABLE(width) \ |
2045 | 2088 |
static GenOpFunc *gen_op_l##width[] = { \ |
2046 | 2089 |
&gen_op_l##width##_user, \ |
... | ... | |
2057 | 2100 |
}; |
2058 | 2101 |
#endif |
2059 | 2102 |
/* Byte access routine are endian safe */ |
2060 |
#define gen_op_stb_le_user gen_op_stb_user |
|
2061 |
#define gen_op_lbz_le_user gen_op_lbz_user |
|
2103 |
#define gen_op_stb_le_user gen_op_stb_user
|
|
2104 |
#define gen_op_lbz_le_user gen_op_lbz_user
|
|
2062 | 2105 |
#define gen_op_stb_le_kernel gen_op_stb_kernel |
2063 | 2106 |
#define gen_op_lbz_le_kernel gen_op_lbz_kernel |
2064 | 2107 |
#endif |
... | ... | |
2316 | 2359 |
|
2317 | 2360 |
/*** Integer load and store multiple ***/ |
2318 | 2361 |
#define op_ldstm(name, reg) (*gen_op_##name[ctx->mem_idx])(reg) |
2319 |
#if defined(TARGET_PPC64) |
|
2320 | 2362 |
#if defined(CONFIG_USER_ONLY) |
2363 |
/* User-mode only */ |
|
2321 | 2364 |
static GenOpFunc1 *gen_op_lmw[] = { |
2322 | 2365 |
&gen_op_lmw_raw, |
2323 | 2366 |
&gen_op_lmw_le_raw, |
2367 |
#if defined(TARGET_PPC64) |
|
2324 | 2368 |
&gen_op_lmw_64_raw, |
2325 | 2369 |
&gen_op_lmw_le_64_raw, |
2370 |
#endif |
|
2326 | 2371 |
}; |
2327 | 2372 |
static GenOpFunc1 *gen_op_stmw[] = { |
2373 |
&gen_op_stmw_raw, |
|
2374 |
&gen_op_stmw_le_raw, |
|
2375 |
#if defined(TARGET_PPC64) |
|
2328 | 2376 |
&gen_op_stmw_64_raw, |
2329 | 2377 |
&gen_op_stmw_le_64_raw, |
2378 |
#endif |
|
2330 | 2379 |
}; |
2331 | 2380 |
#else |
2381 |
#if defined(TARGET_PPC64) |
|
2382 |
/* Full system - 64 bits mode */ |
|
2332 | 2383 |
static GenOpFunc1 *gen_op_lmw[] = { |
2333 | 2384 |
&gen_op_lmw_user, |
2334 | 2385 |
&gen_op_lmw_le_user, |
2335 |
&gen_op_lmw_kernel, |
|
2336 |
&gen_op_lmw_le_kernel, |
|
2337 | 2386 |
&gen_op_lmw_64_user, |
2338 | 2387 |
&gen_op_lmw_le_64_user, |
2388 |
&gen_op_lmw_kernel, |
|
2389 |
&gen_op_lmw_le_kernel, |
|
2339 | 2390 |
&gen_op_lmw_64_kernel, |
2340 | 2391 |
&gen_op_lmw_le_64_kernel, |
2392 |
#if defined(TARGET_PPC64H) |
|
2393 |
&gen_op_lmw_hypv, |
|
2394 |
&gen_op_lmw_le_hypv, |
|
2395 |
&gen_op_lmw_64_hypv, |
|
2396 |
&gen_op_lmw_le_64_hypv, |
|
2397 |
#endif |
|
2341 | 2398 |
}; |
2342 | 2399 |
static GenOpFunc1 *gen_op_stmw[] = { |
2343 | 2400 |
&gen_op_stmw_user, |
2344 | 2401 |
&gen_op_stmw_le_user, |
2345 |
&gen_op_stmw_kernel, |
|
2346 |
&gen_op_stmw_le_kernel, |
|
2347 | 2402 |
&gen_op_stmw_64_user, |
2348 | 2403 |
&gen_op_stmw_le_64_user, |
2404 |
&gen_op_stmw_kernel, |
|
2405 |
&gen_op_stmw_le_kernel, |
|
2349 | 2406 |
&gen_op_stmw_64_kernel, |
2350 | 2407 |
&gen_op_stmw_le_64_kernel, |
2351 |
}; |
|
2408 |
#if defined(TARGET_PPC64H) |
|
2409 |
&gen_op_stmw_hypv, |
|
2410 |
&gen_op_stmw_le_hypv, |
|
2411 |
&gen_op_stmw_64_hypv, |
|
2412 |
&gen_op_stmw_le_64_hypv, |
|
2352 | 2413 |
#endif |
2353 |
#else |
|
2354 |
#if defined(CONFIG_USER_ONLY) |
|
2355 |
static GenOpFunc1 *gen_op_lmw[] = { |
|
2356 |
&gen_op_lmw_raw, |
|
2357 |
&gen_op_lmw_le_raw, |
|
2358 |
}; |
|
2359 |
static GenOpFunc1 *gen_op_stmw[] = { |
|
2360 |
&gen_op_stmw_raw, |
|
2361 |
&gen_op_stmw_le_raw, |
|
2362 | 2414 |
}; |
2363 | 2415 |
#else |
2416 |
/* Full system - 32 bits mode */ |
|
2364 | 2417 |
static GenOpFunc1 *gen_op_lmw[] = { |
2365 | 2418 |
&gen_op_lmw_user, |
2366 | 2419 |
&gen_op_lmw_le_user, |
... | ... | |
2397 | 2450 |
/*** Integer load and store strings ***/ |
2398 | 2451 |
#define op_ldsts(name, start) (*gen_op_##name[ctx->mem_idx])(start) |
2399 | 2452 |
#define op_ldstsx(name, rd, ra, rb) (*gen_op_##name[ctx->mem_idx])(rd, ra, rb) |
2400 |
#if defined(TARGET_PPC64) |
|
2401 | 2453 |
#if defined(CONFIG_USER_ONLY) |
2454 |
/* User-mode only */ |
|
2402 | 2455 |
static GenOpFunc1 *gen_op_lswi[] = { |
2403 | 2456 |
&gen_op_lswi_raw, |
2404 | 2457 |
&gen_op_lswi_le_raw, |
2458 |
#if defined(TARGET_PPC64) |
|
2405 | 2459 |
&gen_op_lswi_64_raw, |
2406 | 2460 |
&gen_op_lswi_le_64_raw, |
2461 |
#endif |
|
2407 | 2462 |
}; |
2408 | 2463 |
static GenOpFunc3 *gen_op_lswx[] = { |
2409 | 2464 |
&gen_op_lswx_raw, |
2410 | 2465 |
&gen_op_lswx_le_raw, |
2466 |
#if defined(TARGET_PPC64) |
|
2411 | 2467 |
&gen_op_lswx_64_raw, |
2412 | 2468 |
&gen_op_lswx_le_64_raw, |
2469 |
#endif |
|
2413 | 2470 |
}; |
2414 | 2471 |
static GenOpFunc1 *gen_op_stsw[] = { |
2415 | 2472 |
&gen_op_stsw_raw, |
2416 | 2473 |
&gen_op_stsw_le_raw, |
2474 |
#if defined(TARGET_PPC64) |
|
2417 | 2475 |
&gen_op_stsw_64_raw, |
2418 | 2476 |
&gen_op_stsw_le_64_raw, |
2477 |
#endif |
|
2419 | 2478 |
}; |
2420 | 2479 |
#else |
2480 |
#if defined(TARGET_PPC64) |
|
2481 |
/* Full system - 64 bits mode */ |
|
2421 | 2482 |
static GenOpFunc1 *gen_op_lswi[] = { |
2422 | 2483 |
&gen_op_lswi_user, |
2423 | 2484 |
&gen_op_lswi_le_user, |
2424 |
&gen_op_lswi_kernel, |
|
2425 |
&gen_op_lswi_le_kernel, |
|
2426 | 2485 |
&gen_op_lswi_64_user, |
2427 | 2486 |
&gen_op_lswi_le_64_user, |
2487 |
&gen_op_lswi_kernel, |
|
2488 |
&gen_op_lswi_le_kernel, |
|
2428 | 2489 |
&gen_op_lswi_64_kernel, |
2429 | 2490 |
&gen_op_lswi_le_64_kernel, |
2491 |
#if defined(TARGET_PPC64H) |
|
2492 |
&gen_op_lswi_hypv, |
|
2493 |
&gen_op_lswi_le_hypv, |
|
2494 |
&gen_op_lswi_64_hypv, |
|
2495 |
&gen_op_lswi_le_64_hypv, |
|
2496 |
#endif |
|
2430 | 2497 |
}; |
2431 | 2498 |
static GenOpFunc3 *gen_op_lswx[] = { |
2432 | 2499 |
&gen_op_lswx_user, |
2433 | 2500 |
&gen_op_lswx_le_user, |
2434 |
&gen_op_lswx_kernel, |
|
2435 |
&gen_op_lswx_le_kernel, |
|
2436 | 2501 |
&gen_op_lswx_64_user, |
2437 | 2502 |
&gen_op_lswx_le_64_user, |
2503 |
&gen_op_lswx_kernel, |
|
2504 |
&gen_op_lswx_le_kernel, |
|
2438 | 2505 |
&gen_op_lswx_64_kernel, |
2439 | 2506 |
&gen_op_lswx_le_64_kernel, |
2507 |
#if defined(TARGET_PPC64H) |
|
2508 |
&gen_op_lswx_hypv, |
|
2509 |
&gen_op_lswx_le_hypv, |
|
2510 |
&gen_op_lswx_64_hypv, |
|
2511 |
&gen_op_lswx_le_64_hypv, |
|
2512 |
#endif |
|
2440 | 2513 |
}; |
2441 | 2514 |
static GenOpFunc1 *gen_op_stsw[] = { |
2442 | 2515 |
&gen_op_stsw_user, |
2443 | 2516 |
&gen_op_stsw_le_user, |
2444 |
&gen_op_stsw_kernel, |
|
2445 |
&gen_op_stsw_le_kernel, |
|
2446 | 2517 |
&gen_op_stsw_64_user, |
2447 | 2518 |
&gen_op_stsw_le_64_user, |
2519 |
&gen_op_stsw_kernel, |
|
2520 |
&gen_op_stsw_le_kernel, |
|
2448 | 2521 |
&gen_op_stsw_64_kernel, |
2449 | 2522 |
&gen_op_stsw_le_64_kernel, |
2450 |
}; |
|
2523 |
#if defined(TARGET_PPC64H) |
|
2524 |
&gen_op_stsw_hypv, |
|
2525 |
&gen_op_stsw_le_hypv, |
|
2526 |
&gen_op_stsw_64_hypv, |
|
2527 |
&gen_op_stsw_le_64_hypv, |
|
2451 | 2528 |
#endif |
2452 |
#else |
|
2453 |
#if defined(CONFIG_USER_ONLY) |
|
2454 |
static GenOpFunc1 *gen_op_lswi[] = { |
|
2455 |
&gen_op_lswi_raw, |
|
2456 |
&gen_op_lswi_le_raw, |
|
2457 |
}; |
|
2458 |
static GenOpFunc3 *gen_op_lswx[] = { |
|
2459 |
&gen_op_lswx_raw, |
|
2460 |
&gen_op_lswx_le_raw, |
|
2461 |
}; |
|
2462 |
static GenOpFunc1 *gen_op_stsw[] = { |
|
2463 |
&gen_op_stsw_raw, |
|
2464 |
&gen_op_stsw_le_raw, |
|
2465 | 2529 |
}; |
2466 | 2530 |
#else |
2531 |
/* Full system - 32 bits mode */ |
|
2467 | 2532 |
static GenOpFunc1 *gen_op_lswi[] = { |
2468 | 2533 |
&gen_op_lswi_user, |
2469 | 2534 |
&gen_op_lswi_le_user, |
... | ... | |
2569 | 2634 |
|
2570 | 2635 |
#define op_lwarx() (*gen_op_lwarx[ctx->mem_idx])() |
2571 | 2636 |
#define op_stwcx() (*gen_op_stwcx[ctx->mem_idx])() |
2572 |
#if defined(TARGET_PPC64) |
|
2573 | 2637 |
#if defined(CONFIG_USER_ONLY) |
2638 |
/* User-mode only */ |
|
2574 | 2639 |
static GenOpFunc *gen_op_lwarx[] = { |
2575 | 2640 |
&gen_op_lwarx_raw, |
2576 | 2641 |
&gen_op_lwarx_le_raw, |
2642 |
#if defined(TARGET_PPC64) |
|
2577 | 2643 |
&gen_op_lwarx_64_raw, |
2578 | 2644 |
&gen_op_lwarx_le_64_raw, |
2645 |
#endif |
|
2579 | 2646 |
}; |
2580 | 2647 |
static GenOpFunc *gen_op_stwcx[] = { |
2581 | 2648 |
&gen_op_stwcx_raw, |
2582 | 2649 |
&gen_op_stwcx_le_raw, |
2650 |
#if defined(TARGET_PPC64) |
|
2583 | 2651 |
&gen_op_stwcx_64_raw, |
2584 | 2652 |
&gen_op_stwcx_le_64_raw, |
2653 |
#endif |
|
2585 | 2654 |
}; |
2586 | 2655 |
#else |
2656 |
#if defined(TARGET_PPC64) |
|
2657 |
/* Full system - 64 bits mode */ |
|
2587 | 2658 |
static GenOpFunc *gen_op_lwarx[] = { |
2588 | 2659 |
&gen_op_lwarx_user, |
2589 | 2660 |
&gen_op_lwarx_le_user, |
2590 |
&gen_op_lwarx_kernel, |
|
2591 |
&gen_op_lwarx_le_kernel, |
|
2592 | 2661 |
&gen_op_lwarx_64_user, |
2593 | 2662 |
&gen_op_lwarx_le_64_user, |
2663 |
&gen_op_lwarx_kernel, |
|
2664 |
&gen_op_lwarx_le_kernel, |
|
2594 | 2665 |
&gen_op_lwarx_64_kernel, |
2595 | 2666 |
&gen_op_lwarx_le_64_kernel, |
2667 |
#if defined(TARGET_PPC64H) |
|
2668 |
&gen_op_lwarx_hypv, |
|
2669 |
&gen_op_lwarx_le_hypv, |
|
2670 |
&gen_op_lwarx_64_hypv, |
|
2671 |
&gen_op_lwarx_le_64_hypv, |
|
2672 |
#endif |
|
2596 | 2673 |
}; |
2597 | 2674 |
static GenOpFunc *gen_op_stwcx[] = { |
2598 | 2675 |
&gen_op_stwcx_user, |
2599 | 2676 |
&gen_op_stwcx_le_user, |
2600 |
&gen_op_stwcx_kernel, |
|
2601 |
&gen_op_stwcx_le_kernel, |
|
2602 | 2677 |
&gen_op_stwcx_64_user, |
2603 | 2678 |
&gen_op_stwcx_le_64_user, |
2679 |
&gen_op_stwcx_kernel, |
|
2680 |
&gen_op_stwcx_le_kernel, |
|
2604 | 2681 |
&gen_op_stwcx_64_kernel, |
2605 | 2682 |
&gen_op_stwcx_le_64_kernel, |
2606 |
}; |
|
2683 |
#if defined(TARGET_PPC64H) |
|
2684 |
&gen_op_stwcx_hypv, |
|
2685 |
&gen_op_stwcx_le_hypv, |
|
2686 |
&gen_op_stwcx_64_hypv, |
|
2687 |
&gen_op_stwcx_le_64_hypv, |
|
2607 | 2688 |
#endif |
2608 |
#else |
|
2609 |
#if defined(CONFIG_USER_ONLY) |
|
2610 |
static GenOpFunc *gen_op_lwarx[] = { |
|
2611 |
&gen_op_lwarx_raw, |
|
2612 |
&gen_op_lwarx_le_raw, |
|
2613 |
}; |
|
2614 |
static GenOpFunc *gen_op_stwcx[] = { |
|
2615 |
&gen_op_stwcx_raw, |
|
2616 |
&gen_op_stwcx_le_raw, |
|
2617 | 2689 |
}; |
2618 | 2690 |
#else |
2691 |
/* Full system - 32 bits mode */ |
|
2619 | 2692 |
static GenOpFunc *gen_op_lwarx[] = { |
2620 | 2693 |
&gen_op_lwarx_user, |
2621 | 2694 |
&gen_op_lwarx_le_user, |
... | ... | |
2655 | 2728 |
#define op_ldarx() (*gen_op_ldarx[ctx->mem_idx])() |
2656 | 2729 |
#define op_stdcx() (*gen_op_stdcx[ctx->mem_idx])() |
2657 | 2730 |
#if defined(CONFIG_USER_ONLY) |
2731 |
/* User-mode only */ |
|
2658 | 2732 |
static GenOpFunc *gen_op_ldarx[] = { |
2659 | 2733 |
&gen_op_ldarx_raw, |
2660 | 2734 |
&gen_op_ldarx_le_raw, |
... | ... | |
2668 | 2742 |
&gen_op_stdcx_le_64_raw, |
2669 | 2743 |
}; |
2670 | 2744 |
#else |
2745 |
/* Full system */ |
|
2671 | 2746 |
static GenOpFunc *gen_op_ldarx[] = { |
2672 | 2747 |
&gen_op_ldarx_user, |
2673 | 2748 |
&gen_op_ldarx_le_user, |
2674 |
&gen_op_ldarx_kernel, |
|
2675 |
&gen_op_ldarx_le_kernel, |
|
2676 | 2749 |
&gen_op_ldarx_64_user, |
2677 | 2750 |
&gen_op_ldarx_le_64_user, |
2751 |
&gen_op_ldarx_kernel, |
|
2752 |
&gen_op_ldarx_le_kernel, |
|
2678 | 2753 |
&gen_op_ldarx_64_kernel, |
2679 | 2754 |
&gen_op_ldarx_le_64_kernel, |
2755 |
#if defined(TARGET_PPC64H) |
|
2756 |
&gen_op_ldarx_hypv, |
|
2757 |
&gen_op_ldarx_le_hypv, |
|
2758 |
&gen_op_ldarx_64_hypv, |
|
2759 |
&gen_op_ldarx_le_64_hypv, |
|
2760 |
#endif |
|
2680 | 2761 |
}; |
2681 | 2762 |
static GenOpFunc *gen_op_stdcx[] = { |
2682 | 2763 |
&gen_op_stdcx_user, |
2683 | 2764 |
&gen_op_stdcx_le_user, |
2684 |
&gen_op_stdcx_kernel, |
|
2685 |
&gen_op_stdcx_le_kernel, |
|
2686 | 2765 |
&gen_op_stdcx_64_user, |
2687 | 2766 |
&gen_op_stdcx_le_64_user, |
2767 |
&gen_op_stdcx_kernel, |
|
2768 |
&gen_op_stdcx_le_kernel, |
|
2688 | 2769 |
&gen_op_stdcx_64_kernel, |
2689 | 2770 |
&gen_op_stdcx_le_64_kernel, |
2771 |
#if defined(TARGET_PPC64H) |
|
2772 |
&gen_op_stdcx_hypv, |
|
2773 |
&gen_op_stdcx_le_hypv, |
|
2774 |
&gen_op_stdcx_64_hypv, |
|
2775 |
&gen_op_stdcx_le_64_hypv, |
|
2776 |
#endif |
|
2690 | 2777 |
}; |
2691 | 2778 |
#endif |
2692 | 2779 |
|
... | ... | |
3537 | 3624 |
|
3538 | 3625 |
/* dcbz */ |
3539 | 3626 |
#define op_dcbz() (*gen_op_dcbz[ctx->mem_idx])() |
3540 |
#if defined(TARGET_PPC64) |
|
3541 | 3627 |
#if defined(CONFIG_USER_ONLY) |
3628 |
/* User-mode only */ |
|
3542 | 3629 |
static GenOpFunc *gen_op_dcbz[] = { |
3543 | 3630 |
&gen_op_dcbz_raw, |
3544 | 3631 |
&gen_op_dcbz_raw, |
3632 |
#if defined(TARGET_PPC64) |
|
3545 | 3633 |
&gen_op_dcbz_64_raw, |
3546 | 3634 |
&gen_op_dcbz_64_raw, |
3635 |
#endif |
|
3547 | 3636 |
}; |
3548 | 3637 |
#else |
3638 |
#if defined(TARGET_PPC64) |
|
3639 |
/* Full system - 64 bits mode */ |
|
3549 | 3640 |
static GenOpFunc *gen_op_dcbz[] = { |
3550 | 3641 |
&gen_op_dcbz_user, |
3551 | 3642 |
&gen_op_dcbz_user, |
3552 |
&gen_op_dcbz_kernel, |
|
3553 |
&gen_op_dcbz_kernel, |
|
3554 | 3643 |
&gen_op_dcbz_64_user, |
3555 | 3644 |
&gen_op_dcbz_64_user, |
3645 |
&gen_op_dcbz_kernel, |
|
3646 |
&gen_op_dcbz_kernel, |
|
3556 | 3647 |
&gen_op_dcbz_64_kernel, |
3557 | 3648 |
&gen_op_dcbz_64_kernel, |
3558 |
}; |
|
3649 |
#if defined(TARGET_PPC64H) |
|
3650 |
&gen_op_dcbz_hypv, |
|
3651 |
&gen_op_dcbz_hypv, |
|
3652 |
&gen_op_dcbz_64_hypv, |
|
3653 |
&gen_op_dcbz_64_hypv, |
|
3559 | 3654 |
#endif |
3560 |
#else |
|
3561 |
#if defined(CONFIG_USER_ONLY) |
|
3562 |
static GenOpFunc *gen_op_dcbz[] = { |
|
3563 |
&gen_op_dcbz_raw, |
|
3564 |
&gen_op_dcbz_raw, |
|
3565 | 3655 |
}; |
3566 | 3656 |
#else |
3657 |
/* Full system - 32 bits mode */ |
|
3567 | 3658 |
static GenOpFunc *gen_op_dcbz[] = { |
3568 | 3659 |
&gen_op_dcbz_user, |
3569 | 3660 |
&gen_op_dcbz_user, |
... | ... | |
3582 | 3673 |
|
3583 | 3674 |
/* icbi */ |
3584 | 3675 |
#define op_icbi() (*gen_op_icbi[ctx->mem_idx])() |
3585 |
#if defined(TARGET_PPC64) |
|
3586 | 3676 |
#if defined(CONFIG_USER_ONLY) |
3677 |
/* User-mode only */ |
|
3587 | 3678 |
static GenOpFunc *gen_op_icbi[] = { |
3588 | 3679 |
&gen_op_icbi_raw, |
3589 | 3680 |
&gen_op_icbi_raw, |
3681 |
#if defined(TARGET_PPC64) |
|
3590 | 3682 |
&gen_op_icbi_64_raw, |
3591 | 3683 |
&gen_op_icbi_64_raw, |
3684 |
#endif |
|
3592 | 3685 |
}; |
3593 | 3686 |
#else |
3687 |
/* Full system - 64 bits mode */ |
|
3688 |
#if defined(TARGET_PPC64) |
|
3594 | 3689 |
static GenOpFunc *gen_op_icbi[] = { |
3595 | 3690 |
&gen_op_icbi_user, |
3596 | 3691 |
&gen_op_icbi_user, |
3597 |
&gen_op_icbi_kernel, |
|
3598 |
&gen_op_icbi_kernel, |
|
3599 | 3692 |
&gen_op_icbi_64_user, |
3600 | 3693 |
&gen_op_icbi_64_user, |
3694 |
&gen_op_icbi_kernel, |
|
3695 |
&gen_op_icbi_kernel, |
|
3601 | 3696 |
&gen_op_icbi_64_kernel, |
3602 | 3697 |
&gen_op_icbi_64_kernel, |
3603 |
}; |
|
3698 |
#if defined(TARGET_PPC64H) |
|
3699 |
&gen_op_icbi_hypv, |
|
3700 |
&gen_op_icbi_hypv, |
|
3701 |
&gen_op_icbi_64_hypv, |
|
3702 |
&gen_op_icbi_64_hypv, |
|
3604 | 3703 |
#endif |
3605 |
#else |
|
3606 |
#if defined(CONFIG_USER_ONLY) |
|
3607 |
static GenOpFunc *gen_op_icbi[] = { |
|
3608 |
&gen_op_icbi_raw, |
|
3609 |
&gen_op_icbi_raw, |
|
3610 | 3704 |
}; |
3611 | 3705 |
#else |
3706 |
/* Full system - 32 bits mode */ |
|
3612 | 3707 |
static GenOpFunc *gen_op_icbi[] = { |
3613 | 3708 |
&gen_op_icbi_user, |
3614 | 3709 |
&gen_op_icbi_user, |
... | ... | |
3796 | 3891 |
/* Optional: */ |
3797 | 3892 |
#define op_eciwx() (*gen_op_eciwx[ctx->mem_idx])() |
3798 | 3893 |
#define op_ecowx() (*gen_op_ecowx[ctx->mem_idx])() |
3799 |
#if defined(TARGET_PPC64) |
|
3800 | 3894 |
#if defined(CONFIG_USER_ONLY) |
3895 |
/* User-mode only */ |
|
3801 | 3896 |
static GenOpFunc *gen_op_eciwx[] = { |
3802 | 3897 |
&gen_op_eciwx_raw, |
3803 | 3898 |
&gen_op_eciwx_le_raw, |
3899 |
#if defined(TARGET_PPC64) |
|
3804 | 3900 |
&gen_op_eciwx_64_raw, |
3805 | 3901 |
&gen_op_eciwx_le_64_raw, |
3902 |
#endif |
|
3806 | 3903 |
}; |
3807 | 3904 |
static GenOpFunc *gen_op_ecowx[] = { |
3808 | 3905 |
&gen_op_ecowx_raw, |
3809 | 3906 |
&gen_op_ecowx_le_raw, |
3907 |
#if defined(TARGET_PPC64) |
|
3810 | 3908 |
&gen_op_ecowx_64_raw, |
3811 | 3909 |
&gen_op_ecowx_le_64_raw, |
3910 |
#endif |
|
3812 | 3911 |
}; |
3813 | 3912 |
#else |
3913 |
#if defined(TARGET_PPC64) |
|
3914 |
/* Full system - 64 bits mode */ |
|
3814 | 3915 |
static GenOpFunc *gen_op_eciwx[] = { |
3815 | 3916 |
&gen_op_eciwx_user, |
3816 | 3917 |
&gen_op_eciwx_le_user, |
3817 |
&gen_op_eciwx_kernel, |
|
3818 |
&gen_op_eciwx_le_kernel, |
|
3819 | 3918 |
&gen_op_eciwx_64_user, |
3820 | 3919 |
&gen_op_eciwx_le_64_user, |
3920 |
&gen_op_eciwx_kernel, |
|
3921 |
&gen_op_eciwx_le_kernel, |
|
3821 | 3922 |
&gen_op_eciwx_64_kernel, |
3822 | 3923 |
&gen_op_eciwx_le_64_kernel, |
3924 |
#if defined(TARGET_PPC64H) |
|
3925 |
&gen_op_eciwx_hypv, |
|
3926 |
&gen_op_eciwx_le_hypv, |
|
3927 |
&gen_op_eciwx_64_hypv, |
|
3928 |
&gen_op_eciwx_le_64_hypv, |
|
3929 |
#endif |
|
3823 | 3930 |
}; |
3824 | 3931 |
static GenOpFunc *gen_op_ecowx[] = { |
3825 | 3932 |
&gen_op_ecowx_user, |
3826 | 3933 |
&gen_op_ecowx_le_user, |
3827 |
&gen_op_ecowx_kernel, |
|
3828 |
&gen_op_ecowx_le_kernel, |
|
3829 | 3934 |
&gen_op_ecowx_64_user, |
3830 | 3935 |
&gen_op_ecowx_le_64_user, |
3936 |
&gen_op_ecowx_kernel, |
|
3937 |
&gen_op_ecowx_le_kernel, |
|
3831 | 3938 |
&gen_op_ecowx_64_kernel, |
3832 | 3939 |
&gen_op_ecowx_le_64_kernel, |
3833 |
}; |
|
3940 |
#if defined(TARGET_PPC64H) |
|
3941 |
&gen_op_ecowx_hypv, |
|
3942 |
&gen_op_ecowx_le_hypv, |
|
3943 |
&gen_op_ecowx_64_hypv, |
|
3944 |
&gen_op_ecowx_le_64_hypv, |
|
3834 | 3945 |
#endif |
3835 |
#else |
|
3836 |
#if defined(CONFIG_USER_ONLY) |
|
3837 |
static GenOpFunc *gen_op_eciwx[] = { |
|
3838 |
&gen_op_eciwx_raw, |
|
3839 |
&gen_op_eciwx_le_raw, |
|
3840 |
}; |
|
3841 |
static GenOpFunc *gen_op_ecowx[] = { |
|
3842 |
&gen_op_ecowx_raw, |
|
3843 |
&gen_op_ecowx_le_raw, |
|
3844 | 3946 |
}; |
3845 | 3947 |
#else |
3948 |
/* Full system - 32 bits mode */ |
|
3846 | 3949 |
static GenOpFunc *gen_op_eciwx[] = { |
3847 | 3950 |
&gen_op_eciwx_user, |
3848 | 3951 |
&gen_op_eciwx_le_user, |
... | ... | |
3981 | 4084 |
} |
3982 | 4085 |
|
3983 | 4086 |
/* As lscbx load from memory byte after byte, it's always endian safe */ |
3984 |
#define op_POWER_lscbx(start, ra, rb) \ |
|
4087 |
#define op_POWER_lscbx(start, ra, rb) \
|
|
3985 | 4088 |
(*gen_op_POWER_lscbx[ctx->mem_idx])(start, ra, rb) |
3986 | 4089 |
#if defined(CONFIG_USER_ONLY) |
3987 | 4090 |
static GenOpFunc3 *gen_op_POWER_lscbx[] = { |
... | ... | |
5269 | 5372 |
#define op_spe_ldst(name) (*gen_op_##name[ctx->mem_idx])() |
5270 | 5373 |
#if defined(CONFIG_USER_ONLY) |
5271 | 5374 |
#if defined(TARGET_PPC64) |
5375 |
/* User-mode only - 64 bits mode */ |
|
5272 | 5376 |
#define OP_SPE_LD_TABLE(name) \ |
5273 | 5377 |
static GenOpFunc *gen_op_spe_l##name[] = { \ |
5274 | 5378 |
&gen_op_spe_l##name##_raw, \ |
... | ... | |
5284 | 5388 |
&gen_op_spe_st##name##_le_64_raw, \ |
5285 | 5389 |
}; |
5286 | 5390 |
#else /* defined(TARGET_PPC64) */ |
5391 |
/* User-mode only - 32 bits mode */ |
|
5287 | 5392 |
#define OP_SPE_LD_TABLE(name) \ |
5288 | 5393 |
static GenOpFunc *gen_op_spe_l##name[] = { \ |
5289 | 5394 |
&gen_op_spe_l##name##_raw, \ |
... | ... | |
5296 | 5401 |
}; |
5297 | 5402 |
#endif /* defined(TARGET_PPC64) */ |
5298 | 5403 |
#else /* defined(CONFIG_USER_ONLY) */ |
5299 |
#if defined(TARGET_PPC64) |
|
5404 |
#if defined(TARGET_PPC64H) |
|
5405 |
/* Full system with hypervisor mode */ |
|
5300 | 5406 |
#define OP_SPE_LD_TABLE(name) \ |
5301 | 5407 |
static GenOpFunc *gen_op_spe_l##name[] = { \ |
5302 | 5408 |
&gen_op_spe_l##name##_user, \ |
5303 | 5409 |
&gen_op_spe_l##name##_le_user, \ |
5304 |
&gen_op_spe_l##name##_kernel, \ |
|
5305 |
&gen_op_spe_l##name##_le_kernel, \ |
|
5306 | 5410 |
&gen_op_spe_l##name##_64_user, \ |
5307 | 5411 |
&gen_op_spe_l##name##_le_64_user, \ |
5412 |
&gen_op_spe_l##name##_kernel, \ |
|
5413 |
&gen_op_spe_l##name##_le_kernel, \ |
|
5308 | 5414 |
&gen_op_spe_l##name##_64_kernel, \ |
5309 | 5415 |
&gen_op_spe_l##name##_le_64_kernel, \ |
5416 |
&gen_op_spe_l##name##_hypv, \ |
|
5417 |
&gen_op_spe_l##name##_le_hypv, \ |
|
5418 |
&gen_op_spe_l##name##_64_hypv, \ |
|
5419 |
&gen_op_spe_l##name##_le_64_hypv, \ |
|
5310 | 5420 |
}; |
5311 | 5421 |
#define OP_SPE_ST_TABLE(name) \ |
5312 | 5422 |
static GenOpFunc *gen_op_spe_st##name[] = { \ |
5313 | 5423 |
&gen_op_spe_st##name##_user, \ |
5314 | 5424 |
&gen_op_spe_st##name##_le_user, \ |
5425 |
&gen_op_spe_st##name##_64_user, \ |
|
5426 |
&gen_op_spe_st##name##_le_64_user, \ |
|
5315 | 5427 |
&gen_op_spe_st##name##_kernel, \ |
5316 | 5428 |
&gen_op_spe_st##name##_le_kernel, \ |
5429 |
&gen_op_spe_st##name##_64_kernel, \ |
|
5430 |
&gen_op_spe_st##name##_le_64_kernel, \ |
|
5431 |
&gen_op_spe_st##name##_hypv, \ |
|
5432 |
&gen_op_spe_st##name##_le_hypv, \ |
|
5433 |
&gen_op_spe_st##name##_64_hypv, \ |
|
5434 |
&gen_op_spe_st##name##_le_64_hypv, \ |
|
5435 |
}; |
|
5436 |
#elif defined(TARGET_PPC64) |
|
5437 |
/* Full system - 64 bits mode */ |
|
5438 |
#define OP_SPE_LD_TABLE(name) \ |
|
5439 |
static GenOpFunc *gen_op_spe_l##name[] = { \ |
|
5440 |
&gen_op_spe_l##name##_user, \ |
|
5441 |
&gen_op_spe_l##name##_le_user, \ |
|
5442 |
&gen_op_spe_l##name##_64_user, \ |
|
5443 |
&gen_op_spe_l##name##_le_64_user, \ |
|
5444 |
&gen_op_spe_l##name##_kernel, \ |
|
5445 |
&gen_op_spe_l##name##_le_kernel, \ |
|
5446 |
&gen_op_spe_l##name##_64_kernel, \ |
|
5447 |
&gen_op_spe_l##name##_le_64_kernel, \ |
|
5448 |
}; |
|
5449 |
#define OP_SPE_ST_TABLE(name) \ |
|
5450 |
static GenOpFunc *gen_op_spe_st##name[] = { \ |
|
5451 |
&gen_op_spe_st##name##_user, \ |
|
5452 |
&gen_op_spe_st##name##_le_user, \ |
|
5317 | 5453 |
&gen_op_spe_st##name##_64_user, \ |
5318 | 5454 |
&gen_op_spe_st##name##_le_64_user, \ |
5455 |
&gen_op_spe_st##name##_kernel, \ |
|
5456 |
&gen_op_spe_st##name##_le_kernel, \ |
|
5319 | 5457 |
&gen_op_spe_st##name##_64_kernel, \ |
5320 | 5458 |
&gen_op_spe_st##name##_le_64_kernel, \ |
5321 | 5459 |
}; |
5322 | 5460 |
#else /* defined(TARGET_PPC64) */ |
5461 |
/* Full system - 32 bits mode */ |
|
5323 | 5462 |
#define OP_SPE_LD_TABLE(name) \ |
5324 | 5463 |
static GenOpFunc *gen_op_spe_l##name[] = { \ |
5325 | 5464 |
&gen_op_spe_l##name##_user, \ |
... | ... | |
6173 | 6312 |
opc_handler_t **table, *handler; |
6174 | 6313 |
target_ulong pc_start; |
6175 | 6314 |
uint16_t *gen_opc_end; |
6315 |
int supervisor; |
|
6176 | 6316 |
int j, lj = -1; |
6177 | 6317 |
|
6178 | 6318 |
pc_start = tb->pc; |
... | ... | |
6185 | 6325 |
ctx.exception = POWERPC_EXCP_NONE; |
6186 | 6326 |
ctx.spr_cb = env->spr_cb; |
6187 | 6327 |
#if defined(CONFIG_USER_ONLY) |
6188 |
ctx.mem_idx = msr_le; |
|
6189 |
#if defined(TARGET_PPC64) |
|
6190 |
ctx.mem_idx |= msr_sf << 1; |
|
6191 |
#endif |
|
6328 |
supervisor = 0; |
|
6192 | 6329 |
#else |
6193 | 6330 |
#if defined(TARGET_PPC64H) |
6194 | 6331 |
if (msr_pr == 0 && msr_hv == 1) |
6195 |
ctx.supervisor = 2;
|
|
6332 |
supervisor = 2; |
|
6196 | 6333 |
else |
6197 | 6334 |
#endif |
6198 |
ctx.supervisor = 1 - msr_pr; |
|
6199 |
ctx.mem_idx = ((1 - msr_pr) << 1) | msr_le; |
|
6200 |
#if defined(TARGET_PPC64) |
|
6201 |
ctx.mem_idx |= msr_sf << 2; |
|
6202 |
#endif |
|
6335 |
supervisor = 1 - msr_pr; |
|
6336 |
ctx.supervisor = supervisor; |
|
6203 | 6337 |
#endif |
6204 | 6338 |
#if defined(TARGET_PPC64) |
6205 | 6339 |
ctx.sf_mode = msr_sf; |
6340 |
ctx.mem_idx = (supervisor << 2) | (msr_sf << 1) | msr_le; |
|
6341 |
#else |
|
6342 |
ctx.mem_idx = (supervisor << 1) | msr_le; |
|
6206 | 6343 |
#endif |
6207 | 6344 |
ctx.fpu_enabled = msr_fp; |
6208 | 6345 |
#if defined(TARGET_PPCEMB) |
Also available in: Unified diff