Commit 7863667f35531557f10e7f920e4361f621a14e3f
1 parent
2f619698
Always make PowerPC hypervisor mode memory accesses and instructions
available for full system emulation, then removing all #if TARGET_PPC64H from micro-ops and code translator. Add new macros to dramatically simplify memory access tables definitions in target-ppc/translate.c. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3654 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
6 changed files
with
256 additions
and
1034 deletions
target-ppc/cpu.h
| ... | ... | @@ -305,11 +305,9 @@ struct ppc_spr_t { |
| 305 | 305 | #if !defined(CONFIG_USER_ONLY) |
| 306 | 306 | void (*oea_read)(void *opaque, int spr_num); |
| 307 | 307 | void (*oea_write)(void *opaque, int spr_num); |
| 308 | -#if defined(TARGET_PPC64H) | |
| 309 | 308 | void (*hea_read)(void *opaque, int spr_num); |
| 310 | 309 | void (*hea_write)(void *opaque, int spr_num); |
| 311 | 310 | #endif |
| 312 | -#endif | |
| 313 | 311 | const unsigned char *name; |
| 314 | 312 | }; |
| 315 | 313 | |
| ... | ... | @@ -510,11 +508,7 @@ enum { |
| 510 | 508 | |
| 511 | 509 | /*****************************************************************************/ |
| 512 | 510 | /* The whole PowerPC CPU context */ |
| 513 | -#if defined(TARGET_PPC64H) | |
| 514 | 511 | #define NB_MMU_MODES 3 |
| 515 | -#else | |
| 516 | -#define NB_MMU_MODES 2 | |
| 517 | -#endif | |
| 518 | 512 | |
| 519 | 513 | struct CPUPPCState { |
| 520 | 514 | /* First are the most commonly used resources |
| ... | ... | @@ -783,9 +777,7 @@ int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val); |
| 783 | 777 | /* MMU modes definitions */ |
| 784 | 778 | #define MMU_MODE0_SUFFIX _user |
| 785 | 779 | #define MMU_MODE1_SUFFIX _kernel |
| 786 | -#if defined(TARGET_PPC64H) | |
| 787 | 780 | #define MMU_MODE2_SUFFIX _hypv |
| 788 | -#endif | |
| 789 | 781 | #define MMU_USER_IDX 0 |
| 790 | 782 | static inline int cpu_mmu_index (CPUState *env) |
| 791 | 783 | { | ... | ... |
target-ppc/op.c
| ... | ... | @@ -1987,12 +1987,10 @@ void OPPROTO op_fneg (void) |
| 1987 | 1987 | #define MEMSUFFIX _kernel |
| 1988 | 1988 | #include "op_helper.h" |
| 1989 | 1989 | #include "op_mem.h" |
| 1990 | -#if defined(TARGET_PPC64H) | |
| 1991 | 1990 | #define MEMSUFFIX _hypv |
| 1992 | 1991 | #include "op_helper.h" |
| 1993 | 1992 | #include "op_mem.h" |
| 1994 | 1993 | #endif |
| 1995 | -#endif | |
| 1996 | 1994 | |
| 1997 | 1995 | /* Special op to check and maybe clear reservation */ |
| 1998 | 1996 | void OPPROTO op_check_reservation (void) |
| ... | ... | @@ -2031,9 +2029,7 @@ void OPPROTO op_rfid (void) |
| 2031 | 2029 | do_rfid(); |
| 2032 | 2030 | RETURN(); |
| 2033 | 2031 | } |
| 2034 | -#endif | |
| 2035 | 2032 | |
| 2036 | -#if defined(TARGET_PPC64H) | |
| 2037 | 2033 | void OPPROTO op_hrfid (void) |
| 2038 | 2034 | { |
| 2039 | 2035 | do_hrfid(); | ... | ... |
target-ppc/op_helper.c
| ... | ... | @@ -33,12 +33,10 @@ |
| 33 | 33 | #define MEMSUFFIX _kernel |
| 34 | 34 | #include "op_helper.h" |
| 35 | 35 | #include "op_helper_mem.h" |
| 36 | -#if defined(TARGET_PPC64H) | |
| 37 | 36 | #define MEMSUFFIX _hypv |
| 38 | 37 | #include "op_helper.h" |
| 39 | 38 | #include "op_helper_mem.h" |
| 40 | 39 | #endif |
| 41 | -#endif | |
| 42 | 40 | |
| 43 | 41 | //#define DEBUG_OP |
| 44 | 42 | //#define DEBUG_EXCEPTIONS |
| ... | ... | @@ -1475,8 +1473,7 @@ void do_rfid (void) |
| 1475 | 1473 | __do_rfi(env->spr[SPR_SRR0], env->spr[SPR_SRR1], |
| 1476 | 1474 | ~((target_ulong)0xFFFF0000), 0); |
| 1477 | 1475 | } |
| 1478 | -#endif | |
| 1479 | -#if defined(TARGET_PPC64H) | |
| 1476 | + | |
| 1480 | 1477 | void do_hrfid (void) |
| 1481 | 1478 | { |
| 1482 | 1479 | __do_rfi(env->spr[SPR_HSRR0], env->spr[SPR_HSRR1], | ... | ... |
target-ppc/op_helper.h
target-ppc/translate.c
| ... | ... | @@ -1250,7 +1250,6 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER) |
| 1250 | 1250 | gen_op_store_pri(6); |
| 1251 | 1251 | } |
| 1252 | 1252 | break; |
| 1253 | -#if defined(TARGET_PPC64H) | |
| 1254 | 1253 | case 7: |
| 1255 | 1254 | if (ctx->supervisor > 1) { |
| 1256 | 1255 | /* Set process priority to very high */ |
| ... | ... | @@ -1258,7 +1257,6 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER) |
| 1258 | 1257 | } |
| 1259 | 1258 | break; |
| 1260 | 1259 | #endif |
| 1261 | -#endif | |
| 1262 | 1260 | default: |
| 1263 | 1261 | /* nop */ |
| 1264 | 1262 | break; |
| ... | ... | @@ -2103,136 +2101,64 @@ static always_inline void gen_addr_register (DisasContext *ctx) |
| 2103 | 2101 | #endif |
| 2104 | 2102 | } |
| 2105 | 2103 | |
| 2106 | -/*** Integer load ***/ | |
| 2107 | -#define op_ldst(name) (*gen_op_##name[ctx->mem_idx])() | |
| 2104 | +#if defined(TARGET_PPC64) | |
| 2105 | +#define _GEN_MEM_FUNCS(name, mode) \ | |
| 2106 | + &gen_op_##name##_##mode, \ | |
| 2107 | + &gen_op_##name##_le_##mode, \ | |
| 2108 | + &gen_op_##name##_64_##mode, \ | |
| 2109 | + &gen_op_##name##_le_64_##mode | |
| 2110 | +#else | |
| 2111 | +#define _GEN_MEM_FUNCS(name, mode) \ | |
| 2112 | + &gen_op_##name##_##mode, \ | |
| 2113 | + &gen_op_##name##_le_##mode | |
| 2114 | +#endif | |
| 2108 | 2115 | #if defined(CONFIG_USER_ONLY) |
| 2109 | 2116 | #if defined(TARGET_PPC64) |
| 2110 | -/* User mode only - 64 bits */ | |
| 2111 | -#define OP_LD_TABLE(width) \ | |
| 2112 | -static GenOpFunc *gen_op_l##width[] = { \ | |
| 2113 | - &gen_op_l##width##_raw, \ | |
| 2114 | - &gen_op_l##width##_le_raw, \ | |
| 2115 | - &gen_op_l##width##_64_raw, \ | |
| 2116 | - &gen_op_l##width##_le_64_raw, \ | |
| 2117 | -}; | |
| 2118 | -#define OP_ST_TABLE(width) \ | |
| 2119 | -static GenOpFunc *gen_op_st##width[] = { \ | |
| 2120 | - &gen_op_st##width##_raw, \ | |
| 2121 | - &gen_op_st##width##_le_raw, \ | |
| 2122 | - &gen_op_st##width##_64_raw, \ | |
| 2123 | - &gen_op_st##width##_le_64_raw, \ | |
| 2124 | -}; | |
| 2125 | -/* Byte access routine are endian safe */ | |
| 2126 | -#define gen_op_stb_le_64_raw gen_op_stb_64_raw | |
| 2127 | -#define gen_op_lbz_le_64_raw gen_op_lbz_64_raw | |
| 2117 | +#define NB_MEM_FUNCS 4 | |
| 2128 | 2118 | #else |
| 2129 | -/* User mode only - 32 bits */ | |
| 2130 | -#define OP_LD_TABLE(width) \ | |
| 2131 | -static GenOpFunc *gen_op_l##width[] = { \ | |
| 2132 | - &gen_op_l##width##_raw, \ | |
| 2133 | - &gen_op_l##width##_le_raw, \ | |
| 2134 | -}; | |
| 2135 | -#define OP_ST_TABLE(width) \ | |
| 2136 | -static GenOpFunc *gen_op_st##width[] = { \ | |
| 2137 | - &gen_op_st##width##_raw, \ | |
| 2138 | - &gen_op_st##width##_le_raw, \ | |
| 2139 | -}; | |
| 2119 | +#define NB_MEM_FUNCS 2 | |
| 2140 | 2120 | #endif |
| 2141 | -/* Byte access routine are endian safe */ | |
| 2142 | -#define gen_op_stb_le_raw gen_op_stb_raw | |
| 2143 | -#define gen_op_lbz_le_raw gen_op_lbz_raw | |
| 2121 | +#define GEN_MEM_FUNCS(name) \ | |
| 2122 | + _GEN_MEM_FUNCS(name, raw) | |
| 2144 | 2123 | #else |
| 2145 | 2124 | #if defined(TARGET_PPC64) |
| 2146 | -#if defined(TARGET_PPC64H) | |
| 2147 | -/* Full system - 64 bits with hypervisor mode */ | |
| 2148 | -#define OP_LD_TABLE(width) \ | |
| 2149 | -static GenOpFunc *gen_op_l##width[] = { \ | |
| 2150 | - &gen_op_l##width##_user, \ | |
| 2151 | - &gen_op_l##width##_le_user, \ | |
| 2152 | - &gen_op_l##width##_64_user, \ | |
| 2153 | - &gen_op_l##width##_le_64_user, \ | |
| 2154 | - &gen_op_l##width##_kernel, \ | |
| 2155 | - &gen_op_l##width##_le_kernel, \ | |
| 2156 | - &gen_op_l##width##_64_kernel, \ | |
| 2157 | - &gen_op_l##width##_le_64_kernel, \ | |
| 2158 | - &gen_op_l##width##_hypv, \ | |
| 2159 | - &gen_op_l##width##_le_hypv, \ | |
| 2160 | - &gen_op_l##width##_64_hypv, \ | |
| 2161 | - &gen_op_l##width##_le_64_hypv, \ | |
| 2162 | -}; | |
| 2163 | -#define OP_ST_TABLE(width) \ | |
| 2164 | -static GenOpFunc *gen_op_st##width[] = { \ | |
| 2165 | - &gen_op_st##width##_user, \ | |
| 2166 | - &gen_op_st##width##_le_user, \ | |
| 2167 | - &gen_op_st##width##_64_user, \ | |
| 2168 | - &gen_op_st##width##_le_64_user, \ | |
| 2169 | - &gen_op_st##width##_kernel, \ | |
| 2170 | - &gen_op_st##width##_le_kernel, \ | |
| 2171 | - &gen_op_st##width##_64_kernel, \ | |
| 2172 | - &gen_op_st##width##_le_64_kernel, \ | |
| 2173 | - &gen_op_st##width##_hypv, \ | |
| 2174 | - &gen_op_st##width##_le_hypv, \ | |
| 2175 | - &gen_op_st##width##_64_hypv, \ | |
| 2176 | - &gen_op_st##width##_le_64_hypv, \ | |
| 2177 | -}; | |
| 2178 | -/* Byte access routine are endian safe */ | |
| 2179 | -#define gen_op_stb_le_hypv gen_op_stb_64_hypv | |
| 2180 | -#define gen_op_lbz_le_hypv gen_op_lbz_64_hypv | |
| 2181 | -#define gen_op_stb_le_64_hypv gen_op_stb_64_hypv | |
| 2182 | -#define gen_op_lbz_le_64_hypv gen_op_lbz_64_hypv | |
| 2125 | +#define NB_MEM_FUNCS 12 | |
| 2183 | 2126 | #else |
| 2184 | -/* Full system - 64 bits */ | |
| 2185 | -#define OP_LD_TABLE(width) \ | |
| 2186 | -static GenOpFunc *gen_op_l##width[] = { \ | |
| 2187 | - &gen_op_l##width##_user, \ | |
| 2188 | - &gen_op_l##width##_le_user, \ | |
| 2189 | - &gen_op_l##width##_64_user, \ | |
| 2190 | - &gen_op_l##width##_le_64_user, \ | |
| 2191 | - &gen_op_l##width##_kernel, \ | |
| 2192 | - &gen_op_l##width##_le_kernel, \ | |
| 2193 | - &gen_op_l##width##_64_kernel, \ | |
| 2194 | - &gen_op_l##width##_le_64_kernel, \ | |
| 2195 | -}; | |
| 2196 | -#define OP_ST_TABLE(width) \ | |
| 2197 | -static GenOpFunc *gen_op_st##width[] = { \ | |
| 2198 | - &gen_op_st##width##_user, \ | |
| 2199 | - &gen_op_st##width##_le_user, \ | |
| 2200 | - &gen_op_st##width##_64_user, \ | |
| 2201 | - &gen_op_st##width##_le_64_user, \ | |
| 2202 | - &gen_op_st##width##_kernel, \ | |
| 2203 | - &gen_op_st##width##_le_kernel, \ | |
| 2204 | - &gen_op_st##width##_64_kernel, \ | |
| 2205 | - &gen_op_st##width##_le_64_kernel, \ | |
| 2206 | -}; | |
| 2127 | +#define NB_MEM_FUNCS 6 | |
| 2207 | 2128 | #endif |
| 2129 | +#define GEN_MEM_FUNCS(name) \ | |
| 2130 | + _GEN_MEM_FUNCS(name, user), \ | |
| 2131 | + _GEN_MEM_FUNCS(name, kernel), \ | |
| 2132 | + _GEN_MEM_FUNCS(name, hypv) | |
| 2133 | +#endif | |
| 2134 | + | |
| 2135 | +/*** Integer load ***/ | |
| 2136 | +#define op_ldst(name) (*gen_op_##name[ctx->mem_idx])() | |
| 2208 | 2137 | /* Byte access routine are endian safe */ |
| 2209 | -#define gen_op_stb_le_64_user gen_op_stb_64_user | |
| 2138 | +#define gen_op_lbz_le_raw gen_op_lbz_raw | |
| 2139 | +#define gen_op_lbz_le_user gen_op_lbz_user | |
| 2140 | +#define gen_op_lbz_le_kernel gen_op_lbz_kernel | |
| 2141 | +#define gen_op_lbz_le_hypv gen_op_lbz_hypv | |
| 2142 | +#define gen_op_lbz_le_64_raw gen_op_lbz_64_raw | |
| 2210 | 2143 | #define gen_op_lbz_le_64_user gen_op_lbz_64_user |
| 2211 | -#define gen_op_stb_le_64_kernel gen_op_stb_64_kernel | |
| 2212 | 2144 | #define gen_op_lbz_le_64_kernel gen_op_lbz_64_kernel |
| 2213 | -#else | |
| 2214 | -/* Full system - 32 bits */ | |
| 2145 | +#define gen_op_lbz_le_64_hypv gen_op_lbz_64_hypv | |
| 2146 | +#define gen_op_stb_le_raw gen_op_stb_raw | |
| 2147 | +#define gen_op_stb_le_user gen_op_stb_user | |
| 2148 | +#define gen_op_stb_le_kernel gen_op_stb_kernel | |
| 2149 | +#define gen_op_stb_le_hypv gen_op_stb_hypv | |
| 2150 | +#define gen_op_stb_le_64_raw gen_op_stb_64_raw | |
| 2151 | +#define gen_op_stb_le_64_user gen_op_stb_64_user | |
| 2152 | +#define gen_op_stb_le_64_kernel gen_op_stb_64_kernel | |
| 2153 | +#define gen_op_stb_le_64_hypv gen_op_stb_64_hypv | |
| 2215 | 2154 | #define OP_LD_TABLE(width) \ |
| 2216 | -static GenOpFunc *gen_op_l##width[] = { \ | |
| 2217 | - &gen_op_l##width##_user, \ | |
| 2218 | - &gen_op_l##width##_le_user, \ | |
| 2219 | - &gen_op_l##width##_kernel, \ | |
| 2220 | - &gen_op_l##width##_le_kernel, \ | |
| 2155 | +static GenOpFunc *gen_op_l##width[NB_MEM_FUNCS] = { \ | |
| 2156 | + GEN_MEM_FUNCS(l##width), \ | |
| 2221 | 2157 | }; |
| 2222 | 2158 | #define OP_ST_TABLE(width) \ |
| 2223 | -static GenOpFunc *gen_op_st##width[] = { \ | |
| 2224 | - &gen_op_st##width##_user, \ | |
| 2225 | - &gen_op_st##width##_le_user, \ | |
| 2226 | - &gen_op_st##width##_kernel, \ | |
| 2227 | - &gen_op_st##width##_le_kernel, \ | |
| 2159 | +static GenOpFunc *gen_op_st##width[NB_MEM_FUNCS] = { \ | |
| 2160 | + GEN_MEM_FUNCS(st##width), \ | |
| 2228 | 2161 | }; |
| 2229 | -#endif | |
| 2230 | -/* Byte access routine are endian safe */ | |
| 2231 | -#define gen_op_stb_le_user gen_op_stb_user | |
| 2232 | -#define gen_op_lbz_le_user gen_op_lbz_user | |
| 2233 | -#define gen_op_stb_le_kernel gen_op_stb_kernel | |
| 2234 | -#define gen_op_lbz_le_kernel gen_op_lbz_kernel | |
| 2235 | -#endif | |
| 2236 | 2162 | |
| 2237 | 2163 | #define GEN_LD(width, opc, type) \ |
| 2238 | 2164 | GEN_HANDLER(l##width, opc, 0xFF, 0xFF, 0x00000000, type) \ |
| ... | ... | @@ -2487,75 +2413,12 @@ GEN_STX(wbr, 0x16, 0x14, PPC_INTEGER); |
| 2487 | 2413 | |
| 2488 | 2414 | /*** Integer load and store multiple ***/ |
| 2489 | 2415 | #define op_ldstm(name, reg) (*gen_op_##name[ctx->mem_idx])(reg) |
| 2490 | -#if defined(CONFIG_USER_ONLY) | |
| 2491 | -/* User-mode only */ | |
| 2492 | -static GenOpFunc1 *gen_op_lmw[] = { | |
| 2493 | - &gen_op_lmw_raw, | |
| 2494 | - &gen_op_lmw_le_raw, | |
| 2495 | -#if defined(TARGET_PPC64) | |
| 2496 | - &gen_op_lmw_64_raw, | |
| 2497 | - &gen_op_lmw_le_64_raw, | |
| 2498 | -#endif | |
| 2416 | +static GenOpFunc1 *gen_op_lmw[NB_MEM_FUNCS] = { | |
| 2417 | + GEN_MEM_FUNCS(lmw), | |
| 2499 | 2418 | }; |
| 2500 | -static GenOpFunc1 *gen_op_stmw[] = { | |
| 2501 | - &gen_op_stmw_raw, | |
| 2502 | - &gen_op_stmw_le_raw, | |
| 2503 | -#if defined(TARGET_PPC64) | |
| 2504 | - &gen_op_stmw_64_raw, | |
| 2505 | - &gen_op_stmw_le_64_raw, | |
| 2506 | -#endif | |
| 2419 | +static GenOpFunc1 *gen_op_stmw[NB_MEM_FUNCS] = { | |
| 2420 | + GEN_MEM_FUNCS(stmw), | |
| 2507 | 2421 | }; |
| 2508 | -#else | |
| 2509 | -#if defined(TARGET_PPC64) | |
| 2510 | -/* Full system - 64 bits mode */ | |
| 2511 | -static GenOpFunc1 *gen_op_lmw[] = { | |
| 2512 | - &gen_op_lmw_user, | |
| 2513 | - &gen_op_lmw_le_user, | |
| 2514 | - &gen_op_lmw_64_user, | |
| 2515 | - &gen_op_lmw_le_64_user, | |
| 2516 | - &gen_op_lmw_kernel, | |
| 2517 | - &gen_op_lmw_le_kernel, | |
| 2518 | - &gen_op_lmw_64_kernel, | |
| 2519 | - &gen_op_lmw_le_64_kernel, | |
| 2520 | -#if defined(TARGET_PPC64H) | |
| 2521 | - &gen_op_lmw_hypv, | |
| 2522 | - &gen_op_lmw_le_hypv, | |
| 2523 | - &gen_op_lmw_64_hypv, | |
| 2524 | - &gen_op_lmw_le_64_hypv, | |
| 2525 | -#endif | |
| 2526 | -}; | |
| 2527 | -static GenOpFunc1 *gen_op_stmw[] = { | |
| 2528 | - &gen_op_stmw_user, | |
| 2529 | - &gen_op_stmw_le_user, | |
| 2530 | - &gen_op_stmw_64_user, | |
| 2531 | - &gen_op_stmw_le_64_user, | |
| 2532 | - &gen_op_stmw_kernel, | |
| 2533 | - &gen_op_stmw_le_kernel, | |
| 2534 | - &gen_op_stmw_64_kernel, | |
| 2535 | - &gen_op_stmw_le_64_kernel, | |
| 2536 | -#if defined(TARGET_PPC64H) | |
| 2537 | - &gen_op_stmw_hypv, | |
| 2538 | - &gen_op_stmw_le_hypv, | |
| 2539 | - &gen_op_stmw_64_hypv, | |
| 2540 | - &gen_op_stmw_le_64_hypv, | |
| 2541 | -#endif | |
| 2542 | -}; | |
| 2543 | -#else | |
| 2544 | -/* Full system - 32 bits mode */ | |
| 2545 | -static GenOpFunc1 *gen_op_lmw[] = { | |
| 2546 | - &gen_op_lmw_user, | |
| 2547 | - &gen_op_lmw_le_user, | |
| 2548 | - &gen_op_lmw_kernel, | |
| 2549 | - &gen_op_lmw_le_kernel, | |
| 2550 | -}; | |
| 2551 | -static GenOpFunc1 *gen_op_stmw[] = { | |
| 2552 | - &gen_op_stmw_user, | |
| 2553 | - &gen_op_stmw_le_user, | |
| 2554 | - &gen_op_stmw_kernel, | |
| 2555 | - &gen_op_stmw_le_kernel, | |
| 2556 | -}; | |
| 2557 | -#endif | |
| 2558 | -#endif | |
| 2559 | 2422 | |
| 2560 | 2423 | /* lmw */ |
| 2561 | 2424 | GEN_HANDLER(lmw, 0x2E, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) |
| ... | ... | @@ -2578,105 +2441,15 @@ GEN_HANDLER(stmw, 0x2F, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) |
| 2578 | 2441 | /*** Integer load and store strings ***/ |
| 2579 | 2442 | #define op_ldsts(name, start) (*gen_op_##name[ctx->mem_idx])(start) |
| 2580 | 2443 | #define op_ldstsx(name, rd, ra, rb) (*gen_op_##name[ctx->mem_idx])(rd, ra, rb) |
| 2581 | -#if defined(CONFIG_USER_ONLY) | |
| 2582 | -/* User-mode only */ | |
| 2583 | -static GenOpFunc1 *gen_op_lswi[] = { | |
| 2584 | - &gen_op_lswi_raw, | |
| 2585 | - &gen_op_lswi_le_raw, | |
| 2586 | -#if defined(TARGET_PPC64) | |
| 2587 | - &gen_op_lswi_64_raw, | |
| 2588 | - &gen_op_lswi_le_64_raw, | |
| 2589 | -#endif | |
| 2590 | -}; | |
| 2591 | -static GenOpFunc3 *gen_op_lswx[] = { | |
| 2592 | - &gen_op_lswx_raw, | |
| 2593 | - &gen_op_lswx_le_raw, | |
| 2594 | -#if defined(TARGET_PPC64) | |
| 2595 | - &gen_op_lswx_64_raw, | |
| 2596 | - &gen_op_lswx_le_64_raw, | |
| 2597 | -#endif | |
| 2444 | +static GenOpFunc1 *gen_op_lswi[NB_MEM_FUNCS] = { | |
| 2445 | + GEN_MEM_FUNCS(lswi), | |
| 2598 | 2446 | }; |
| 2599 | -static GenOpFunc1 *gen_op_stsw[] = { | |
| 2600 | - &gen_op_stsw_raw, | |
| 2601 | - &gen_op_stsw_le_raw, | |
| 2602 | -#if defined(TARGET_PPC64) | |
| 2603 | - &gen_op_stsw_64_raw, | |
| 2604 | - &gen_op_stsw_le_64_raw, | |
| 2605 | -#endif | |
| 2606 | -}; | |
| 2607 | -#else | |
| 2608 | -#if defined(TARGET_PPC64) | |
| 2609 | -/* Full system - 64 bits mode */ | |
| 2610 | -static GenOpFunc1 *gen_op_lswi[] = { | |
| 2611 | - &gen_op_lswi_user, | |
| 2612 | - &gen_op_lswi_le_user, | |
| 2613 | - &gen_op_lswi_64_user, | |
| 2614 | - &gen_op_lswi_le_64_user, | |
| 2615 | - &gen_op_lswi_kernel, | |
| 2616 | - &gen_op_lswi_le_kernel, | |
| 2617 | - &gen_op_lswi_64_kernel, | |
| 2618 | - &gen_op_lswi_le_64_kernel, | |
| 2619 | -#if defined(TARGET_PPC64H) | |
| 2620 | - &gen_op_lswi_hypv, | |
| 2621 | - &gen_op_lswi_le_hypv, | |
| 2622 | - &gen_op_lswi_64_hypv, | |
| 2623 | - &gen_op_lswi_le_64_hypv, | |
| 2624 | -#endif | |
| 2447 | +static GenOpFunc3 *gen_op_lswx[NB_MEM_FUNCS] = { | |
| 2448 | + GEN_MEM_FUNCS(lswx), | |
| 2625 | 2449 | }; |
| 2626 | -static GenOpFunc3 *gen_op_lswx[] = { | |
| 2627 | - &gen_op_lswx_user, | |
| 2628 | - &gen_op_lswx_le_user, | |
| 2629 | - &gen_op_lswx_64_user, | |
| 2630 | - &gen_op_lswx_le_64_user, | |
| 2631 | - &gen_op_lswx_kernel, | |
| 2632 | - &gen_op_lswx_le_kernel, | |
| 2633 | - &gen_op_lswx_64_kernel, | |
| 2634 | - &gen_op_lswx_le_64_kernel, | |
| 2635 | -#if defined(TARGET_PPC64H) | |
| 2636 | - &gen_op_lswx_hypv, | |
| 2637 | - &gen_op_lswx_le_hypv, | |
| 2638 | - &gen_op_lswx_64_hypv, | |
| 2639 | - &gen_op_lswx_le_64_hypv, | |
| 2640 | -#endif | |
| 2641 | -}; | |
| 2642 | -static GenOpFunc1 *gen_op_stsw[] = { | |
| 2643 | - &gen_op_stsw_user, | |
| 2644 | - &gen_op_stsw_le_user, | |
| 2645 | - &gen_op_stsw_64_user, | |
| 2646 | - &gen_op_stsw_le_64_user, | |
| 2647 | - &gen_op_stsw_kernel, | |
| 2648 | - &gen_op_stsw_le_kernel, | |
| 2649 | - &gen_op_stsw_64_kernel, | |
| 2650 | - &gen_op_stsw_le_64_kernel, | |
| 2651 | -#if defined(TARGET_PPC64H) | |
| 2652 | - &gen_op_stsw_hypv, | |
| 2653 | - &gen_op_stsw_le_hypv, | |
| 2654 | - &gen_op_stsw_64_hypv, | |
| 2655 | - &gen_op_stsw_le_64_hypv, | |
| 2656 | -#endif | |
| 2657 | -}; | |
| 2658 | -#else | |
| 2659 | -/* Full system - 32 bits mode */ | |
| 2660 | -static GenOpFunc1 *gen_op_lswi[] = { | |
| 2661 | - &gen_op_lswi_user, | |
| 2662 | - &gen_op_lswi_le_user, | |
| 2663 | - &gen_op_lswi_kernel, | |
| 2664 | - &gen_op_lswi_le_kernel, | |
| 2450 | +static GenOpFunc1 *gen_op_stsw[NB_MEM_FUNCS] = { | |
| 2451 | + GEN_MEM_FUNCS(stsw), | |
| 2665 | 2452 | }; |
| 2666 | -static GenOpFunc3 *gen_op_lswx[] = { | |
| 2667 | - &gen_op_lswx_user, | |
| 2668 | - &gen_op_lswx_le_user, | |
| 2669 | - &gen_op_lswx_kernel, | |
| 2670 | - &gen_op_lswx_le_kernel, | |
| 2671 | -}; | |
| 2672 | -static GenOpFunc1 *gen_op_stsw[] = { | |
| 2673 | - &gen_op_stsw_user, | |
| 2674 | - &gen_op_stsw_le_user, | |
| 2675 | - &gen_op_stsw_kernel, | |
| 2676 | - &gen_op_stsw_le_kernel, | |
| 2677 | -}; | |
| 2678 | -#endif | |
| 2679 | -#endif | |
| 2680 | 2453 | |
| 2681 | 2454 | /* lswi */ |
| 2682 | 2455 | /* PowerPC32 specification says we must generate an exception if |
| ... | ... | @@ -2762,75 +2535,12 @@ GEN_HANDLER(isync, 0x13, 0x16, 0x04, 0x03FFF801, PPC_MEM) |
| 2762 | 2535 | |
| 2763 | 2536 | #define op_lwarx() (*gen_op_lwarx[ctx->mem_idx])() |
| 2764 | 2537 | #define op_stwcx() (*gen_op_stwcx[ctx->mem_idx])() |
| 2765 | -#if defined(CONFIG_USER_ONLY) | |
| 2766 | -/* User-mode only */ | |
| 2767 | -static GenOpFunc *gen_op_lwarx[] = { | |
| 2768 | - &gen_op_lwarx_raw, | |
| 2769 | - &gen_op_lwarx_le_raw, | |
| 2770 | -#if defined(TARGET_PPC64) | |
| 2771 | - &gen_op_lwarx_64_raw, | |
| 2772 | - &gen_op_lwarx_le_64_raw, | |
| 2773 | -#endif | |
| 2774 | -}; | |
| 2775 | -static GenOpFunc *gen_op_stwcx[] = { | |
| 2776 | - &gen_op_stwcx_raw, | |
| 2777 | - &gen_op_stwcx_le_raw, | |
| 2778 | -#if defined(TARGET_PPC64) | |
| 2779 | - &gen_op_stwcx_64_raw, | |
| 2780 | - &gen_op_stwcx_le_64_raw, | |
| 2781 | -#endif | |
| 2538 | +static GenOpFunc *gen_op_lwarx[NB_MEM_FUNCS] = { | |
| 2539 | + GEN_MEM_FUNCS(lwarx), | |
| 2782 | 2540 | }; |
| 2783 | -#else | |
| 2784 | -#if defined(TARGET_PPC64) | |
| 2785 | -/* Full system - 64 bits mode */ | |
| 2786 | -static GenOpFunc *gen_op_lwarx[] = { | |
| 2787 | - &gen_op_lwarx_user, | |
| 2788 | - &gen_op_lwarx_le_user, | |
| 2789 | - &gen_op_lwarx_64_user, | |
| 2790 | - &gen_op_lwarx_le_64_user, | |
| 2791 | - &gen_op_lwarx_kernel, | |
| 2792 | - &gen_op_lwarx_le_kernel, | |
| 2793 | - &gen_op_lwarx_64_kernel, | |
| 2794 | - &gen_op_lwarx_le_64_kernel, | |
| 2795 | -#if defined(TARGET_PPC64H) | |
| 2796 | - &gen_op_lwarx_hypv, | |
| 2797 | - &gen_op_lwarx_le_hypv, | |
| 2798 | - &gen_op_lwarx_64_hypv, | |
| 2799 | - &gen_op_lwarx_le_64_hypv, | |
| 2800 | -#endif | |
| 2541 | +static GenOpFunc *gen_op_stwcx[NB_MEM_FUNCS] = { | |
| 2542 | + GEN_MEM_FUNCS(stwcx), | |
| 2801 | 2543 | }; |
| 2802 | -static GenOpFunc *gen_op_stwcx[] = { | |
| 2803 | - &gen_op_stwcx_user, | |
| 2804 | - &gen_op_stwcx_le_user, | |
| 2805 | - &gen_op_stwcx_64_user, | |
| 2806 | - &gen_op_stwcx_le_64_user, | |
| 2807 | - &gen_op_stwcx_kernel, | |
| 2808 | - &gen_op_stwcx_le_kernel, | |
| 2809 | - &gen_op_stwcx_64_kernel, | |
| 2810 | - &gen_op_stwcx_le_64_kernel, | |
| 2811 | -#if defined(TARGET_PPC64H) | |
| 2812 | - &gen_op_stwcx_hypv, | |
| 2813 | - &gen_op_stwcx_le_hypv, | |
| 2814 | - &gen_op_stwcx_64_hypv, | |
| 2815 | - &gen_op_stwcx_le_64_hypv, | |
| 2816 | -#endif | |
| 2817 | -}; | |
| 2818 | -#else | |
| 2819 | -/* Full system - 32 bits mode */ | |
| 2820 | -static GenOpFunc *gen_op_lwarx[] = { | |
| 2821 | - &gen_op_lwarx_user, | |
| 2822 | - &gen_op_lwarx_le_user, | |
| 2823 | - &gen_op_lwarx_kernel, | |
| 2824 | - &gen_op_lwarx_le_kernel, | |
| 2825 | -}; | |
| 2826 | -static GenOpFunc *gen_op_stwcx[] = { | |
| 2827 | - &gen_op_stwcx_user, | |
| 2828 | - &gen_op_stwcx_le_user, | |
| 2829 | - &gen_op_stwcx_kernel, | |
| 2830 | - &gen_op_stwcx_le_kernel, | |
| 2831 | -}; | |
| 2832 | -#endif | |
| 2833 | -#endif | |
| 2834 | 2544 | |
| 2835 | 2545 | /* lwarx */ |
| 2836 | 2546 | GEN_HANDLER(lwarx, 0x1F, 0x14, 0x00, 0x00000001, PPC_RES) |
| ... | ... | @@ -2855,55 +2565,12 @@ GEN_HANDLER2(stwcx_, "stwcx.", 0x1F, 0x16, 0x04, 0x00000000, PPC_RES) |
| 2855 | 2565 | #if defined(TARGET_PPC64) |
| 2856 | 2566 | #define op_ldarx() (*gen_op_ldarx[ctx->mem_idx])() |
| 2857 | 2567 | #define op_stdcx() (*gen_op_stdcx[ctx->mem_idx])() |
| 2858 | -#if defined(CONFIG_USER_ONLY) | |
| 2859 | -/* User-mode only */ | |
| 2860 | -static GenOpFunc *gen_op_ldarx[] = { | |
| 2861 | - &gen_op_ldarx_raw, | |
| 2862 | - &gen_op_ldarx_le_raw, | |
| 2863 | - &gen_op_ldarx_64_raw, | |
| 2864 | - &gen_op_ldarx_le_64_raw, | |
| 2568 | +static GenOpFunc *gen_op_ldarx[NB_MEM_FUNCS] = { | |
| 2569 | + GEN_MEM_FUNCS(ldarx), | |
| 2865 | 2570 | }; |
| 2866 | -static GenOpFunc *gen_op_stdcx[] = { | |
| 2867 | - &gen_op_stdcx_raw, | |
| 2868 | - &gen_op_stdcx_le_raw, | |
| 2869 | - &gen_op_stdcx_64_raw, | |
| 2870 | - &gen_op_stdcx_le_64_raw, | |
| 2571 | +static GenOpFunc *gen_op_stdcx[NB_MEM_FUNCS] = { | |
| 2572 | + GEN_MEM_FUNCS(stdcx), | |
| 2871 | 2573 | }; |
| 2872 | -#else | |
| 2873 | -/* Full system */ | |
| 2874 | -static GenOpFunc *gen_op_ldarx[] = { | |
| 2875 | - &gen_op_ldarx_user, | |
| 2876 | - &gen_op_ldarx_le_user, | |
| 2877 | - &gen_op_ldarx_64_user, | |
| 2878 | - &gen_op_ldarx_le_64_user, | |
| 2879 | - &gen_op_ldarx_kernel, | |
| 2880 | - &gen_op_ldarx_le_kernel, | |
| 2881 | - &gen_op_ldarx_64_kernel, | |
| 2882 | - &gen_op_ldarx_le_64_kernel, | |
| 2883 | -#if defined(TARGET_PPC64H) | |
| 2884 | - &gen_op_ldarx_hypv, | |
| 2885 | - &gen_op_ldarx_le_hypv, | |
| 2886 | - &gen_op_ldarx_64_hypv, | |
| 2887 | - &gen_op_ldarx_le_64_hypv, | |
| 2888 | -#endif | |
| 2889 | -}; | |
| 2890 | -static GenOpFunc *gen_op_stdcx[] = { | |
| 2891 | - &gen_op_stdcx_user, | |
| 2892 | - &gen_op_stdcx_le_user, | |
| 2893 | - &gen_op_stdcx_64_user, | |
| 2894 | - &gen_op_stdcx_le_64_user, | |
| 2895 | - &gen_op_stdcx_kernel, | |
| 2896 | - &gen_op_stdcx_le_kernel, | |
| 2897 | - &gen_op_stdcx_64_kernel, | |
| 2898 | - &gen_op_stdcx_le_64_kernel, | |
| 2899 | -#if defined(TARGET_PPC64H) | |
| 2900 | - &gen_op_stdcx_hypv, | |
| 2901 | - &gen_op_stdcx_le_hypv, | |
| 2902 | - &gen_op_stdcx_64_hypv, | |
| 2903 | - &gen_op_stdcx_le_64_hypv, | |
| 2904 | -#endif | |
| 2905 | -}; | |
| 2906 | -#endif | |
| 2907 | 2574 | |
| 2908 | 2575 | /* ldarx */ |
| 2909 | 2576 | GEN_HANDLER(ldarx, 0x1F, 0x14, 0x02, 0x00000001, PPC_64B) |
| ... | ... | @@ -3406,9 +3073,7 @@ GEN_HANDLER(rfid, 0x13, 0x12, 0x00, 0x03FF8001, PPC_64B) |
| 3406 | 3073 | GEN_SYNC(ctx); |
| 3407 | 3074 | #endif |
| 3408 | 3075 | } |
| 3409 | -#endif | |
| 3410 | 3076 | |
| 3411 | -#if defined(TARGET_PPC64H) | |
| 3412 | 3077 | GEN_HANDLER(hrfid, 0x13, 0x12, 0x08, 0x03FF8001, PPC_64B) |
| 3413 | 3078 | { |
| 3414 | 3079 | #if defined(CONFIG_USER_ONLY) |
| ... | ... | @@ -3542,12 +3207,9 @@ static always_inline void gen_op_mfspr (DisasContext *ctx) |
| 3542 | 3207 | uint32_t sprn = SPR(ctx->opcode); |
| 3543 | 3208 | |
| 3544 | 3209 | #if !defined(CONFIG_USER_ONLY) |
| 3545 | -#if defined(TARGET_PPC64H) | |
| 3546 | 3210 | if (ctx->supervisor == 2) |
| 3547 | 3211 | read_cb = ctx->spr_cb[sprn].hea_read; |
| 3548 | - else | |
| 3549 | -#endif | |
| 3550 | - if (ctx->supervisor) | |
| 3212 | + else if (ctx->supervisor) | |
| 3551 | 3213 | read_cb = ctx->spr_cb[sprn].oea_read; |
| 3552 | 3214 | else |
| 3553 | 3215 | #endif |
| ... | ... | @@ -3682,12 +3344,9 @@ GEN_HANDLER(mtspr, 0x1F, 0x13, 0x0E, 0x00000001, PPC_MISC) |
| 3682 | 3344 | uint32_t sprn = SPR(ctx->opcode); |
| 3683 | 3345 | |
| 3684 | 3346 | #if !defined(CONFIG_USER_ONLY) |
| 3685 | -#if defined(TARGET_PPC64H) | |
| 3686 | 3347 | if (ctx->supervisor == 2) |
| 3687 | 3348 | write_cb = ctx->spr_cb[sprn].hea_write; |
| 3688 | - else | |
| 3689 | -#endif | |
| 3690 | - if (ctx->supervisor) | |
| 3349 | + else if (ctx->supervisor) | |
| 3691 | 3350 | write_cb = ctx->spr_cb[sprn].oea_write; |
| 3692 | 3351 | else |
| 3693 | 3352 | #endif |
| ... | ... | @@ -3773,141 +3432,56 @@ GEN_HANDLER(dcbtst, 0x1F, 0x16, 0x07, 0x02000001, PPC_CACHE) |
| 3773 | 3432 | |
| 3774 | 3433 | /* dcbz */ |
| 3775 | 3434 | #define op_dcbz(n) (*gen_op_dcbz[n][ctx->mem_idx])() |
| 3776 | -#if defined(CONFIG_USER_ONLY) | |
| 3777 | -/* User-mode only */ | |
| 3778 | -static GenOpFunc *gen_op_dcbz[4][4] = { | |
| 3779 | - { | |
| 3780 | - &gen_op_dcbz_l32_raw, | |
| 3781 | - &gen_op_dcbz_l32_raw, | |
| 3782 | -#if defined(TARGET_PPC64) | |
| 3783 | - &gen_op_dcbz_l32_64_raw, | |
| 3784 | - &gen_op_dcbz_l32_64_raw, | |
| 3785 | -#endif | |
| 3786 | - }, | |
| 3787 | - { | |
| 3788 | - &gen_op_dcbz_l64_raw, | |
| 3789 | - &gen_op_dcbz_l64_raw, | |
| 3790 | -#if defined(TARGET_PPC64) | |
| 3791 | - &gen_op_dcbz_l64_64_raw, | |
| 3792 | - &gen_op_dcbz_l64_64_raw, | |
| 3793 | -#endif | |
| 3794 | - }, | |
| 3795 | - { | |
| 3796 | - &gen_op_dcbz_l128_raw, | |
| 3797 | - &gen_op_dcbz_l128_raw, | |
| 3798 | -#if defined(TARGET_PPC64) | |
| 3799 | - &gen_op_dcbz_l128_64_raw, | |
| 3800 | - &gen_op_dcbz_l128_64_raw, | |
| 3801 | -#endif | |
| 3802 | - }, | |
| 3803 | - { | |
| 3804 | - &gen_op_dcbz_raw, | |
| 3805 | - &gen_op_dcbz_raw, | |
| 3806 | -#if defined(TARGET_PPC64) | |
| 3807 | - &gen_op_dcbz_64_raw, | |
| 3808 | - &gen_op_dcbz_64_raw, | |
| 3809 | -#endif | |
| 3810 | - }, | |
| 3811 | -}; | |
| 3812 | -#else | |
| 3813 | -#if defined(TARGET_PPC64) | |
| 3814 | -/* Full system - 64 bits mode */ | |
| 3815 | -static GenOpFunc *gen_op_dcbz[4][12] = { | |
| 3435 | +static GenOpFunc *gen_op_dcbz[4][NB_MEM_FUNCS] = { | |
| 3436 | + /* 32 bytes cache line size */ | |
| 3816 | 3437 | { |
| 3817 | - &gen_op_dcbz_l32_user, | |
| 3818 | - &gen_op_dcbz_l32_user, | |
| 3819 | - &gen_op_dcbz_l32_64_user, | |
| 3820 | - &gen_op_dcbz_l32_64_user, | |
| 3821 | - &gen_op_dcbz_l32_kernel, | |
| 3822 | - &gen_op_dcbz_l32_kernel, | |
| 3823 | - &gen_op_dcbz_l32_64_kernel, | |
| 3824 | - &gen_op_dcbz_l32_64_kernel, | |
| 3825 | -#if defined(TARGET_PPC64H) | |
| 3826 | - &gen_op_dcbz_l32_hypv, | |
| 3827 | - &gen_op_dcbz_l32_hypv, | |
| 3828 | - &gen_op_dcbz_l32_64_hypv, | |
| 3829 | - &gen_op_dcbz_l32_64_hypv, | |
| 3830 | -#endif | |
| 3438 | +#define gen_op_dcbz_l32_le_raw gen_op_dcbz_l32_raw | |
| 3439 | +#define gen_op_dcbz_l32_le_user gen_op_dcbz_l32_user | |
| 3440 | +#define gen_op_dcbz_l32_le_kernel gen_op_dcbz_l32_kernel | |
| 3441 | +#define gen_op_dcbz_l32_le_hypv gen_op_dcbz_l32_hypv | |
| 3442 | +#define gen_op_dcbz_l32_le_64_raw gen_op_dcbz_l32_64_raw | |
| 3443 | +#define gen_op_dcbz_l32_le_64_user gen_op_dcbz_l32_64_user | |
| 3444 | +#define gen_op_dcbz_l32_le_64_kernel gen_op_dcbz_l32_64_kernel | |
| 3445 | +#define gen_op_dcbz_l32_le_64_hypv gen_op_dcbz_l32_64_hypv | |
| 3446 | + GEN_MEM_FUNCS(dcbz_l32), | |
| 3831 | 3447 | }, |
| 3448 | + /* 64 bytes cache line size */ | |
| 3832 | 3449 | { |
| 3833 | - &gen_op_dcbz_l64_user, | |
| 3834 | - &gen_op_dcbz_l64_user, | |
| 3835 | - &gen_op_dcbz_l64_64_user, | |
| 3836 | - &gen_op_dcbz_l64_64_user, | |
| 3837 | - &gen_op_dcbz_l64_kernel, | |
| 3838 | - &gen_op_dcbz_l64_kernel, | |
| 3839 | - &gen_op_dcbz_l64_64_kernel, | |
| 3840 | - &gen_op_dcbz_l64_64_kernel, | |
| 3841 | -#if defined(TARGET_PPC64H) | |
| 3842 | - &gen_op_dcbz_l64_hypv, | |
| 3843 | - &gen_op_dcbz_l64_hypv, | |
| 3844 | - &gen_op_dcbz_l64_64_hypv, | |
| 3845 | - &gen_op_dcbz_l64_64_hypv, | |
| 3846 | -#endif | |
| 3450 | +#define gen_op_dcbz_l64_le_raw gen_op_dcbz_l64_raw | |
| 3451 | +#define gen_op_dcbz_l64_le_user gen_op_dcbz_l64_user | |
| 3452 | +#define gen_op_dcbz_l64_le_kernel gen_op_dcbz_l64_kernel | |
| 3453 | +#define gen_op_dcbz_l64_le_hypv gen_op_dcbz_l64_hypv | |
| 3454 | +#define gen_op_dcbz_l64_le_64_raw gen_op_dcbz_l64_64_raw | |
| 3455 | +#define gen_op_dcbz_l64_le_64_user gen_op_dcbz_l64_64_user | |
| 3456 | +#define gen_op_dcbz_l64_le_64_kernel gen_op_dcbz_l64_64_kernel | |
| 3457 | +#define gen_op_dcbz_l64_le_64_hypv gen_op_dcbz_l64_64_hypv | |
| 3458 | + GEN_MEM_FUNCS(dcbz_l64), | |
| 3847 | 3459 | }, |
| 3460 | + /* 128 bytes cache line size */ | |
| 3848 | 3461 | { |
| 3849 | - &gen_op_dcbz_l128_user, | |
| 3850 | - &gen_op_dcbz_l128_user, | |
| 3851 | - &gen_op_dcbz_l128_64_user, | |
| 3852 | - &gen_op_dcbz_l128_64_user, | |
| 3853 | - &gen_op_dcbz_l128_kernel, | |
| 3854 | - &gen_op_dcbz_l128_kernel, | |
| 3855 | - &gen_op_dcbz_l128_64_kernel, | |
| 3856 | - &gen_op_dcbz_l128_64_kernel, | |
| 3857 | -#if defined(TARGET_PPC64H) | |
| 3858 | - &gen_op_dcbz_l128_hypv, | |
| 3859 | - &gen_op_dcbz_l128_hypv, | |
| 3860 | - &gen_op_dcbz_l128_64_hypv, | |
| 3861 | - &gen_op_dcbz_l128_64_hypv, | |
| 3862 | -#endif | |
| 3462 | +#define gen_op_dcbz_l128_le_raw gen_op_dcbz_l128_raw | |
| 3463 | +#define gen_op_dcbz_l128_le_user gen_op_dcbz_l128_user | |
| 3464 | +#define gen_op_dcbz_l128_le_kernel gen_op_dcbz_l128_kernel | |
| 3465 | +#define gen_op_dcbz_l128_le_hypv gen_op_dcbz_l128_hypv | |
| 3466 | +#define gen_op_dcbz_l128_le_64_raw gen_op_dcbz_l128_64_raw | |
| 3467 | +#define gen_op_dcbz_l128_le_64_user gen_op_dcbz_l128_64_user | |
| 3468 | +#define gen_op_dcbz_l128_le_64_kernel gen_op_dcbz_l128_64_kernel | |
| 3469 | +#define gen_op_dcbz_l128_le_64_hypv gen_op_dcbz_l128_64_hypv | |
| 3470 | + GEN_MEM_FUNCS(dcbz_l128), | |
| 3863 | 3471 | }, |
| 3472 | + /* tunable cache line size */ | |
| 3864 | 3473 | { |
| 3865 | - &gen_op_dcbz_user, | |
| 3866 | - &gen_op_dcbz_user, | |
| 3867 | - &gen_op_dcbz_64_user, | |
| 3868 | - &gen_op_dcbz_64_user, | |
| 3869 | - &gen_op_dcbz_kernel, | |
| 3870 | - &gen_op_dcbz_kernel, | |
| 3871 | - &gen_op_dcbz_64_kernel, | |
| 3872 | - &gen_op_dcbz_64_kernel, | |
| 3873 | -#if defined(TARGET_PPC64H) | |
| 3874 | - &gen_op_dcbz_hypv, | |
| 3875 | - &gen_op_dcbz_hypv, | |
| 3876 | - &gen_op_dcbz_64_hypv, | |
| 3877 | - &gen_op_dcbz_64_hypv, | |
| 3878 | -#endif | |
| 3474 | +#define gen_op_dcbz_le_raw gen_op_dcbz_raw | |
| 3475 | +#define gen_op_dcbz_le_user gen_op_dcbz_user | |
| 3476 | +#define gen_op_dcbz_le_kernel gen_op_dcbz_kernel | |
| 3477 | +#define gen_op_dcbz_le_hypv gen_op_dcbz_hypv | |
| 3478 | +#define gen_op_dcbz_le_64_raw gen_op_dcbz_64_raw | |
| 3479 | +#define gen_op_dcbz_le_64_user gen_op_dcbz_64_user | |
| 3480 | +#define gen_op_dcbz_le_64_kernel gen_op_dcbz_64_kernel | |
| 3481 | +#define gen_op_dcbz_le_64_hypv gen_op_dcbz_64_hypv | |
| 3482 | + GEN_MEM_FUNCS(dcbz), | |
| 3879 | 3483 | }, |
| 3880 | 3484 | }; |
| 3881 | -#else | |
| 3882 | -/* Full system - 32 bits mode */ | |
| 3883 | -static GenOpFunc *gen_op_dcbz[4][4] = { | |
| 3884 | - { | |
| 3885 | - &gen_op_dcbz_l32_user, | |
| 3886 | - &gen_op_dcbz_l32_user, | |
| 3887 | - &gen_op_dcbz_l32_kernel, | |
| 3888 | - &gen_op_dcbz_l32_kernel, | |
| 3889 | - }, | |
| 3890 | - { | |
| 3891 | - &gen_op_dcbz_l64_user, | |
| 3892 | - &gen_op_dcbz_l64_user, | |
| 3893 | - &gen_op_dcbz_l64_kernel, | |
| 3894 | - &gen_op_dcbz_l64_kernel, | |
| 3895 | - }, | |
| 3896 | - { | |
| 3897 | - &gen_op_dcbz_l128_user, | |
| 3898 | - &gen_op_dcbz_l128_user, | |
| 3899 | - &gen_op_dcbz_l128_kernel, | |
| 3900 | - &gen_op_dcbz_l128_kernel, | |
| 3901 | - }, | |
| 3902 | - { | |
| 3903 | - &gen_op_dcbz_user, | |
| 3904 | - &gen_op_dcbz_user, | |
| 3905 | - &gen_op_dcbz_kernel, | |
| 3906 | - &gen_op_dcbz_kernel, | |
| 3907 | - }, | |
| 3908 | -}; | |
| 3909 | -#endif | |
| 3910 | -#endif | |
| 3911 | 3485 | |
| 3912 | 3486 | static always_inline void handler_dcbz (DisasContext *ctx, |
| 3913 | 3487 | int dcache_line_size) |
| ... | ... | @@ -3950,45 +3524,17 @@ GEN_HANDLER2(dcbz_970, "dcbz", 0x1F, 0x16, 0x1F, 0x03C00001, PPC_CACHE_DCBZT) |
| 3950 | 3524 | |
| 3951 | 3525 | /* icbi */ |
| 3952 | 3526 | #define op_icbi() (*gen_op_icbi[ctx->mem_idx])() |
| 3953 | -#if defined(CONFIG_USER_ONLY) | |
| 3954 | -/* User-mode only */ | |
| 3955 | -static GenOpFunc *gen_op_icbi[] = { | |
| 3956 | - &gen_op_icbi_raw, | |
| 3957 | - &gen_op_icbi_raw, | |
| 3958 | -#if defined(TARGET_PPC64) | |
| 3959 | - &gen_op_icbi_64_raw, | |
| 3960 | - &gen_op_icbi_64_raw, | |
| 3961 | -#endif | |
| 3962 | -}; | |
| 3963 | -#else | |
| 3964 | -/* Full system - 64 bits mode */ | |
| 3965 | -#if defined(TARGET_PPC64) | |
| 3966 | -static GenOpFunc *gen_op_icbi[] = { | |
| 3967 | - &gen_op_icbi_user, | |
| 3968 | - &gen_op_icbi_user, | |
| 3969 | - &gen_op_icbi_64_user, | |
| 3970 | - &gen_op_icbi_64_user, | |
| 3971 | - &gen_op_icbi_kernel, | |
| 3972 | - &gen_op_icbi_kernel, | |
| 3973 | - &gen_op_icbi_64_kernel, | |
| 3974 | - &gen_op_icbi_64_kernel, | |
| 3975 | -#if defined(TARGET_PPC64H) | |
| 3976 | - &gen_op_icbi_hypv, | |
| 3977 | - &gen_op_icbi_hypv, | |
| 3978 | - &gen_op_icbi_64_hypv, | |
| 3979 | - &gen_op_icbi_64_hypv, | |
| 3980 | -#endif | |
| 3981 | -}; | |
| 3982 | -#else | |
| 3983 | -/* Full system - 32 bits mode */ | |
| 3984 | -static GenOpFunc *gen_op_icbi[] = { | |
| 3985 | - &gen_op_icbi_user, | |
| 3986 | - &gen_op_icbi_user, | |
| 3987 | - &gen_op_icbi_kernel, | |
| 3988 | - &gen_op_icbi_kernel, | |
| 3527 | +#define gen_op_icbi_le_raw gen_op_icbi_raw | |
| 3528 | +#define gen_op_icbi_le_user gen_op_icbi_user | |
| 3529 | +#define gen_op_icbi_le_kernel gen_op_icbi_kernel | |
| 3530 | +#define gen_op_icbi_le_hypv gen_op_icbi_hypv | |
| 3531 | +#define gen_op_icbi_le_64_raw gen_op_icbi_64_raw | |
| 3532 | +#define gen_op_icbi_le_64_user gen_op_icbi_64_user | |
| 3533 | +#define gen_op_icbi_le_64_kernel gen_op_icbi_64_kernel | |
| 3534 | +#define gen_op_icbi_le_64_hypv gen_op_icbi_64_hypv | |
| 3535 | +static GenOpFunc *gen_op_icbi[NB_MEM_FUNCS] = { | |
| 3536 | + GEN_MEM_FUNCS(icbi), | |
| 3989 | 3537 | }; |
| 3990 | -#endif | |
| 3991 | -#endif | |
| 3992 | 3538 | |
| 3993 | 3539 | GEN_HANDLER(icbi, 0x1F, 0x16, 0x1E, 0x03E00001, PPC_CACHE_ICBI) |
| 3994 | 3540 | { |
| ... | ... | @@ -4239,75 +3785,12 @@ GEN_HANDLER(slbie, 0x1F, 0x12, 0x0D, 0x03FF0001, PPC_SLBI) |
| 4239 | 3785 | /* Optional: */ |
| 4240 | 3786 | #define op_eciwx() (*gen_op_eciwx[ctx->mem_idx])() |
| 4241 | 3787 | #define op_ecowx() (*gen_op_ecowx[ctx->mem_idx])() |
| 4242 | -#if defined(CONFIG_USER_ONLY) | |
| 4243 | -/* User-mode only */ | |
| 4244 | -static GenOpFunc *gen_op_eciwx[] = { | |
| 4245 | - &gen_op_eciwx_raw, | |
| 4246 | - &gen_op_eciwx_le_raw, | |
| 4247 | -#if defined(TARGET_PPC64) | |
| 4248 | - &gen_op_eciwx_64_raw, | |
| 4249 | - &gen_op_eciwx_le_64_raw, | |
| 4250 | -#endif | |
| 3788 | +static GenOpFunc *gen_op_eciwx[NB_MEM_FUNCS] = { | |
| 3789 | + GEN_MEM_FUNCS(eciwx), | |
| 4251 | 3790 | }; |
| 4252 | -static GenOpFunc *gen_op_ecowx[] = { | |
| 4253 | - &gen_op_ecowx_raw, | |
| 4254 | - &gen_op_ecowx_le_raw, | |
| 4255 | -#if defined(TARGET_PPC64) | |
| 4256 | - &gen_op_ecowx_64_raw, | |
| 4257 | - &gen_op_ecowx_le_64_raw, | |
| 4258 | -#endif | |
| 3791 | +static GenOpFunc *gen_op_ecowx[NB_MEM_FUNCS] = { | |
| 3792 | + GEN_MEM_FUNCS(ecowx), | |
| 4259 | 3793 | }; |
| 4260 | -#else | |
| 4261 | -#if defined(TARGET_PPC64) | |
| 4262 | -/* Full system - 64 bits mode */ | |
| 4263 | -static GenOpFunc *gen_op_eciwx[] = { | |
| 4264 | - &gen_op_eciwx_user, | |
| 4265 | - &gen_op_eciwx_le_user, | |
| 4266 | - &gen_op_eciwx_64_user, | |
| 4267 | - &gen_op_eciwx_le_64_user, | |
| 4268 | - &gen_op_eciwx_kernel, | |
| 4269 | - &gen_op_eciwx_le_kernel, | |
| 4270 | - &gen_op_eciwx_64_kernel, | |
| 4271 | - &gen_op_eciwx_le_64_kernel, | |
| 4272 | -#if defined(TARGET_PPC64H) | |
| 4273 | - &gen_op_eciwx_hypv, | |
| 4274 | - &gen_op_eciwx_le_hypv, | |
| 4275 | - &gen_op_eciwx_64_hypv, | |
| 4276 | - &gen_op_eciwx_le_64_hypv, | |
| 4277 | -#endif | |
| 4278 | -}; | |
| 4279 | -static GenOpFunc *gen_op_ecowx[] = { | |
| 4280 | - &gen_op_ecowx_user, | |
| 4281 | - &gen_op_ecowx_le_user, | |
| 4282 | - &gen_op_ecowx_64_user, | |
| 4283 | - &gen_op_ecowx_le_64_user, | |
| 4284 | - &gen_op_ecowx_kernel, | |
| 4285 | - &gen_op_ecowx_le_kernel, | |
| 4286 | - &gen_op_ecowx_64_kernel, | |
| 4287 | - &gen_op_ecowx_le_64_kernel, | |
| 4288 | -#if defined(TARGET_PPC64H) | |
| 4289 | - &gen_op_ecowx_hypv, | |
| 4290 | - &gen_op_ecowx_le_hypv, | |
| 4291 | - &gen_op_ecowx_64_hypv, | |
| 4292 | - &gen_op_ecowx_le_64_hypv, | |
| 4293 | -#endif | |
| 4294 | -}; | |
| 4295 | -#else | |
| 4296 | -/* Full system - 32 bits mode */ | |
| 4297 | -static GenOpFunc *gen_op_eciwx[] = { | |
| 4298 | - &gen_op_eciwx_user, | |
| 4299 | - &gen_op_eciwx_le_user, | |
| 4300 | - &gen_op_eciwx_kernel, | |
| 4301 | - &gen_op_eciwx_le_kernel, | |
| 4302 | -}; | |
| 4303 | -static GenOpFunc *gen_op_ecowx[] = { | |
| 4304 | - &gen_op_ecowx_user, | |
| 4305 | - &gen_op_ecowx_le_user, | |
| 4306 | - &gen_op_ecowx_kernel, | |
| 4307 | - &gen_op_ecowx_le_kernel, | |
| 4308 | -}; | |
| 4309 | -#endif | |
| 4310 | -#endif | |
| 4311 | 3794 | |
| 4312 | 3795 | /* eciwx */ |
| 4313 | 3796 | GEN_HANDLER(eciwx, 0x1F, 0x16, 0x0D, 0x00000001, PPC_EXTERN) |
| ... | ... | @@ -4432,22 +3915,26 @@ GEN_HANDLER(dozi, 0x09, 0xFF, 0xFF, 0x00000000, PPC_POWER_BR) |
| 4432 | 3915 | gen_op_store_T0_gpr(rD(ctx->opcode)); |
| 4433 | 3916 | } |
| 4434 | 3917 | |
| 4435 | -/* As lscbx load from memory byte after byte, it's always endian safe */ | |
| 3918 | +/* As lscbx load from memory byte after byte, it's always endian safe. | |
| 3919 | + * Original POWER is 32 bits only, define 64 bits ops as 32 bits ones | |
| 3920 | + */ | |
| 4436 | 3921 | #define op_POWER_lscbx(start, ra, rb) \ |
| 4437 | 3922 | (*gen_op_POWER_lscbx[ctx->mem_idx])(start, ra, rb) |
| 4438 | -#if defined(CONFIG_USER_ONLY) | |
| 4439 | -static GenOpFunc3 *gen_op_POWER_lscbx[] = { | |
| 4440 | - &gen_op_POWER_lscbx_raw, | |
| 4441 | - &gen_op_POWER_lscbx_raw, | |
| 3923 | +#define gen_op_POWER_lscbx_64_raw gen_op_POWER_lscbx_raw | |
| 3924 | +#define gen_op_POWER_lscbx_64_user gen_op_POWER_lscbx_user | |
| 3925 | +#define gen_op_POWER_lscbx_64_kernel gen_op_POWER_lscbx_kernel | |
| 3926 | +#define gen_op_POWER_lscbx_64_hypv gen_op_POWER_lscbx_hypv | |
| 3927 | +#define gen_op_POWER_lscbx_le_raw gen_op_POWER_lscbx_raw | |
| 3928 | +#define gen_op_POWER_lscbx_le_user gen_op_POWER_lscbx_user | |
| 3929 | +#define gen_op_POWER_lscbx_le_kernel gen_op_POWER_lscbx_kernel | |
| 3930 | +#define gen_op_POWER_lscbx_le_hypv gen_op_POWER_lscbx_hypv | |
| 3931 | +#define gen_op_POWER_lscbx_le_64_raw gen_op_POWER_lscbx_raw | |
| 3932 | +#define gen_op_POWER_lscbx_le_64_user gen_op_POWER_lscbx_user | |
| 3933 | +#define gen_op_POWER_lscbx_le_64_kernel gen_op_POWER_lscbx_kernel | |
| 3934 | +#define gen_op_POWER_lscbx_le_64_hypv gen_op_POWER_lscbx_hypv | |
| 3935 | +static GenOpFunc3 *gen_op_POWER_lscbx[NB_MEM_FUNCS] = { | |
| 3936 | + GEN_MEM_FUNCS(POWER_lscbx), | |
| 4442 | 3937 | }; |
| 4443 | -#else | |
| 4444 | -static GenOpFunc3 *gen_op_POWER_lscbx[] = { | |
| 4445 | - &gen_op_POWER_lscbx_user, | |
| 4446 | - &gen_op_POWER_lscbx_user, | |
| 4447 | - &gen_op_POWER_lscbx_kernel, | |
| 4448 | - &gen_op_POWER_lscbx_kernel, | |
| 4449 | -}; | |
| 4450 | -#endif | |
| 4451 | 3938 | |
| 4452 | 3939 | /* lscbx - lscbx. */ |
| 4453 | 3940 | GEN_HANDLER(lscbx, 0x1F, 0x15, 0x08, 0x00000000, PPC_POWER_BR) |
| ... | ... | @@ -4901,31 +4388,31 @@ GEN_HANDLER(rfsvc, 0x13, 0x12, 0x02, 0x03FFF0001, PPC_POWER) |
| 4901 | 4388 | |
| 4902 | 4389 | /* POWER2 specific instructions */ |
| 4903 | 4390 | /* Quad manipulation (load/store two floats at a time) */ |
| 4391 | +/* Original POWER2 is 32 bits only, define 64 bits ops as 32 bits ones */ | |
| 4904 | 4392 | #define op_POWER2_lfq() (*gen_op_POWER2_lfq[ctx->mem_idx])() |
| 4905 | 4393 | #define op_POWER2_stfq() (*gen_op_POWER2_stfq[ctx->mem_idx])() |
| 4906 | -#if defined(CONFIG_USER_ONLY) | |
| 4907 | -static GenOpFunc *gen_op_POWER2_lfq[] = { | |
| 4908 | - &gen_op_POWER2_lfq_le_raw, | |
| 4909 | - &gen_op_POWER2_lfq_raw, | |
| 4910 | -}; | |
| 4911 | -static GenOpFunc *gen_op_POWER2_stfq[] = { | |
| 4912 | - &gen_op_POWER2_stfq_le_raw, | |
| 4913 | - &gen_op_POWER2_stfq_raw, | |
| 4394 | +#define gen_op_POWER2_lfq_64_raw gen_op_POWER2_lfq_raw | |
| 4395 | +#define gen_op_POWER2_lfq_64_user gen_op_POWER2_lfq_user | |
| 4396 | +#define gen_op_POWER2_lfq_64_kernel gen_op_POWER2_lfq_kernel | |
| 4397 | +#define gen_op_POWER2_lfq_64_hypv gen_op_POWER2_lfq_hypv | |
| 4398 | +#define gen_op_POWER2_lfq_le_64_raw gen_op_POWER2_lfq_le_raw | |
| 4399 | +#define gen_op_POWER2_lfq_le_64_user gen_op_POWER2_lfq_le_user | |
| 4400 | +#define gen_op_POWER2_lfq_le_64_kernel gen_op_POWER2_lfq_le_kernel | |
| 4401 | +#define gen_op_POWER2_lfq_le_64_hypv gen_op_POWER2_lfq_le_hypv | |
| 4402 | +#define gen_op_POWER2_stfq_64_raw gen_op_POWER2_stfq_raw | |
| 4403 | +#define gen_op_POWER2_stfq_64_user gen_op_POWER2_stfq_user | |
| 4404 | +#define gen_op_POWER2_stfq_64_kernel gen_op_POWER2_stfq_kernel | |
| 4405 | +#define gen_op_POWER2_stfq_64_hypv gen_op_POWER2_stfq_hypv | |
| 4406 | +#define gen_op_POWER2_stfq_le_64_raw gen_op_POWER2_stfq_le_raw | |
| 4407 | +#define gen_op_POWER2_stfq_le_64_user gen_op_POWER2_stfq_le_user | |
| 4408 | +#define gen_op_POWER2_stfq_le_64_kernel gen_op_POWER2_stfq_le_kernel | |
| 4409 | +#define gen_op_POWER2_stfq_le_64_hypv gen_op_POWER2_stfq_le_hypv | |
| 4410 | +static GenOpFunc *gen_op_POWER2_lfq[NB_MEM_FUNCS] = { | |
| 4411 | + GEN_MEM_FUNCS(POWER2_lfq), | |
| 4914 | 4412 | }; |
| 4915 | -#else | |
| 4916 | -static GenOpFunc *gen_op_POWER2_lfq[] = { | |
| 4917 | - &gen_op_POWER2_lfq_le_user, | |
| 4918 | - &gen_op_POWER2_lfq_user, | |
| 4919 | - &gen_op_POWER2_lfq_le_kernel, | |
| 4920 | - &gen_op_POWER2_lfq_kernel, | |
| 4413 | +static GenOpFunc *gen_op_POWER2_stfq[NB_MEM_FUNCS] = { | |
| 4414 | + GEN_MEM_FUNCS(POWER2_stfq), | |
| 4921 | 4415 | }; |
| 4922 | -static GenOpFunc *gen_op_POWER2_stfq[] = { | |
| 4923 | - &gen_op_POWER2_stfq_le_user, | |
| 4924 | - &gen_op_POWER2_stfq_user, | |
| 4925 | - &gen_op_POWER2_stfq_le_kernel, | |
| 4926 | - &gen_op_POWER2_stfq_kernel, | |
| 4927 | -}; | |
| 4928 | -#endif | |
| 4929 | 4416 | |
| 4930 | 4417 | /* lfq */ |
| 4931 | 4418 | GEN_HANDLER(lfq, 0x38, 0xFF, 0xFF, 0x00000003, PPC_POWER2) |
| ... | ... | @@ -5687,111 +5174,14 @@ GEN32(gen_op_store_A2_avr, gen_op_store_A2_avr_avr); |
| 5687 | 5174 | #endif |
| 5688 | 5175 | |
| 5689 | 5176 | #define op_vr_ldst(name) (*gen_op_##name[ctx->mem_idx])() |
| 5690 | -#if defined(CONFIG_USER_ONLY) | |
| 5691 | -#if defined(TARGET_PPC64) | |
| 5692 | -/* User-mode only - 64 bits mode */ | |
| 5693 | -#define OP_VR_LD_TABLE(name) \ | |
| 5694 | -static GenOpFunc *gen_op_vr_l##name[] = { \ | |
| 5695 | - &gen_op_vr_l##name##_raw, \ | |
| 5696 | - &gen_op_vr_l##name##_le_raw, \ | |
| 5697 | - &gen_op_vr_l##name##_64_raw, \ | |
| 5698 | - &gen_op_vr_l##name##_le_64_raw, \ | |
| 5699 | -}; | |
| 5700 | -#define OP_VR_ST_TABLE(name) \ | |
| 5701 | -static GenOpFunc *gen_op_vr_st##name[] = { \ | |
| 5702 | - &gen_op_vr_st##name##_raw, \ | |
| 5703 | - &gen_op_vr_st##name##_le_raw, \ | |
| 5704 | - &gen_op_vr_st##name##_64_raw, \ | |
| 5705 | - &gen_op_vr_st##name##_le_64_raw, \ | |
| 5706 | -}; | |
| 5707 | -#else /* defined(TARGET_PPC64) */ | |
| 5708 | -/* User-mode only - 32 bits mode */ | |
| 5709 | -#define OP_VR_LD_TABLE(name) \ | |
| 5710 | -static GenOpFunc *gen_op_vr_l##name[] = { \ | |
| 5711 | - &gen_op_vr_l##name##_raw, \ | |
| 5712 | - &gen_op_vr_l##name##_le_raw, \ | |
| 5713 | -}; | |
| 5714 | -#define OP_VR_ST_TABLE(name) \ | |
| 5715 | -static GenOpFunc *gen_op_vr_st##name[] = { \ | |
| 5716 | - &gen_op_vr_st##name##_raw, \ | |
| 5717 | - &gen_op_vr_st##name##_le_raw, \ | |
| 5718 | -}; | |
| 5719 | -#endif /* defined(TARGET_PPC64) */ | |
| 5720 | -#else /* defined(CONFIG_USER_ONLY) */ | |
| 5721 | -#if defined(TARGET_PPC64H) | |
| 5722 | -/* Full system with hypervisor mode */ | |
| 5723 | -#define OP_VR_LD_TABLE(name) \ | |
| 5724 | -static GenOpFunc *gen_op_vr_l##name[] = { \ | |
| 5725 | - &gen_op_vr_l##name##_user, \ | |
| 5726 | - &gen_op_vr_l##name##_le_user, \ | |
| 5727 | - &gen_op_vr_l##name##_64_user, \ | |
| 5728 | - &gen_op_vr_l##name##_le_64_user, \ | |
| 5729 | - &gen_op_vr_l##name##_kernel, \ | |
| 5730 | - &gen_op_vr_l##name##_le_kernel, \ | |
| 5731 | - &gen_op_vr_l##name##_64_kernel, \ | |
| 5732 | - &gen_op_vr_l##name##_le_64_kernel, \ | |
| 5733 | - &gen_op_vr_l##name##_hypv, \ | |
| 5734 | - &gen_op_vr_l##name##_le_hypv, \ | |
| 5735 | - &gen_op_vr_l##name##_64_hypv, \ | |
| 5736 | - &gen_op_vr_l##name##_le_64_hypv, \ | |
| 5737 | -}; | |
| 5738 | -#define OP_VR_ST_TABLE(name) \ | |
| 5739 | -static GenOpFunc *gen_op_vr_st##name[] = { \ | |
| 5740 | - &gen_op_vr_st##name##_user, \ | |
| 5741 | - &gen_op_vr_st##name##_le_user, \ | |
| 5742 | - &gen_op_vr_st##name##_64_user, \ | |
| 5743 | - &gen_op_vr_st##name##_le_64_user, \ | |
| 5744 | - &gen_op_vr_st##name##_kernel, \ | |
| 5745 | - &gen_op_vr_st##name##_le_kernel, \ | |
| 5746 | - &gen_op_vr_st##name##_64_kernel, \ | |
| 5747 | - &gen_op_vr_st##name##_le_64_kernel, \ | |
| 5748 | - &gen_op_vr_st##name##_hypv, \ | |
| 5749 | - &gen_op_vr_st##name##_le_hypv, \ | |
| 5750 | - &gen_op_vr_st##name##_64_hypv, \ | |
| 5751 | - &gen_op_vr_st##name##_le_64_hypv, \ | |
| 5752 | -}; | |
| 5753 | -#elif defined(TARGET_PPC64) | |
| 5754 | -/* Full system - 64 bits mode */ | |
| 5755 | 5177 | #define OP_VR_LD_TABLE(name) \ |
| 5756 | -static GenOpFunc *gen_op_vr_l##name[] = { \ | |
| 5757 | - &gen_op_vr_l##name##_user, \ | |
| 5758 | - &gen_op_vr_l##name##_le_user, \ | |
| 5759 | - &gen_op_vr_l##name##_64_user, \ | |
| 5760 | - &gen_op_vr_l##name##_le_64_user, \ | |
| 5761 | - &gen_op_vr_l##name##_kernel, \ | |
| 5762 | - &gen_op_vr_l##name##_le_kernel, \ | |
| 5763 | - &gen_op_vr_l##name##_64_kernel, \ | |
| 5764 | - &gen_op_vr_l##name##_le_64_kernel, \ | |
| 5178 | +static GenOpFunc *gen_op_vr_l##name[NB_MEM_FUNCS] = { \ | |
| 5179 | + GEN_MEM_FUNCS(vr_l##name), \ | |
| 5765 | 5180 | }; |
| 5766 | 5181 | #define OP_VR_ST_TABLE(name) \ |
| 5767 | -static GenOpFunc *gen_op_vr_st##name[] = { \ | |
| 5768 | - &gen_op_vr_st##name##_user, \ | |
| 5769 | - &gen_op_vr_st##name##_le_user, \ | |
| 5770 | - &gen_op_vr_st##name##_64_user, \ | |
| 5771 | - &gen_op_vr_st##name##_le_64_user, \ | |
| 5772 | - &gen_op_vr_st##name##_kernel, \ | |
| 5773 | - &gen_op_vr_st##name##_le_kernel, \ | |
| 5774 | - &gen_op_vr_st##name##_64_kernel, \ | |
| 5775 | - &gen_op_vr_st##name##_le_64_kernel, \ | |
| 5182 | +static GenOpFunc *gen_op_vr_st##name[NB_MEM_FUNCS] = { \ | |
| 5183 | + GEN_MEM_FUNCS(vr_st##name), \ | |
| 5776 | 5184 | }; |
| 5777 | -#else /* defined(TARGET_PPC64) */ | |
| 5778 | -/* Full system - 32 bits mode */ | |
| 5779 | -#define OP_VR_LD_TABLE(name) \ | |
| 5780 | -static GenOpFunc *gen_op_vr_l##name[] = { \ | |
| 5781 | - &gen_op_vr_l##name##_user, \ | |
| 5782 | - &gen_op_vr_l##name##_le_user, \ | |
| 5783 | - &gen_op_vr_l##name##_kernel, \ | |
| 5784 | - &gen_op_vr_l##name##_le_kernel, \ | |
| 5785 | -}; | |
| 5786 | -#define OP_VR_ST_TABLE(name) \ | |
| 5787 | -static GenOpFunc *gen_op_vr_st##name[] = { \ | |
| 5788 | - &gen_op_vr_st##name##_user, \ | |
| 5789 | - &gen_op_vr_st##name##_le_user, \ | |
| 5790 | - &gen_op_vr_st##name##_kernel, \ | |
| 5791 | - &gen_op_vr_st##name##_le_kernel, \ | |
| 5792 | -}; | |
| 5793 | -#endif /* defined(TARGET_PPC64) */ | |
| 5794 | -#endif /* defined(CONFIG_USER_ONLY) */ | |
| 5795 | 5185 | |
| 5796 | 5186 | #define GEN_VR_LDX(name, opc2, opc3) \ |
| 5797 | 5187 | GEN_HANDLER(l##name, 0x1F, opc2, opc3, 0x00000001, PPC_ALTIVEC) \ |
| ... | ... | @@ -5830,7 +5220,6 @@ GEN_VR_STX(vx, 0x07, 0x07); |
| 5830 | 5220 | GEN_VR_STX(vxl, 0x07, 0x0F); |
| 5831 | 5221 | |
| 5832 | 5222 | /*** SPE extension ***/ |
| 5833 | - | |
| 5834 | 5223 | /* Register moves */ |
| 5835 | 5224 | #if !defined(TARGET_PPC64) |
| 5836 | 5225 | |
| ... | ... | @@ -5893,111 +5282,14 @@ static always_inline void gen_addr_spe_imm_index (DisasContext *ctx, int sh) |
| 5893 | 5282 | } |
| 5894 | 5283 | |
| 5895 | 5284 | #define op_spe_ldst(name) (*gen_op_##name[ctx->mem_idx])() |
| 5896 | -#if defined(CONFIG_USER_ONLY) | |
| 5897 | -#if defined(TARGET_PPC64) | |
| 5898 | -/* User-mode only - 64 bits mode */ | |
| 5899 | -#define OP_SPE_LD_TABLE(name) \ | |
| 5900 | -static GenOpFunc *gen_op_spe_l##name[] = { \ | |
| 5901 | - &gen_op_spe_l##name##_raw, \ | |
| 5902 | - &gen_op_spe_l##name##_le_raw, \ | |
| 5903 | - &gen_op_spe_l##name##_64_raw, \ | |
| 5904 | - &gen_op_spe_l##name##_le_64_raw, \ | |
| 5905 | -}; | |
| 5906 | -#define OP_SPE_ST_TABLE(name) \ | |
| 5907 | -static GenOpFunc *gen_op_spe_st##name[] = { \ | |
| 5908 | - &gen_op_spe_st##name##_raw, \ | |
| 5909 | - &gen_op_spe_st##name##_le_raw, \ | |
| 5910 | - &gen_op_spe_st##name##_64_raw, \ | |
| 5911 | - &gen_op_spe_st##name##_le_64_raw, \ | |
| 5912 | -}; | |
| 5913 | -#else /* defined(TARGET_PPC64) */ | |
| 5914 | -/* User-mode only - 32 bits mode */ | |
| 5915 | -#define OP_SPE_LD_TABLE(name) \ | |
| 5916 | -static GenOpFunc *gen_op_spe_l##name[] = { \ | |
| 5917 | - &gen_op_spe_l##name##_raw, \ | |
| 5918 | - &gen_op_spe_l##name##_le_raw, \ | |
| 5919 | -}; | |
| 5920 | -#define OP_SPE_ST_TABLE(name) \ | |
| 5921 | -static GenOpFunc *gen_op_spe_st##name[] = { \ | |
| 5922 | - &gen_op_spe_st##name##_raw, \ | |
| 5923 | - &gen_op_spe_st##name##_le_raw, \ | |
| 5924 | -}; | |
| 5925 | -#endif /* defined(TARGET_PPC64) */ | |
| 5926 | -#else /* defined(CONFIG_USER_ONLY) */ | |
| 5927 | -#if defined(TARGET_PPC64H) | |
| 5928 | -/* Full system with hypervisor mode */ | |
| 5929 | 5285 | #define OP_SPE_LD_TABLE(name) \ |
| 5930 | -static GenOpFunc *gen_op_spe_l##name[] = { \ | |
| 5931 | - &gen_op_spe_l##name##_user, \ | |
| 5932 | - &gen_op_spe_l##name##_le_user, \ | |
| 5933 | - &gen_op_spe_l##name##_64_user, \ | |
| 5934 | - &gen_op_spe_l##name##_le_64_user, \ | |
| 5935 | - &gen_op_spe_l##name##_kernel, \ | |
| 5936 | - &gen_op_spe_l##name##_le_kernel, \ | |
| 5937 | - &gen_op_spe_l##name##_64_kernel, \ | |
| 5938 | - &gen_op_spe_l##name##_le_64_kernel, \ | |
| 5939 | - &gen_op_spe_l##name##_hypv, \ | |
| 5940 | - &gen_op_spe_l##name##_le_hypv, \ | |
| 5941 | - &gen_op_spe_l##name##_64_hypv, \ | |
| 5942 | - &gen_op_spe_l##name##_le_64_hypv, \ | |
| 5286 | +static GenOpFunc *gen_op_spe_l##name[NB_MEM_FUNCS] = { \ | |
| 5287 | + GEN_MEM_FUNCS(spe_l##name), \ | |
| 5943 | 5288 | }; |
| 5944 | 5289 | #define OP_SPE_ST_TABLE(name) \ |
| 5945 | -static GenOpFunc *gen_op_spe_st##name[] = { \ | |
| 5946 | - &gen_op_spe_st##name##_user, \ | |
| 5947 | - &gen_op_spe_st##name##_le_user, \ | |
| 5948 | - &gen_op_spe_st##name##_64_user, \ | |
| 5949 | - &gen_op_spe_st##name##_le_64_user, \ | |
| 5950 | - &gen_op_spe_st##name##_kernel, \ | |
| 5951 | - &gen_op_spe_st##name##_le_kernel, \ | |
| 5952 | - &gen_op_spe_st##name##_64_kernel, \ | |
| 5953 | - &gen_op_spe_st##name##_le_64_kernel, \ | |
| 5954 | - &gen_op_spe_st##name##_hypv, \ | |
| 5955 | - &gen_op_spe_st##name##_le_hypv, \ | |
| 5956 | - &gen_op_spe_st##name##_64_hypv, \ | |
| 5957 | - &gen_op_spe_st##name##_le_64_hypv, \ | |
| 5958 | -}; | |
| 5959 | -#elif defined(TARGET_PPC64) | |
| 5960 | -/* Full system - 64 bits mode */ | |
| 5961 | -#define OP_SPE_LD_TABLE(name) \ | |
| 5962 | -static GenOpFunc *gen_op_spe_l##name[] = { \ | |
| 5963 | - &gen_op_spe_l##name##_user, \ | |
| 5964 | - &gen_op_spe_l##name##_le_user, \ | |
| 5965 | - &gen_op_spe_l##name##_64_user, \ | |
| 5966 | - &gen_op_spe_l##name##_le_64_user, \ | |
| 5967 | - &gen_op_spe_l##name##_kernel, \ | |
| 5968 | - &gen_op_spe_l##name##_le_kernel, \ | |
| 5969 | - &gen_op_spe_l##name##_64_kernel, \ | |
| 5970 | - &gen_op_spe_l##name##_le_64_kernel, \ | |
| 5290 | +static GenOpFunc *gen_op_spe_st##name[NB_MEM_FUNCS] = { \ | |
| 5291 | + GEN_MEM_FUNCS(spe_st##name), \ | |
| 5971 | 5292 | }; |
| 5972 | -#define OP_SPE_ST_TABLE(name) \ | |
| 5973 | -static GenOpFunc *gen_op_spe_st##name[] = { \ | |
| 5974 | - &gen_op_spe_st##name##_user, \ | |
| 5975 | - &gen_op_spe_st##name##_le_user, \ | |
| 5976 | - &gen_op_spe_st##name##_64_user, \ | |
| 5977 | - &gen_op_spe_st##name##_le_64_user, \ | |
| 5978 | - &gen_op_spe_st##name##_kernel, \ | |
| 5979 | - &gen_op_spe_st##name##_le_kernel, \ | |
| 5980 | - &gen_op_spe_st##name##_64_kernel, \ | |
| 5981 | - &gen_op_spe_st##name##_le_64_kernel, \ | |
| 5982 | -}; | |
| 5983 | -#else /* defined(TARGET_PPC64) */ | |
| 5984 | -/* Full system - 32 bits mode */ | |
| 5985 | -#define OP_SPE_LD_TABLE(name) \ | |
| 5986 | -static GenOpFunc *gen_op_spe_l##name[] = { \ | |
| 5987 | - &gen_op_spe_l##name##_user, \ | |
| 5988 | - &gen_op_spe_l##name##_le_user, \ | |
| 5989 | - &gen_op_spe_l##name##_kernel, \ | |
| 5990 | - &gen_op_spe_l##name##_le_kernel, \ | |
| 5991 | -}; | |
| 5992 | -#define OP_SPE_ST_TABLE(name) \ | |
| 5993 | -static GenOpFunc *gen_op_spe_st##name[] = { \ | |
| 5994 | - &gen_op_spe_st##name##_user, \ | |
| 5995 | - &gen_op_spe_st##name##_le_user, \ | |
| 5996 | - &gen_op_spe_st##name##_kernel, \ | |
| 5997 | - &gen_op_spe_st##name##_le_kernel, \ | |
| 5998 | -}; | |
| 5999 | -#endif /* defined(TARGET_PPC64) */ | |
| 6000 | -#endif /* defined(CONFIG_USER_ONLY) */ | |
| 6001 | 5293 | |
| 6002 | 5294 | #define GEN_SPE_LD(name, sh) \ |
| 6003 | 5295 | static always_inline void gen_evl##name (DisasContext *ctx) \ |
| ... | ... | @@ -6258,45 +5550,38 @@ GEN_HANDLER2(evsel3, "evsel", 0x04, 0x1f, 0x09, 0x00000000, PPC_SPE) |
| 6258 | 5550 | /* In that case, we already have 64 bits load & stores |
| 6259 | 5551 | * so, spe_ldd is equivalent to ld and spe_std is equivalent to std |
| 6260 | 5552 | */ |
| 6261 | -#if defined(CONFIG_USER_ONLY) | |
| 6262 | -#define gen_op_spe_ldd_raw gen_op_ld_raw | |
| 6263 | -#define gen_op_spe_ldd_64_raw gen_op_ld_64_raw | |
| 6264 | -#define gen_op_spe_ldd_le_raw gen_op_ld_le_raw | |
| 6265 | -#define gen_op_spe_ldd_le_64_raw gen_op_ld_le_64_raw | |
| 6266 | -#define gen_op_spe_stdd_raw gen_op_ld_raw | |
| 6267 | -#define gen_op_spe_stdd_64_raw gen_op_std_64_raw | |
| 6268 | -#define gen_op_spe_stdd_le_raw gen_op_std_le_raw | |
| 6269 | -#define gen_op_spe_stdd_le_64_raw gen_op_std_le_64_raw | |
| 6270 | -#else /* defined(CONFIG_USER_ONLY) */ | |
| 6271 | -#if defined(TARGET_PPC64H) | |
| 6272 | -#define gen_op_spe_ldd_hypv gen_op_ld_hypv | |
| 6273 | -#define gen_op_spe_ldd_64_hypv gen_op_ld_64_hypv | |
| 6274 | -#define gen_op_spe_ldd_le_hypv gen_op_ld_hypv | |
| 6275 | -#define gen_op_spe_ldd_le_64_hypv gen_op_ld_64_hypv | |
| 6276 | -#endif | |
| 6277 | -#define gen_op_spe_ldd_kernel gen_op_ld_kernel | |
| 6278 | -#define gen_op_spe_ldd_64_kernel gen_op_ld_64_kernel | |
| 6279 | -#define gen_op_spe_ldd_le_kernel gen_op_ld_kernel | |
| 6280 | -#define gen_op_spe_ldd_le_64_kernel gen_op_ld_64_kernel | |
| 6281 | -#define gen_op_spe_ldd_user gen_op_ld_user | |
| 6282 | -#define gen_op_spe_ldd_64_user gen_op_ld_64_user | |
| 6283 | -#define gen_op_spe_ldd_le_user gen_op_ld_le_user | |
| 6284 | -#define gen_op_spe_ldd_le_64_user gen_op_ld_le_64_user | |
| 6285 | -#if defined(TARGET_PPC64H) | |
| 6286 | -#define gen_op_spe_stdd_hypv gen_op_std_hypv | |
| 6287 | -#define gen_op_spe_stdd_64_hypv gen_op_std_64_hypv | |
| 6288 | -#define gen_op_spe_stdd_le_hypv gen_op_std_hypv | |
| 6289 | -#define gen_op_spe_stdd_le_64_hypv gen_op_std_64_hypv | |
| 6290 | -#endif | |
| 6291 | -#define gen_op_spe_stdd_kernel gen_op_std_kernel | |
| 6292 | -#define gen_op_spe_stdd_64_kernel gen_op_std_64_kernel | |
| 6293 | -#define gen_op_spe_stdd_le_kernel gen_op_std_kernel | |
| 6294 | -#define gen_op_spe_stdd_le_64_kernel gen_op_std_64_kernel | |
| 6295 | -#define gen_op_spe_stdd_user gen_op_std_user | |
| 6296 | -#define gen_op_spe_stdd_64_user gen_op_std_64_user | |
| 6297 | -#define gen_op_spe_stdd_le_user gen_op_std_le_user | |
| 6298 | -#define gen_op_spe_stdd_le_64_user gen_op_std_le_64_user | |
| 6299 | -#endif /* defined(CONFIG_USER_ONLY) */ | |
| 5553 | +#define gen_op_spe_ldd_raw gen_op_ld_raw | |
| 5554 | +#define gen_op_spe_ldd_user gen_op_ld_user | |
| 5555 | +#define gen_op_spe_ldd_kernel gen_op_ld_kernel | |
| 5556 | +#define gen_op_spe_ldd_hypv gen_op_ld_hypv | |
| 5557 | +#define gen_op_spe_ldd_64_raw gen_op_ld_64_raw | |
| 5558 | +#define gen_op_spe_ldd_64_user gen_op_ld_64_user | |
| 5559 | +#define gen_op_spe_ldd_64_kernel gen_op_ld_64_kernel | |
| 5560 | +#define gen_op_spe_ldd_64_hypv gen_op_ld_64_hypv | |
| 5561 | +#define gen_op_spe_ldd_le_raw gen_op_ld_le_raw | |
| 5562 | +#define gen_op_spe_ldd_le_user gen_op_ld_le_user | |
| 5563 | +#define gen_op_spe_ldd_le_kernel gen_op_ld_le_kernel | |
| 5564 | +#define gen_op_spe_ldd_le_hypv gen_op_ld_le_hypv | |
| 5565 | +#define gen_op_spe_ldd_le_64_raw gen_op_ld_le_64_raw | |
| 5566 | +#define gen_op_spe_ldd_le_64_user gen_op_ld_le_64_user | |
| 5567 | +#define gen_op_spe_ldd_le_64_kernel gen_op_ld_le_64_kernel | |
| 5568 | +#define gen_op_spe_ldd_le_64_hypv gen_op_ld_le_64_hypv | |
| 5569 | +#define gen_op_spe_stdd_raw gen_op_std_raw | |
| 5570 | +#define gen_op_spe_stdd_user gen_op_std_user | |
| 5571 | +#define gen_op_spe_stdd_kernel gen_op_std_kernel | |
| 5572 | +#define gen_op_spe_stdd_hypv gen_op_std_hypv | |
| 5573 | +#define gen_op_spe_stdd_64_raw gen_op_std_64_raw | |
| 5574 | +#define gen_op_spe_stdd_64_user gen_op_std_64_user | |
| 5575 | +#define gen_op_spe_stdd_64_kernel gen_op_std_64_kernel | |
| 5576 | +#define gen_op_spe_stdd_64_hypv gen_op_std_64_hypv | |
| 5577 | +#define gen_op_spe_stdd_le_raw gen_op_std_le_raw | |
| 5578 | +#define gen_op_spe_stdd_le_user gen_op_std_le_user | |
| 5579 | +#define gen_op_spe_stdd_le_kernel gen_op_std_le_kernel | |
| 5580 | +#define gen_op_spe_stdd_le_hypv gen_op_std_le_hypv | |
| 5581 | +#define gen_op_spe_stdd_le_64_raw gen_op_std_le_64_raw | |
| 5582 | +#define gen_op_spe_stdd_le_64_user gen_op_std_le_64_user | |
| 5583 | +#define gen_op_spe_stdd_le_64_kernel gen_op_std_le_64_kernel | |
| 5584 | +#define gen_op_spe_stdd_le_64_hypv gen_op_std_le_64_hypv | |
| 6300 | 5585 | #endif /* defined(TARGET_PPC64) */ |
| 6301 | 5586 | GEN_SPEOP_LDST(dd, 3); |
| 6302 | 5587 | GEN_SPEOP_LDST(dw, 3); |
| ... | ... | @@ -6308,27 +5593,22 @@ GEN_SPEOP_ST(who, 2); |
| 6308 | 5593 | |
| 6309 | 5594 | #if defined(TARGET_PPC64) |
| 6310 | 5595 | /* In that case, spe_stwwo is equivalent to stw */ |
| 6311 | -#if defined(CONFIG_USER_ONLY) | |
| 6312 | -#define gen_op_spe_stwwo_raw gen_op_stw_raw | |
| 6313 | -#define gen_op_spe_stwwo_le_raw gen_op_stw_le_raw | |
| 6314 | -#define gen_op_spe_stwwo_64_raw gen_op_stw_64_raw | |
| 6315 | -#define gen_op_spe_stwwo_le_64_raw gen_op_stw_le_64_raw | |
| 6316 | -#else | |
| 6317 | -#define gen_op_spe_stwwo_user gen_op_stw_user | |
| 6318 | -#define gen_op_spe_stwwo_le_user gen_op_stw_le_user | |
| 6319 | -#define gen_op_spe_stwwo_64_user gen_op_stw_64_user | |
| 6320 | -#define gen_op_spe_stwwo_le_64_user gen_op_stw_le_64_user | |
| 6321 | -#define gen_op_spe_stwwo_kernel gen_op_stw_kernel | |
| 6322 | -#define gen_op_spe_stwwo_le_kernel gen_op_stw_le_kernel | |
| 6323 | -#define gen_op_spe_stwwo_64_kernel gen_op_stw_64_kernel | |
| 5596 | +#define gen_op_spe_stwwo_raw gen_op_stw_raw | |
| 5597 | +#define gen_op_spe_stwwo_user gen_op_stw_user | |
| 5598 | +#define gen_op_spe_stwwo_kernel gen_op_stw_kernel | |
| 5599 | +#define gen_op_spe_stwwo_hypv gen_op_stw_hypv | |
| 5600 | +#define gen_op_spe_stwwo_le_raw gen_op_stw_le_raw | |
| 5601 | +#define gen_op_spe_stwwo_le_user gen_op_stw_le_user | |
| 5602 | +#define gen_op_spe_stwwo_le_kernel gen_op_stw_le_kernel | |
| 5603 | +#define gen_op_spe_stwwo_le_hypv gen_op_stw_le_hypv | |
| 5604 | +#define gen_op_spe_stwwo_64_raw gen_op_stw_64_raw | |
| 5605 | +#define gen_op_spe_stwwo_64_user gen_op_stw_64_user | |
| 5606 | +#define gen_op_spe_stwwo_64_kernel gen_op_stw_64_kernel | |
| 5607 | +#define gen_op_spe_stwwo_64_hypv gen_op_stw_64_hypv | |
| 5608 | +#define gen_op_spe_stwwo_le_64_raw gen_op_stw_le_64_raw | |
| 5609 | +#define gen_op_spe_stwwo_le_64_user gen_op_stw_le_64_user | |
| 6324 | 5610 | #define gen_op_spe_stwwo_le_64_kernel gen_op_stw_le_64_kernel |
| 6325 | -#if defined(TARGET_PPC64H) | |
| 6326 | -#define gen_op_spe_stwwo_hypv gen_op_stw_hypv | |
| 6327 | -#define gen_op_spe_stwwo_le_hypv gen_op_stw_le_hypv | |
| 6328 | -#define gen_op_spe_stwwo_64_hypv gen_op_stw_64_hypv | |
| 6329 | -#define gen_op_spe_stwwo_le_64_hypv gen_op_stw_le_64_hypv | |
| 6330 | -#endif | |
| 6331 | -#endif | |
| 5611 | +#define gen_op_spe_stwwo_le_64_hypv gen_op_stw_le_64_hypv | |
| 6332 | 5612 | #endif |
| 6333 | 5613 | #define _GEN_OP_SPE_STWWE(suffix) \ |
| 6334 | 5614 | static always_inline void gen_op_spe_stwwe_##suffix (void) \ |
| ... | ... | @@ -6364,11 +5644,9 @@ _GEN_OP_SPE_STWWE_LE(suffix) |
| 6364 | 5644 | #if defined(CONFIG_USER_ONLY) |
| 6365 | 5645 | GEN_OP_SPE_STWWE(raw); |
| 6366 | 5646 | #else /* defined(CONFIG_USER_ONLY) */ |
| 6367 | -#if defined(TARGET_PPC64H) | |
| 6368 | -GEN_OP_SPE_STWWE(hypv); | |
| 6369 | -#endif | |
| 6370 | -GEN_OP_SPE_STWWE(kernel); | |
| 6371 | 5647 | GEN_OP_SPE_STWWE(user); |
| 5648 | +GEN_OP_SPE_STWWE(kernel); | |
| 5649 | +GEN_OP_SPE_STWWE(hypv); | |
| 6372 | 5650 | #endif /* defined(CONFIG_USER_ONLY) */ |
| 6373 | 5651 | GEN_SPEOP_ST(wwe, 2); |
| 6374 | 5652 | GEN_SPEOP_ST(wwo, 2); |
| ... | ... | @@ -6418,107 +5696,67 @@ GEN_OP_SPE_LHX(le_64_raw); |
| 6418 | 5696 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_raw); |
| 6419 | 5697 | #endif |
| 6420 | 5698 | #else |
| 6421 | -#if defined(TARGET_PPC64H) | |
| 6422 | -GEN_OP_SPE_LHE(hypv); | |
| 6423 | -#endif | |
| 6424 | -GEN_OP_SPE_LHE(kernel); | |
| 6425 | 5699 | GEN_OP_SPE_LHE(user); |
| 6426 | -#if defined(TARGET_PPC64H) | |
| 6427 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, hypv); | |
| 6428 | -#endif | |
| 6429 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, kernel); | |
| 5700 | +GEN_OP_SPE_LHE(kernel); | |
| 5701 | +GEN_OP_SPE_LHE(hypv); | |
| 6430 | 5702 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, user); |
| 6431 | -#if defined(TARGET_PPC64H) | |
| 6432 | -GEN_OP_SPE_LHE(le_hypv); | |
| 6433 | -#endif | |
| 6434 | -GEN_OP_SPE_LHE(le_kernel); | |
| 5703 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, kernel); | |
| 5704 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, hypv); | |
| 6435 | 5705 | GEN_OP_SPE_LHE(le_user); |
| 6436 | -#if defined(TARGET_PPC64H) | |
| 6437 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_hypv); | |
| 6438 | -#endif | |
| 6439 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_kernel); | |
| 5706 | +GEN_OP_SPE_LHE(le_kernel); | |
| 5707 | +GEN_OP_SPE_LHE(le_hypv); | |
| 6440 | 5708 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_user); |
| 6441 | -#if defined(TARGET_PPC64H) | |
| 6442 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, hypv); | |
| 6443 | -#endif | |
| 6444 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, kernel); | |
| 5709 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_kernel); | |
| 5710 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_hypv); | |
| 6445 | 5711 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, user); |
| 6446 | -#if defined(TARGET_PPC64H) | |
| 6447 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_hypv); | |
| 6448 | -#endif | |
| 6449 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_kernel); | |
| 5712 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, kernel); | |
| 5713 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, hypv); | |
| 6450 | 5714 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_user); |
| 6451 | -#if defined(TARGET_PPC64H) | |
| 6452 | -GEN_OP_SPE_LHX(hypv); | |
| 6453 | -#endif | |
| 6454 | -GEN_OP_SPE_LHX(kernel); | |
| 5715 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_kernel); | |
| 5716 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_hypv); | |
| 6455 | 5717 | GEN_OP_SPE_LHX(user); |
| 6456 | -#if defined(TARGET_PPC64H) | |
| 6457 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, hypv); | |
| 6458 | -#endif | |
| 6459 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, kernel); | |
| 5718 | +GEN_OP_SPE_LHX(kernel); | |
| 5719 | +GEN_OP_SPE_LHX(hypv); | |
| 6460 | 5720 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, user); |
| 6461 | -#if defined(TARGET_PPC64H) | |
| 6462 | -GEN_OP_SPE_LHX(le_hypv); | |
| 6463 | -#endif | |
| 6464 | -GEN_OP_SPE_LHX(le_kernel); | |
| 5721 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, kernel); | |
| 5722 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, hypv); | |
| 6465 | 5723 | GEN_OP_SPE_LHX(le_user); |
| 6466 | -#if defined(TARGET_PPC64H) | |
| 6467 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_hypv); | |
| 6468 | -#endif | |
| 6469 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_kernel); | |
| 5724 | +GEN_OP_SPE_LHX(le_kernel); | |
| 5725 | +GEN_OP_SPE_LHX(le_hypv); | |
| 6470 | 5726 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_user); |
| 5727 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_kernel); | |
| 5728 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_hypv); | |
| 6471 | 5729 | #if defined(TARGET_PPC64) |
| 6472 | -#if defined(TARGET_PPC64H) | |
| 6473 | -GEN_OP_SPE_LHE(64_hypv); | |
| 6474 | -#endif | |
| 6475 | -GEN_OP_SPE_LHE(64_kernel); | |
| 6476 | 5730 | GEN_OP_SPE_LHE(64_user); |
| 6477 | -#if defined(TARGET_PPC64H) | |
| 6478 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, 64_hypv); | |
| 6479 | -#endif | |
| 6480 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, 64_kernel); | |
| 5731 | +GEN_OP_SPE_LHE(64_kernel); | |
| 5732 | +GEN_OP_SPE_LHE(64_hypv); | |
| 6481 | 5733 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, 64_user); |
| 6482 | -#if defined(TARGET_PPC64H) | |
| 6483 | -GEN_OP_SPE_LHE(le_64_hypv); | |
| 6484 | -#endif | |
| 6485 | -GEN_OP_SPE_LHE(le_64_kernel); | |
| 5734 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, 64_kernel); | |
| 5735 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, 64_hypv); | |
| 6486 | 5736 | GEN_OP_SPE_LHE(le_64_user); |
| 6487 | -#if defined(TARGET_PPC64H) | |
| 6488 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_64_hypv); | |
| 6489 | -#endif | |
| 6490 | -GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_64_kernel); | |
| 5737 | +GEN_OP_SPE_LHE(le_64_kernel); | |
| 5738 | +GEN_OP_SPE_LHE(le_64_hypv); | |
| 6491 | 5739 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_64_user); |
| 6492 | -#if defined(TARGET_PPC64H) | |
| 6493 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, 64_hypv); | |
| 6494 | -#endif | |
| 6495 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, 64_kernel); | |
| 5740 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_64_kernel); | |
| 5741 | +GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_64_hypv); | |
| 6496 | 5742 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, 64_user); |
| 6497 | -#if defined(TARGET_PPC64H) | |
| 6498 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_64_hypv); | |
| 6499 | -#endif | |
| 6500 | -GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_64_kernel); | |
| 5743 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, 64_kernel); | |
| 5744 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, 64_hypv); | |
| 6501 | 5745 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_64_user); |
| 6502 | -#if defined(TARGET_PPC64H) | |
| 6503 | -GEN_OP_SPE_LHX(64_hypv); | |
| 6504 | -#endif | |
| 6505 | -GEN_OP_SPE_LHX(64_kernel); | |
| 5746 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_64_kernel); | |
| 5747 | +GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_64_hypv); | |
| 6506 | 5748 | GEN_OP_SPE_LHX(64_user); |
| 6507 | -#if defined(TARGET_PPC64H) | |
| 6508 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, 64_hypv); | |
| 6509 | -#endif | |
| 6510 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, 64_kernel); | |
| 5749 | +GEN_OP_SPE_LHX(64_kernel); | |
| 5750 | +GEN_OP_SPE_LHX(64_hypv); | |
| 6511 | 5751 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, 64_user); |
| 6512 | -#if defined(TARGET_PPC64H) | |
| 6513 | -GEN_OP_SPE_LHX(le_64_hypv); | |
| 6514 | -#endif | |
| 6515 | -GEN_OP_SPE_LHX(le_64_kernel); | |
| 5752 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, 64_kernel); | |
| 5753 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, 64_hypv); | |
| 6516 | 5754 | GEN_OP_SPE_LHX(le_64_user); |
| 6517 | -#if defined(TARGET_PPC64H) | |
| 6518 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_hypv); | |
| 6519 | -#endif | |
| 6520 | -GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_kernel); | |
| 5755 | +GEN_OP_SPE_LHX(le_64_kernel); | |
| 5756 | +GEN_OP_SPE_LHX(le_64_hypv); | |
| 6521 | 5757 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_user); |
| 5758 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_kernel); | |
| 5759 | +GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_hypv); | |
| 6522 | 5760 | #endif |
| 6523 | 5761 | #endif |
| 6524 | 5762 | GEN_SPEOP_LD(hhesplat, 1); | ... | ... |
translate-all.c
| ... | ... | @@ -264,7 +264,8 @@ int cpu_restore_state(TranslationBlock *tb, |
| 264 | 264 | #else |
| 265 | 265 | #define CASE3(op)\ |
| 266 | 266 | case INDEX_op_ ## op ## _user:\ |
| 267 | - case INDEX_op_ ## op ## _kernel | |
| 267 | + case INDEX_op_ ## op ## _kernel:\ | |
| 268 | + case INDEX_op_ ## op ## _hypv | |
| 268 | 269 | #endif |
| 269 | 270 | |
| 270 | 271 | CASE3(stfd): | ... | ... |