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,11 +305,9 @@ struct ppc_spr_t { | ||
305 | #if !defined(CONFIG_USER_ONLY) | 305 | #if !defined(CONFIG_USER_ONLY) |
306 | void (*oea_read)(void *opaque, int spr_num); | 306 | void (*oea_read)(void *opaque, int spr_num); |
307 | void (*oea_write)(void *opaque, int spr_num); | 307 | void (*oea_write)(void *opaque, int spr_num); |
308 | -#if defined(TARGET_PPC64H) | ||
309 | void (*hea_read)(void *opaque, int spr_num); | 308 | void (*hea_read)(void *opaque, int spr_num); |
310 | void (*hea_write)(void *opaque, int spr_num); | 309 | void (*hea_write)(void *opaque, int spr_num); |
311 | #endif | 310 | #endif |
312 | -#endif | ||
313 | const unsigned char *name; | 311 | const unsigned char *name; |
314 | }; | 312 | }; |
315 | 313 | ||
@@ -510,11 +508,7 @@ enum { | @@ -510,11 +508,7 @@ enum { | ||
510 | 508 | ||
511 | /*****************************************************************************/ | 509 | /*****************************************************************************/ |
512 | /* The whole PowerPC CPU context */ | 510 | /* The whole PowerPC CPU context */ |
513 | -#if defined(TARGET_PPC64H) | ||
514 | #define NB_MMU_MODES 3 | 511 | #define NB_MMU_MODES 3 |
515 | -#else | ||
516 | -#define NB_MMU_MODES 2 | ||
517 | -#endif | ||
518 | 512 | ||
519 | struct CPUPPCState { | 513 | struct CPUPPCState { |
520 | /* First are the most commonly used resources | 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,9 +777,7 @@ int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val); | ||
783 | /* MMU modes definitions */ | 777 | /* MMU modes definitions */ |
784 | #define MMU_MODE0_SUFFIX _user | 778 | #define MMU_MODE0_SUFFIX _user |
785 | #define MMU_MODE1_SUFFIX _kernel | 779 | #define MMU_MODE1_SUFFIX _kernel |
786 | -#if defined(TARGET_PPC64H) | ||
787 | #define MMU_MODE2_SUFFIX _hypv | 780 | #define MMU_MODE2_SUFFIX _hypv |
788 | -#endif | ||
789 | #define MMU_USER_IDX 0 | 781 | #define MMU_USER_IDX 0 |
790 | static inline int cpu_mmu_index (CPUState *env) | 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,12 +1987,10 @@ void OPPROTO op_fneg (void) | ||
1987 | #define MEMSUFFIX _kernel | 1987 | #define MEMSUFFIX _kernel |
1988 | #include "op_helper.h" | 1988 | #include "op_helper.h" |
1989 | #include "op_mem.h" | 1989 | #include "op_mem.h" |
1990 | -#if defined(TARGET_PPC64H) | ||
1991 | #define MEMSUFFIX _hypv | 1990 | #define MEMSUFFIX _hypv |
1992 | #include "op_helper.h" | 1991 | #include "op_helper.h" |
1993 | #include "op_mem.h" | 1992 | #include "op_mem.h" |
1994 | #endif | 1993 | #endif |
1995 | -#endif | ||
1996 | 1994 | ||
1997 | /* Special op to check and maybe clear reservation */ | 1995 | /* Special op to check and maybe clear reservation */ |
1998 | void OPPROTO op_check_reservation (void) | 1996 | void OPPROTO op_check_reservation (void) |
@@ -2031,9 +2029,7 @@ void OPPROTO op_rfid (void) | @@ -2031,9 +2029,7 @@ void OPPROTO op_rfid (void) | ||
2031 | do_rfid(); | 2029 | do_rfid(); |
2032 | RETURN(); | 2030 | RETURN(); |
2033 | } | 2031 | } |
2034 | -#endif | ||
2035 | 2032 | ||
2036 | -#if defined(TARGET_PPC64H) | ||
2037 | void OPPROTO op_hrfid (void) | 2033 | void OPPROTO op_hrfid (void) |
2038 | { | 2034 | { |
2039 | do_hrfid(); | 2035 | do_hrfid(); |
target-ppc/op_helper.c
@@ -33,12 +33,10 @@ | @@ -33,12 +33,10 @@ | ||
33 | #define MEMSUFFIX _kernel | 33 | #define MEMSUFFIX _kernel |
34 | #include "op_helper.h" | 34 | #include "op_helper.h" |
35 | #include "op_helper_mem.h" | 35 | #include "op_helper_mem.h" |
36 | -#if defined(TARGET_PPC64H) | ||
37 | #define MEMSUFFIX _hypv | 36 | #define MEMSUFFIX _hypv |
38 | #include "op_helper.h" | 37 | #include "op_helper.h" |
39 | #include "op_helper_mem.h" | 38 | #include "op_helper_mem.h" |
40 | #endif | 39 | #endif |
41 | -#endif | ||
42 | 40 | ||
43 | //#define DEBUG_OP | 41 | //#define DEBUG_OP |
44 | //#define DEBUG_EXCEPTIONS | 42 | //#define DEBUG_EXCEPTIONS |
@@ -1475,8 +1473,7 @@ void do_rfid (void) | @@ -1475,8 +1473,7 @@ void do_rfid (void) | ||
1475 | __do_rfi(env->spr[SPR_SRR0], env->spr[SPR_SRR1], | 1473 | __do_rfi(env->spr[SPR_SRR0], env->spr[SPR_SRR1], |
1476 | ~((target_ulong)0xFFFF0000), 0); | 1474 | ~((target_ulong)0xFFFF0000), 0); |
1477 | } | 1475 | } |
1478 | -#endif | ||
1479 | -#if defined(TARGET_PPC64H) | 1476 | + |
1480 | void do_hrfid (void) | 1477 | void do_hrfid (void) |
1481 | { | 1478 | { |
1482 | __do_rfi(env->spr[SPR_HSRR0], env->spr[SPR_HSRR1], | 1479 | __do_rfi(env->spr[SPR_HSRR0], env->spr[SPR_HSRR1], |
target-ppc/op_helper.h
@@ -146,8 +146,6 @@ void do_store_msr (void); | @@ -146,8 +146,6 @@ void do_store_msr (void); | ||
146 | void do_rfi (void); | 146 | void do_rfi (void); |
147 | #if defined(TARGET_PPC64) | 147 | #if defined(TARGET_PPC64) |
148 | void do_rfid (void); | 148 | void do_rfid (void); |
149 | -#endif | ||
150 | -#if defined(TARGET_PPC64H) | ||
151 | void do_hrfid (void); | 149 | void do_hrfid (void); |
152 | #endif | 150 | #endif |
153 | void do_load_6xx_tlb (int is_code); | 151 | void do_load_6xx_tlb (int is_code); |
target-ppc/translate.c
@@ -1250,7 +1250,6 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER) | @@ -1250,7 +1250,6 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER) | ||
1250 | gen_op_store_pri(6); | 1250 | gen_op_store_pri(6); |
1251 | } | 1251 | } |
1252 | break; | 1252 | break; |
1253 | -#if defined(TARGET_PPC64H) | ||
1254 | case 7: | 1253 | case 7: |
1255 | if (ctx->supervisor > 1) { | 1254 | if (ctx->supervisor > 1) { |
1256 | /* Set process priority to very high */ | 1255 | /* Set process priority to very high */ |
@@ -1258,7 +1257,6 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER) | @@ -1258,7 +1257,6 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER) | ||
1258 | } | 1257 | } |
1259 | break; | 1258 | break; |
1260 | #endif | 1259 | #endif |
1261 | -#endif | ||
1262 | default: | 1260 | default: |
1263 | /* nop */ | 1261 | /* nop */ |
1264 | break; | 1262 | break; |
@@ -2103,136 +2101,64 @@ static always_inline void gen_addr_register (DisasContext *ctx) | @@ -2103,136 +2101,64 @@ static always_inline void gen_addr_register (DisasContext *ctx) | ||
2103 | #endif | 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 | #if defined(CONFIG_USER_ONLY) | 2115 | #if defined(CONFIG_USER_ONLY) |
2109 | #if defined(TARGET_PPC64) | 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 | #else | 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 | #endif | 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 | #else | 2123 | #else |
2145 | #if defined(TARGET_PPC64) | 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 | #else | 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 | #endif | 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 | /* Byte access routine are endian safe */ | 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 | #define gen_op_lbz_le_64_user gen_op_lbz_64_user | 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 | #define gen_op_lbz_le_64_kernel gen_op_lbz_64_kernel | 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 | #define OP_LD_TABLE(width) \ | 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 | #define OP_ST_TABLE(width) \ | 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 | #define GEN_LD(width, opc, type) \ | 2163 | #define GEN_LD(width, opc, type) \ |
2238 | GEN_HANDLER(l##width, opc, 0xFF, 0xFF, 0x00000000, type) \ | 2164 | GEN_HANDLER(l##width, opc, 0xFF, 0xFF, 0x00000000, type) \ |
@@ -2487,75 +2413,12 @@ GEN_STX(wbr, 0x16, 0x14, PPC_INTEGER); | @@ -2487,75 +2413,12 @@ GEN_STX(wbr, 0x16, 0x14, PPC_INTEGER); | ||
2487 | 2413 | ||
2488 | /*** Integer load and store multiple ***/ | 2414 | /*** Integer load and store multiple ***/ |
2489 | #define op_ldstm(name, reg) (*gen_op_##name[ctx->mem_idx])(reg) | 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 | /* lmw */ | 2423 | /* lmw */ |
2561 | GEN_HANDLER(lmw, 0x2E, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) | 2424 | GEN_HANDLER(lmw, 0x2E, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) |
@@ -2578,105 +2441,15 @@ GEN_HANDLER(stmw, 0x2F, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) | @@ -2578,105 +2441,15 @@ GEN_HANDLER(stmw, 0x2F, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) | ||
2578 | /*** Integer load and store strings ***/ | 2441 | /*** Integer load and store strings ***/ |
2579 | #define op_ldsts(name, start) (*gen_op_##name[ctx->mem_idx])(start) | 2442 | #define op_ldsts(name, start) (*gen_op_##name[ctx->mem_idx])(start) |
2580 | #define op_ldstsx(name, rd, ra, rb) (*gen_op_##name[ctx->mem_idx])(rd, ra, rb) | 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 | /* lswi */ | 2454 | /* lswi */ |
2682 | /* PowerPC32 specification says we must generate an exception if | 2455 | /* PowerPC32 specification says we must generate an exception if |
@@ -2762,75 +2535,12 @@ GEN_HANDLER(isync, 0x13, 0x16, 0x04, 0x03FFF801, PPC_MEM) | @@ -2762,75 +2535,12 @@ GEN_HANDLER(isync, 0x13, 0x16, 0x04, 0x03FFF801, PPC_MEM) | ||
2762 | 2535 | ||
2763 | #define op_lwarx() (*gen_op_lwarx[ctx->mem_idx])() | 2536 | #define op_lwarx() (*gen_op_lwarx[ctx->mem_idx])() |
2764 | #define op_stwcx() (*gen_op_stwcx[ctx->mem_idx])() | 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 | /* lwarx */ | 2545 | /* lwarx */ |
2836 | GEN_HANDLER(lwarx, 0x1F, 0x14, 0x00, 0x00000001, PPC_RES) | 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,55 +2565,12 @@ GEN_HANDLER2(stwcx_, "stwcx.", 0x1F, 0x16, 0x04, 0x00000000, PPC_RES) | ||
2855 | #if defined(TARGET_PPC64) | 2565 | #if defined(TARGET_PPC64) |
2856 | #define op_ldarx() (*gen_op_ldarx[ctx->mem_idx])() | 2566 | #define op_ldarx() (*gen_op_ldarx[ctx->mem_idx])() |
2857 | #define op_stdcx() (*gen_op_stdcx[ctx->mem_idx])() | 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 | /* ldarx */ | 2575 | /* ldarx */ |
2909 | GEN_HANDLER(ldarx, 0x1F, 0x14, 0x02, 0x00000001, PPC_64B) | 2576 | GEN_HANDLER(ldarx, 0x1F, 0x14, 0x02, 0x00000001, PPC_64B) |
@@ -3406,9 +3073,7 @@ GEN_HANDLER(rfid, 0x13, 0x12, 0x00, 0x03FF8001, PPC_64B) | @@ -3406,9 +3073,7 @@ GEN_HANDLER(rfid, 0x13, 0x12, 0x00, 0x03FF8001, PPC_64B) | ||
3406 | GEN_SYNC(ctx); | 3073 | GEN_SYNC(ctx); |
3407 | #endif | 3074 | #endif |
3408 | } | 3075 | } |
3409 | -#endif | ||
3410 | 3076 | ||
3411 | -#if defined(TARGET_PPC64H) | ||
3412 | GEN_HANDLER(hrfid, 0x13, 0x12, 0x08, 0x03FF8001, PPC_64B) | 3077 | GEN_HANDLER(hrfid, 0x13, 0x12, 0x08, 0x03FF8001, PPC_64B) |
3413 | { | 3078 | { |
3414 | #if defined(CONFIG_USER_ONLY) | 3079 | #if defined(CONFIG_USER_ONLY) |
@@ -3542,12 +3207,9 @@ static always_inline void gen_op_mfspr (DisasContext *ctx) | @@ -3542,12 +3207,9 @@ static always_inline void gen_op_mfspr (DisasContext *ctx) | ||
3542 | uint32_t sprn = SPR(ctx->opcode); | 3207 | uint32_t sprn = SPR(ctx->opcode); |
3543 | 3208 | ||
3544 | #if !defined(CONFIG_USER_ONLY) | 3209 | #if !defined(CONFIG_USER_ONLY) |
3545 | -#if defined(TARGET_PPC64H) | ||
3546 | if (ctx->supervisor == 2) | 3210 | if (ctx->supervisor == 2) |
3547 | read_cb = ctx->spr_cb[sprn].hea_read; | 3211 | read_cb = ctx->spr_cb[sprn].hea_read; |
3548 | - else | ||
3549 | -#endif | ||
3550 | - if (ctx->supervisor) | 3212 | + else if (ctx->supervisor) |
3551 | read_cb = ctx->spr_cb[sprn].oea_read; | 3213 | read_cb = ctx->spr_cb[sprn].oea_read; |
3552 | else | 3214 | else |
3553 | #endif | 3215 | #endif |
@@ -3682,12 +3344,9 @@ GEN_HANDLER(mtspr, 0x1F, 0x13, 0x0E, 0x00000001, PPC_MISC) | @@ -3682,12 +3344,9 @@ GEN_HANDLER(mtspr, 0x1F, 0x13, 0x0E, 0x00000001, PPC_MISC) | ||
3682 | uint32_t sprn = SPR(ctx->opcode); | 3344 | uint32_t sprn = SPR(ctx->opcode); |
3683 | 3345 | ||
3684 | #if !defined(CONFIG_USER_ONLY) | 3346 | #if !defined(CONFIG_USER_ONLY) |
3685 | -#if defined(TARGET_PPC64H) | ||
3686 | if (ctx->supervisor == 2) | 3347 | if (ctx->supervisor == 2) |
3687 | write_cb = ctx->spr_cb[sprn].hea_write; | 3348 | write_cb = ctx->spr_cb[sprn].hea_write; |
3688 | - else | ||
3689 | -#endif | ||
3690 | - if (ctx->supervisor) | 3349 | + else if (ctx->supervisor) |
3691 | write_cb = ctx->spr_cb[sprn].oea_write; | 3350 | write_cb = ctx->spr_cb[sprn].oea_write; |
3692 | else | 3351 | else |
3693 | #endif | 3352 | #endif |
@@ -3773,141 +3432,56 @@ GEN_HANDLER(dcbtst, 0x1F, 0x16, 0x07, 0x02000001, PPC_CACHE) | @@ -3773,141 +3432,56 @@ GEN_HANDLER(dcbtst, 0x1F, 0x16, 0x07, 0x02000001, PPC_CACHE) | ||
3773 | 3432 | ||
3774 | /* dcbz */ | 3433 | /* dcbz */ |
3775 | #define op_dcbz(n) (*gen_op_dcbz[n][ctx->mem_idx])() | 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 | static always_inline void handler_dcbz (DisasContext *ctx, | 3486 | static always_inline void handler_dcbz (DisasContext *ctx, |
3913 | int dcache_line_size) | 3487 | int dcache_line_size) |
@@ -3950,45 +3524,17 @@ GEN_HANDLER2(dcbz_970, "dcbz", 0x1F, 0x16, 0x1F, 0x03C00001, PPC_CACHE_DCBZT) | @@ -3950,45 +3524,17 @@ GEN_HANDLER2(dcbz_970, "dcbz", 0x1F, 0x16, 0x1F, 0x03C00001, PPC_CACHE_DCBZT) | ||
3950 | 3524 | ||
3951 | /* icbi */ | 3525 | /* icbi */ |
3952 | #define op_icbi() (*gen_op_icbi[ctx->mem_idx])() | 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 | GEN_HANDLER(icbi, 0x1F, 0x16, 0x1E, 0x03E00001, PPC_CACHE_ICBI) | 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,75 +3785,12 @@ GEN_HANDLER(slbie, 0x1F, 0x12, 0x0D, 0x03FF0001, PPC_SLBI) | ||
4239 | /* Optional: */ | 3785 | /* Optional: */ |
4240 | #define op_eciwx() (*gen_op_eciwx[ctx->mem_idx])() | 3786 | #define op_eciwx() (*gen_op_eciwx[ctx->mem_idx])() |
4241 | #define op_ecowx() (*gen_op_ecowx[ctx->mem_idx])() | 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 | /* eciwx */ | 3795 | /* eciwx */ |
4313 | GEN_HANDLER(eciwx, 0x1F, 0x16, 0x0D, 0x00000001, PPC_EXTERN) | 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,22 +3915,26 @@ GEN_HANDLER(dozi, 0x09, 0xFF, 0xFF, 0x00000000, PPC_POWER_BR) | ||
4432 | gen_op_store_T0_gpr(rD(ctx->opcode)); | 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 | #define op_POWER_lscbx(start, ra, rb) \ | 3921 | #define op_POWER_lscbx(start, ra, rb) \ |
4437 | (*gen_op_POWER_lscbx[ctx->mem_idx])(start, ra, rb) | 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 | /* lscbx - lscbx. */ | 3939 | /* lscbx - lscbx. */ |
4453 | GEN_HANDLER(lscbx, 0x1F, 0x15, 0x08, 0x00000000, PPC_POWER_BR) | 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,31 +4388,31 @@ GEN_HANDLER(rfsvc, 0x13, 0x12, 0x02, 0x03FFF0001, PPC_POWER) | ||
4901 | 4388 | ||
4902 | /* POWER2 specific instructions */ | 4389 | /* POWER2 specific instructions */ |
4903 | /* Quad manipulation (load/store two floats at a time) */ | 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 | #define op_POWER2_lfq() (*gen_op_POWER2_lfq[ctx->mem_idx])() | 4392 | #define op_POWER2_lfq() (*gen_op_POWER2_lfq[ctx->mem_idx])() |
4905 | #define op_POWER2_stfq() (*gen_op_POWER2_stfq[ctx->mem_idx])() | 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 | /* lfq */ | 4417 | /* lfq */ |
4931 | GEN_HANDLER(lfq, 0x38, 0xFF, 0xFF, 0x00000003, PPC_POWER2) | 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,111 +5174,14 @@ GEN32(gen_op_store_A2_avr, gen_op_store_A2_avr_avr); | ||
5687 | #endif | 5174 | #endif |
5688 | 5175 | ||
5689 | #define op_vr_ldst(name) (*gen_op_##name[ctx->mem_idx])() | 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 | #define OP_VR_LD_TABLE(name) \ | 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 | #define OP_VR_ST_TABLE(name) \ | 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 | #define GEN_VR_LDX(name, opc2, opc3) \ | 5186 | #define GEN_VR_LDX(name, opc2, opc3) \ |
5797 | GEN_HANDLER(l##name, 0x1F, opc2, opc3, 0x00000001, PPC_ALTIVEC) \ | 5187 | GEN_HANDLER(l##name, 0x1F, opc2, opc3, 0x00000001, PPC_ALTIVEC) \ |
@@ -5830,7 +5220,6 @@ GEN_VR_STX(vx, 0x07, 0x07); | @@ -5830,7 +5220,6 @@ GEN_VR_STX(vx, 0x07, 0x07); | ||
5830 | GEN_VR_STX(vxl, 0x07, 0x0F); | 5220 | GEN_VR_STX(vxl, 0x07, 0x0F); |
5831 | 5221 | ||
5832 | /*** SPE extension ***/ | 5222 | /*** SPE extension ***/ |
5833 | - | ||
5834 | /* Register moves */ | 5223 | /* Register moves */ |
5835 | #if !defined(TARGET_PPC64) | 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,111 +5282,14 @@ static always_inline void gen_addr_spe_imm_index (DisasContext *ctx, int sh) | ||
5893 | } | 5282 | } |
5894 | 5283 | ||
5895 | #define op_spe_ldst(name) (*gen_op_##name[ctx->mem_idx])() | 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 | #define OP_SPE_LD_TABLE(name) \ | 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 | #define OP_SPE_ST_TABLE(name) \ | 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 | #define GEN_SPE_LD(name, sh) \ | 5294 | #define GEN_SPE_LD(name, sh) \ |
6003 | static always_inline void gen_evl##name (DisasContext *ctx) \ | 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,45 +5550,38 @@ GEN_HANDLER2(evsel3, "evsel", 0x04, 0x1f, 0x09, 0x00000000, PPC_SPE) | ||
6258 | /* In that case, we already have 64 bits load & stores | 5550 | /* In that case, we already have 64 bits load & stores |
6259 | * so, spe_ldd is equivalent to ld and spe_std is equivalent to std | 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 | #endif /* defined(TARGET_PPC64) */ | 5585 | #endif /* defined(TARGET_PPC64) */ |
6301 | GEN_SPEOP_LDST(dd, 3); | 5586 | GEN_SPEOP_LDST(dd, 3); |
6302 | GEN_SPEOP_LDST(dw, 3); | 5587 | GEN_SPEOP_LDST(dw, 3); |
@@ -6308,27 +5593,22 @@ GEN_SPEOP_ST(who, 2); | @@ -6308,27 +5593,22 @@ GEN_SPEOP_ST(who, 2); | ||
6308 | 5593 | ||
6309 | #if defined(TARGET_PPC64) | 5594 | #if defined(TARGET_PPC64) |
6310 | /* In that case, spe_stwwo is equivalent to stw */ | 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 | #define gen_op_spe_stwwo_le_64_kernel gen_op_stw_le_64_kernel | 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 | #endif | 5612 | #endif |
6333 | #define _GEN_OP_SPE_STWWE(suffix) \ | 5613 | #define _GEN_OP_SPE_STWWE(suffix) \ |
6334 | static always_inline void gen_op_spe_stwwe_##suffix (void) \ | 5614 | static always_inline void gen_op_spe_stwwe_##suffix (void) \ |
@@ -6364,11 +5644,9 @@ _GEN_OP_SPE_STWWE_LE(suffix) | @@ -6364,11 +5644,9 @@ _GEN_OP_SPE_STWWE_LE(suffix) | ||
6364 | #if defined(CONFIG_USER_ONLY) | 5644 | #if defined(CONFIG_USER_ONLY) |
6365 | GEN_OP_SPE_STWWE(raw); | 5645 | GEN_OP_SPE_STWWE(raw); |
6366 | #else /* defined(CONFIG_USER_ONLY) */ | 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 | GEN_OP_SPE_STWWE(user); | 5647 | GEN_OP_SPE_STWWE(user); |
5648 | +GEN_OP_SPE_STWWE(kernel); | ||
5649 | +GEN_OP_SPE_STWWE(hypv); | ||
6372 | #endif /* defined(CONFIG_USER_ONLY) */ | 5650 | #endif /* defined(CONFIG_USER_ONLY) */ |
6373 | GEN_SPEOP_ST(wwe, 2); | 5651 | GEN_SPEOP_ST(wwe, 2); |
6374 | GEN_SPEOP_ST(wwo, 2); | 5652 | GEN_SPEOP_ST(wwo, 2); |
@@ -6418,107 +5696,67 @@ GEN_OP_SPE_LHX(le_64_raw); | @@ -6418,107 +5696,67 @@ GEN_OP_SPE_LHX(le_64_raw); | ||
6418 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_raw); | 5696 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_raw); |
6419 | #endif | 5697 | #endif |
6420 | #else | 5698 | #else |
6421 | -#if defined(TARGET_PPC64H) | ||
6422 | -GEN_OP_SPE_LHE(hypv); | ||
6423 | -#endif | ||
6424 | -GEN_OP_SPE_LHE(kernel); | ||
6425 | GEN_OP_SPE_LHE(user); | 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 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, user); | 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 | GEN_OP_SPE_LHE(le_user); | 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 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_user); | 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 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, user); | 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 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_user); | 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 | GEN_OP_SPE_LHX(user); | 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 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, user); | 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 | GEN_OP_SPE_LHX(le_user); | 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 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_user); | 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 | #if defined(TARGET_PPC64) | 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 | GEN_OP_SPE_LHE(64_user); | 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 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, 64_user); | 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 | GEN_OP_SPE_LHE(le_64_user); | 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 | GEN_SPE_LDSPLAT(hhesplat, spe_lhe, le_64_user); | 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 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, 64_user); | 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 | GEN_SPE_LDSPLAT(hhousplat, spe_lh, le_64_user); | 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 | GEN_OP_SPE_LHX(64_user); | 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 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, 64_user); | 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 | GEN_OP_SPE_LHX(le_64_user); | 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 | GEN_SPE_LDSPLAT(hhossplat, spe_lhx, le_64_user); | 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 | #endif | 5760 | #endif |
6523 | #endif | 5761 | #endif |
6524 | GEN_SPEOP_LD(hhesplat, 1); | 5762 | GEN_SPEOP_LD(hhesplat, 1); |
translate-all.c
@@ -264,7 +264,8 @@ int cpu_restore_state(TranslationBlock *tb, | @@ -264,7 +264,8 @@ int cpu_restore_state(TranslationBlock *tb, | ||
264 | #else | 264 | #else |
265 | #define CASE3(op)\ | 265 | #define CASE3(op)\ |
266 | case INDEX_op_ ## op ## _user:\ | 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 | #endif | 269 | #endif |
269 | 270 | ||
270 | CASE3(stfd): | 271 | CASE3(stfd): |