Commit b172c56a6d849554f7e43adc95983a9d6c042689
1 parent
5a6932d5
Always make all PowerPC exception definitions visible.
Always make the hypervisor timers available. Remove all TARGET_PPC64H checks, keeping a few if (0) tests for cases that cannot be properly handled with the current PowerPC CPU definition. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3656 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
7 changed files
with
69 additions
and
76 deletions
darwin-user/main.c
@@ -386,7 +386,6 @@ void cpu_loop(CPUPPCState *env) | @@ -386,7 +386,6 @@ void cpu_loop(CPUPPCState *env) | ||
386 | cpu_abort(env, "Reset interrupt while in user mode. " | 386 | cpu_abort(env, "Reset interrupt while in user mode. " |
387 | "Aborting\n"); | 387 | "Aborting\n"); |
388 | break; | 388 | break; |
389 | -#if defined(TARGET_PPC64) /* PowerPC 64 */ | ||
390 | case POWERPC_EXCP_DSEG: /* Data segment exception */ | 389 | case POWERPC_EXCP_DSEG: /* Data segment exception */ |
391 | cpu_abort(env, "Data segment exception while in user mode. " | 390 | cpu_abort(env, "Data segment exception while in user mode. " |
392 | "Aborting\n"); | 391 | "Aborting\n"); |
@@ -395,19 +394,15 @@ void cpu_loop(CPUPPCState *env) | @@ -395,19 +394,15 @@ void cpu_loop(CPUPPCState *env) | ||
395 | cpu_abort(env, "Instruction segment exception " | 394 | cpu_abort(env, "Instruction segment exception " |
396 | "while in user mode. Aborting\n"); | 395 | "while in user mode. Aborting\n"); |
397 | break; | 396 | break; |
398 | -#endif /* defined(TARGET_PPC64) */ | ||
399 | -#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */ | ||
400 | case POWERPC_EXCP_HDECR: /* Hypervisor decrementer exception */ | 397 | case POWERPC_EXCP_HDECR: /* Hypervisor decrementer exception */ |
401 | cpu_abort(env, "Hypervisor decrementer interrupt " | 398 | cpu_abort(env, "Hypervisor decrementer interrupt " |
402 | "while in user mode. Aborting\n"); | 399 | "while in user mode. Aborting\n"); |
403 | break; | 400 | break; |
404 | -#endif /* defined(TARGET_PPC64H) */ | ||
405 | case POWERPC_EXCP_TRACE: /* Trace exception */ | 401 | case POWERPC_EXCP_TRACE: /* Trace exception */ |
406 | /* Nothing to do: | 402 | /* Nothing to do: |
407 | * we use this exception to emulate step-by-step execution mode. | 403 | * we use this exception to emulate step-by-step execution mode. |
408 | */ | 404 | */ |
409 | break; | 405 | break; |
410 | -#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */ | ||
411 | case POWERPC_EXCP_HDSI: /* Hypervisor data storage exception */ | 406 | case POWERPC_EXCP_HDSI: /* Hypervisor data storage exception */ |
412 | cpu_abort(env, "Hypervisor data storage exception " | 407 | cpu_abort(env, "Hypervisor data storage exception " |
413 | "while in user mode. Aborting\n"); | 408 | "while in user mode. Aborting\n"); |
@@ -424,7 +419,6 @@ void cpu_loop(CPUPPCState *env) | @@ -424,7 +419,6 @@ void cpu_loop(CPUPPCState *env) | ||
424 | cpu_abort(env, "Hypervisor instruction segment exception " | 419 | cpu_abort(env, "Hypervisor instruction segment exception " |
425 | "while in user mode. Aborting\n"); | 420 | "while in user mode. Aborting\n"); |
426 | break; | 421 | break; |
427 | -#endif /* defined(TARGET_PPC64H) */ | ||
428 | case POWERPC_EXCP_VPU: /* Vector unavailable exception */ | 422 | case POWERPC_EXCP_VPU: /* Vector unavailable exception */ |
429 | EXCP_DUMP(env, "No Altivec instructions allowed\n"); | 423 | EXCP_DUMP(env, "No Altivec instructions allowed\n"); |
430 | info.si_signo = SIGILL; | 424 | info.si_signo = SIGILL; |
hw/ppc.c
@@ -428,13 +428,11 @@ struct ppc_tb_t { | @@ -428,13 +428,11 @@ struct ppc_tb_t { | ||
428 | uint64_t decr_next; /* Tick for next decr interrupt */ | 428 | uint64_t decr_next; /* Tick for next decr interrupt */ |
429 | uint32_t decr_freq; /* decrementer frequency */ | 429 | uint32_t decr_freq; /* decrementer frequency */ |
430 | struct QEMUTimer *decr_timer; | 430 | struct QEMUTimer *decr_timer; |
431 | -#if defined(TARGET_PPC64H) | ||
432 | /* Hypervisor decrementer management */ | 431 | /* Hypervisor decrementer management */ |
433 | uint64_t hdecr_next; /* Tick for next hdecr interrupt */ | 432 | uint64_t hdecr_next; /* Tick for next hdecr interrupt */ |
434 | struct QEMUTimer *hdecr_timer; | 433 | struct QEMUTimer *hdecr_timer; |
435 | uint64_t purr_load; | 434 | uint64_t purr_load; |
436 | uint64_t purr_start; | 435 | uint64_t purr_start; |
437 | -#endif | ||
438 | void *opaque; | 436 | void *opaque; |
439 | }; | 437 | }; |
440 | 438 | ||
@@ -643,7 +641,6 @@ uint32_t cpu_ppc_load_decr (CPUState *env) | @@ -643,7 +641,6 @@ uint32_t cpu_ppc_load_decr (CPUState *env) | ||
643 | return _cpu_ppc_load_decr(env, &tb_env->decr_next); | 641 | return _cpu_ppc_load_decr(env, &tb_env->decr_next); |
644 | } | 642 | } |
645 | 643 | ||
646 | -#if defined(TARGET_PPC64H) | ||
647 | uint32_t cpu_ppc_load_hdecr (CPUState *env) | 644 | uint32_t cpu_ppc_load_hdecr (CPUState *env) |
648 | { | 645 | { |
649 | ppc_tb_t *tb_env = env->tb_env; | 646 | ppc_tb_t *tb_env = env->tb_env; |
@@ -660,7 +657,6 @@ uint64_t cpu_ppc_load_purr (CPUState *env) | @@ -660,7 +657,6 @@ uint64_t cpu_ppc_load_purr (CPUState *env) | ||
660 | 657 | ||
661 | return tb_env->purr_load + muldiv64(diff, tb_env->tb_freq, ticks_per_sec); | 658 | return tb_env->purr_load + muldiv64(diff, tb_env->tb_freq, ticks_per_sec); |
662 | } | 659 | } |
663 | -#endif /* defined(TARGET_PPC64H) */ | ||
664 | 660 | ||
665 | /* When decrementer expires, | 661 | /* When decrementer expires, |
666 | * all we need to do is generate or queue a CPU exception | 662 | * all we need to do is generate or queue a CPU exception |
@@ -736,14 +732,15 @@ static void cpu_ppc_decr_cb (void *opaque) | @@ -736,14 +732,15 @@ static void cpu_ppc_decr_cb (void *opaque) | ||
736 | _cpu_ppc_store_decr(opaque, 0x00000000, 0xFFFFFFFF, 1); | 732 | _cpu_ppc_store_decr(opaque, 0x00000000, 0xFFFFFFFF, 1); |
737 | } | 733 | } |
738 | 734 | ||
739 | -#if defined(TARGET_PPC64H) | ||
740 | static always_inline void _cpu_ppc_store_hdecr (CPUState *env, uint32_t hdecr, | 735 | static always_inline void _cpu_ppc_store_hdecr (CPUState *env, uint32_t hdecr, |
741 | uint32_t value, int is_excp) | 736 | uint32_t value, int is_excp) |
742 | { | 737 | { |
743 | ppc_tb_t *tb_env = env->tb_env; | 738 | ppc_tb_t *tb_env = env->tb_env; |
744 | 739 | ||
745 | - __cpu_ppc_store_decr(env, &tb_env->hdecr_next, tb_env->hdecr_timer, | ||
746 | - &cpu_ppc_hdecr_excp, hdecr, value, is_excp); | 740 | + if (tb_env->hdecr_timer != NULL) { |
741 | + __cpu_ppc_store_decr(env, &tb_env->hdecr_next, tb_env->hdecr_timer, | ||
742 | + &cpu_ppc_hdecr_excp, hdecr, value, is_excp); | ||
743 | + } | ||
747 | } | 744 | } |
748 | 745 | ||
749 | void cpu_ppc_store_hdecr (CPUState *env, uint32_t value) | 746 | void cpu_ppc_store_hdecr (CPUState *env, uint32_t value) |
@@ -763,7 +760,6 @@ void cpu_ppc_store_purr (CPUState *env, uint64_t value) | @@ -763,7 +760,6 @@ void cpu_ppc_store_purr (CPUState *env, uint64_t value) | ||
763 | tb_env->purr_load = value; | 760 | tb_env->purr_load = value; |
764 | tb_env->purr_start = qemu_get_clock(vm_clock); | 761 | tb_env->purr_start = qemu_get_clock(vm_clock); |
765 | } | 762 | } |
766 | -#endif /* defined(TARGET_PPC64H) */ | ||
767 | 763 | ||
768 | static void cpu_ppc_set_tb_clk (void *opaque, uint32_t freq) | 764 | static void cpu_ppc_set_tb_clk (void *opaque, uint32_t freq) |
769 | { | 765 | { |
@@ -777,10 +773,8 @@ static void cpu_ppc_set_tb_clk (void *opaque, uint32_t freq) | @@ -777,10 +773,8 @@ static void cpu_ppc_set_tb_clk (void *opaque, uint32_t freq) | ||
777 | * it's not ready to handle it... | 773 | * it's not ready to handle it... |
778 | */ | 774 | */ |
779 | _cpu_ppc_store_decr(env, 0xFFFFFFFF, 0xFFFFFFFF, 0); | 775 | _cpu_ppc_store_decr(env, 0xFFFFFFFF, 0xFFFFFFFF, 0); |
780 | -#if defined(TARGET_PPC64H) | ||
781 | _cpu_ppc_store_hdecr(env, 0xFFFFFFFF, 0xFFFFFFFF, 0); | 776 | _cpu_ppc_store_hdecr(env, 0xFFFFFFFF, 0xFFFFFFFF, 0); |
782 | cpu_ppc_store_purr(env, 0x0000000000000000ULL); | 777 | cpu_ppc_store_purr(env, 0x0000000000000000ULL); |
783 | -#endif /* defined(TARGET_PPC64H) */ | ||
784 | } | 778 | } |
785 | 779 | ||
786 | /* Set up (once) timebase frequency (in Hz) */ | 780 | /* Set up (once) timebase frequency (in Hz) */ |
@@ -794,9 +788,13 @@ clk_setup_cb cpu_ppc_tb_init (CPUState *env, uint32_t freq) | @@ -794,9 +788,13 @@ clk_setup_cb cpu_ppc_tb_init (CPUState *env, uint32_t freq) | ||
794 | env->tb_env = tb_env; | 788 | env->tb_env = tb_env; |
795 | /* Create new timer */ | 789 | /* Create new timer */ |
796 | tb_env->decr_timer = qemu_new_timer(vm_clock, &cpu_ppc_decr_cb, env); | 790 | tb_env->decr_timer = qemu_new_timer(vm_clock, &cpu_ppc_decr_cb, env); |
797 | -#if defined(TARGET_PPC64H) | ||
798 | - tb_env->hdecr_timer = qemu_new_timer(vm_clock, &cpu_ppc_hdecr_cb, env); | ||
799 | -#endif /* defined(TARGET_PPC64H) */ | 791 | + if (0) { |
792 | + /* XXX: find a suitable condition to enable the hypervisor decrementer | ||
793 | + */ | ||
794 | + tb_env->hdecr_timer = qemu_new_timer(vm_clock, &cpu_ppc_hdecr_cb, env); | ||
795 | + } else { | ||
796 | + tb_env->hdecr_timer = NULL; | ||
797 | + } | ||
800 | cpu_ppc_set_tb_clk(env, freq); | 798 | cpu_ppc_set_tb_clk(env, freq); |
801 | 799 | ||
802 | return &cpu_ppc_set_tb_clk; | 800 | return &cpu_ppc_set_tb_clk; |
linux-user/main.c
@@ -1047,7 +1047,6 @@ void cpu_loop(CPUPPCState *env) | @@ -1047,7 +1047,6 @@ void cpu_loop(CPUPPCState *env) | ||
1047 | cpu_abort(env, "Reset interrupt while in user mode. " | 1047 | cpu_abort(env, "Reset interrupt while in user mode. " |
1048 | "Aborting\n"); | 1048 | "Aborting\n"); |
1049 | break; | 1049 | break; |
1050 | -#if defined(TARGET_PPC64) && !defined(TARGET_ABI32) /* PowerPC 64 */ | ||
1051 | case POWERPC_EXCP_DSEG: /* Data segment exception */ | 1050 | case POWERPC_EXCP_DSEG: /* Data segment exception */ |
1052 | cpu_abort(env, "Data segment exception while in user mode. " | 1051 | cpu_abort(env, "Data segment exception while in user mode. " |
1053 | "Aborting\n"); | 1052 | "Aborting\n"); |
@@ -1056,20 +1055,16 @@ void cpu_loop(CPUPPCState *env) | @@ -1056,20 +1055,16 @@ void cpu_loop(CPUPPCState *env) | ||
1056 | cpu_abort(env, "Instruction segment exception " | 1055 | cpu_abort(env, "Instruction segment exception " |
1057 | "while in user mode. Aborting\n"); | 1056 | "while in user mode. Aborting\n"); |
1058 | break; | 1057 | break; |
1059 | -#endif /* defined(TARGET_PPC64) && !defined(TARGET_ABI32) */ | ||
1060 | -#if defined(TARGET_PPC64H) && !defined(TARGET_ABI32) | ||
1061 | /* PowerPC 64 with hypervisor mode support */ | 1058 | /* PowerPC 64 with hypervisor mode support */ |
1062 | case POWERPC_EXCP_HDECR: /* Hypervisor decrementer exception */ | 1059 | case POWERPC_EXCP_HDECR: /* Hypervisor decrementer exception */ |
1063 | cpu_abort(env, "Hypervisor decrementer interrupt " | 1060 | cpu_abort(env, "Hypervisor decrementer interrupt " |
1064 | "while in user mode. Aborting\n"); | 1061 | "while in user mode. Aborting\n"); |
1065 | break; | 1062 | break; |
1066 | -#endif /* defined(TARGET_PPC64H) && !defined(TARGET_ABI32) */ | ||
1067 | case POWERPC_EXCP_TRACE: /* Trace exception */ | 1063 | case POWERPC_EXCP_TRACE: /* Trace exception */ |
1068 | /* Nothing to do: | 1064 | /* Nothing to do: |
1069 | * we use this exception to emulate step-by-step execution mode. | 1065 | * we use this exception to emulate step-by-step execution mode. |
1070 | */ | 1066 | */ |
1071 | break; | 1067 | break; |
1072 | -#if defined(TARGET_PPC64H) && !defined(TARGET_ABI32) | ||
1073 | /* PowerPC 64 with hypervisor mode support */ | 1068 | /* PowerPC 64 with hypervisor mode support */ |
1074 | case POWERPC_EXCP_HDSI: /* Hypervisor data storage exception */ | 1069 | case POWERPC_EXCP_HDSI: /* Hypervisor data storage exception */ |
1075 | cpu_abort(env, "Hypervisor data storage exception " | 1070 | cpu_abort(env, "Hypervisor data storage exception " |
@@ -1087,7 +1082,6 @@ void cpu_loop(CPUPPCState *env) | @@ -1087,7 +1082,6 @@ void cpu_loop(CPUPPCState *env) | ||
1087 | cpu_abort(env, "Hypervisor instruction segment exception " | 1082 | cpu_abort(env, "Hypervisor instruction segment exception " |
1088 | "while in user mode. Aborting\n"); | 1083 | "while in user mode. Aborting\n"); |
1089 | break; | 1084 | break; |
1090 | -#endif /* defined(TARGET_PPC64H) && !defined(TARGET_ABI32) */ | ||
1091 | case POWERPC_EXCP_VPU: /* Vector unavailable exception */ | 1085 | case POWERPC_EXCP_VPU: /* Vector unavailable exception */ |
1092 | EXCP_DUMP(env, "No Altivec instructions allowed\n"); | 1086 | EXCP_DUMP(env, "No Altivec instructions allowed\n"); |
1093 | info.si_signo = TARGET_SIGILL; | 1087 | info.si_signo = TARGET_SIGILL; |
target-ppc/cpu.h
@@ -180,20 +180,14 @@ enum { | @@ -180,20 +180,14 @@ enum { | ||
180 | /* Vectors 38 to 63 are reserved */ | 180 | /* Vectors 38 to 63 are reserved */ |
181 | /* Exceptions defined in the PowerPC server specification */ | 181 | /* Exceptions defined in the PowerPC server specification */ |
182 | POWERPC_EXCP_RESET = 64, /* System reset exception */ | 182 | POWERPC_EXCP_RESET = 64, /* System reset exception */ |
183 | -#if defined(TARGET_PPC64) /* PowerPC 64 */ | ||
184 | POWERPC_EXCP_DSEG = 65, /* Data segment exception */ | 183 | POWERPC_EXCP_DSEG = 65, /* Data segment exception */ |
185 | POWERPC_EXCP_ISEG = 66, /* Instruction segment exception */ | 184 | POWERPC_EXCP_ISEG = 66, /* Instruction segment exception */ |
186 | -#endif /* defined(TARGET_PPC64) */ | ||
187 | -#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */ | ||
188 | POWERPC_EXCP_HDECR = 67, /* Hypervisor decrementer exception */ | 185 | POWERPC_EXCP_HDECR = 67, /* Hypervisor decrementer exception */ |
189 | -#endif /* defined(TARGET_PPC64H) */ | ||
190 | POWERPC_EXCP_TRACE = 68, /* Trace exception */ | 186 | POWERPC_EXCP_TRACE = 68, /* Trace exception */ |
191 | -#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */ | ||
192 | POWERPC_EXCP_HDSI = 69, /* Hypervisor data storage exception */ | 187 | POWERPC_EXCP_HDSI = 69, /* Hypervisor data storage exception */ |
193 | POWERPC_EXCP_HISI = 70, /* Hypervisor instruction storage exception */ | 188 | POWERPC_EXCP_HISI = 70, /* Hypervisor instruction storage exception */ |
194 | POWERPC_EXCP_HDSEG = 71, /* Hypervisor data segment exception */ | 189 | POWERPC_EXCP_HDSEG = 71, /* Hypervisor data segment exception */ |
195 | POWERPC_EXCP_HISEG = 72, /* Hypervisor instruction segment exception */ | 190 | POWERPC_EXCP_HISEG = 72, /* Hypervisor instruction segment exception */ |
196 | -#endif /* defined(TARGET_PPC64H) */ | ||
197 | POWERPC_EXCP_VPU = 73, /* Vector unavailable exception */ | 191 | POWERPC_EXCP_VPU = 73, /* Vector unavailable exception */ |
198 | /* 40x specific exceptions */ | 192 | /* 40x specific exceptions */ |
199 | POWERPC_EXCP_PIT = 74, /* Programmable interval timer interrupt */ | 193 | POWERPC_EXCP_PIT = 74, /* Programmable interval timer interrupt */ |
@@ -736,12 +730,10 @@ void cpu_ppc_store_atbl (CPUPPCState *env, uint32_t value); | @@ -736,12 +730,10 @@ void cpu_ppc_store_atbl (CPUPPCState *env, uint32_t value); | ||
736 | void cpu_ppc_store_atbu (CPUPPCState *env, uint32_t value); | 730 | void cpu_ppc_store_atbu (CPUPPCState *env, uint32_t value); |
737 | uint32_t cpu_ppc_load_decr (CPUPPCState *env); | 731 | uint32_t cpu_ppc_load_decr (CPUPPCState *env); |
738 | void cpu_ppc_store_decr (CPUPPCState *env, uint32_t value); | 732 | void cpu_ppc_store_decr (CPUPPCState *env, uint32_t value); |
739 | -#if defined(TARGET_PPC64H) | ||
740 | uint32_t cpu_ppc_load_hdecr (CPUPPCState *env); | 733 | uint32_t cpu_ppc_load_hdecr (CPUPPCState *env); |
741 | void cpu_ppc_store_hdecr (CPUPPCState *env, uint32_t value); | 734 | void cpu_ppc_store_hdecr (CPUPPCState *env, uint32_t value); |
742 | uint64_t cpu_ppc_load_purr (CPUPPCState *env); | 735 | uint64_t cpu_ppc_load_purr (CPUPPCState *env); |
743 | void cpu_ppc_store_purr (CPUPPCState *env, uint64_t value); | 736 | void cpu_ppc_store_purr (CPUPPCState *env, uint64_t value); |
744 | -#endif | ||
745 | uint32_t cpu_ppc601_load_rtcl (CPUPPCState *env); | 737 | uint32_t cpu_ppc601_load_rtcl (CPUPPCState *env); |
746 | uint32_t cpu_ppc601_load_rtcu (CPUPPCState *env); | 738 | uint32_t cpu_ppc601_load_rtcu (CPUPPCState *env); |
747 | #if !defined(CONFIG_USER_ONLY) | 739 | #if !defined(CONFIG_USER_ONLY) |
target-ppc/helper.c
@@ -2134,13 +2134,21 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2134,13 +2134,21 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2134 | { | 2134 | { |
2135 | target_ulong msr, new_msr, vector; | 2135 | target_ulong msr, new_msr, vector; |
2136 | int srr0, srr1, asrr0, asrr1; | 2136 | int srr0, srr1, asrr0, asrr1; |
2137 | -#if defined(TARGET_PPC64H) | ||
2138 | - int lpes0, lpes1, lev; | ||
2139 | - | ||
2140 | - lpes0 = (env->spr[SPR_LPCR] >> 1) & 1; | ||
2141 | - lpes1 = (env->spr[SPR_LPCR] >> 2) & 1; | 2137 | + int lpes0, lpes1; |
2138 | +#if defined(TARGET_PPC64) | ||
2139 | + int lev; | ||
2142 | #endif | 2140 | #endif |
2143 | 2141 | ||
2142 | + if (0) { | ||
2143 | + /* XXX: find a suitable condition to enable the hypervisor mode */ | ||
2144 | + lpes0 = (env->spr[SPR_LPCR] >> 1) & 1; | ||
2145 | + lpes1 = (env->spr[SPR_LPCR] >> 2) & 1; | ||
2146 | + } else { | ||
2147 | + /* Those values ensure we won't enter the hypervisor mode */ | ||
2148 | + lpes0 = 0; | ||
2149 | + lpes1 = 1; | ||
2150 | + } | ||
2151 | + | ||
2144 | if (loglevel & CPU_LOG_INT) { | 2152 | if (loglevel & CPU_LOG_INT) { |
2145 | fprintf(logfile, "Raise exception at 0x" ADDRX " => 0x%08x (%02x)\n", | 2153 | fprintf(logfile, "Raise exception at 0x" ADDRX " => 0x%08x (%02x)\n", |
2146 | env->nip, excp, env->error_code); | 2154 | env->nip, excp, env->error_code); |
@@ -2190,8 +2198,11 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2190,8 +2198,11 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2190 | } | 2198 | } |
2191 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2199 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2192 | new_msr &= ~((target_ulong)1 << MSR_ME); | 2200 | new_msr &= ~((target_ulong)1 << MSR_ME); |
2193 | -#if defined(TARGET_PPC64H) | ||
2194 | - new_msr |= (target_ulong)1 << MSR_HV; | 2201 | +#if defined(TARGET_PPC64) |
2202 | + if (0) { | ||
2203 | + /* XXX: find a suitable condition to enable the hypervisor mode */ | ||
2204 | + new_msr |= (target_ulong)1 << MSR_HV; | ||
2205 | + } | ||
2195 | #endif | 2206 | #endif |
2196 | /* XXX: should also have something loaded in DAR / DSISR */ | 2207 | /* XXX: should also have something loaded in DAR / DSISR */ |
2197 | switch (excp_model) { | 2208 | switch (excp_model) { |
@@ -2217,7 +2228,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2217,7 +2228,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2217 | } | 2228 | } |
2218 | #endif | 2229 | #endif |
2219 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2230 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2220 | -#if defined(TARGET_PPC64H) | 2231 | +#if defined(TARGET_PPC64) |
2221 | if (lpes1 == 0) | 2232 | if (lpes1 == 0) |
2222 | new_msr |= (target_ulong)1 << MSR_HV; | 2233 | new_msr |= (target_ulong)1 << MSR_HV; |
2223 | #endif | 2234 | #endif |
@@ -2230,7 +2241,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2230,7 +2241,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2230 | } | 2241 | } |
2231 | #endif | 2242 | #endif |
2232 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2243 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2233 | -#if defined(TARGET_PPC64H) | 2244 | +#if defined(TARGET_PPC64) |
2234 | if (lpes1 == 0) | 2245 | if (lpes1 == 0) |
2235 | new_msr |= (target_ulong)1 << MSR_HV; | 2246 | new_msr |= (target_ulong)1 << MSR_HV; |
2236 | #endif | 2247 | #endif |
@@ -2238,14 +2249,14 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2238,14 +2249,14 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2238 | goto store_next; | 2249 | goto store_next; |
2239 | case POWERPC_EXCP_EXTERNAL: /* External input */ | 2250 | case POWERPC_EXCP_EXTERNAL: /* External input */ |
2240 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2251 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2241 | -#if defined(TARGET_PPC64H) | 2252 | +#if defined(TARGET_PPC64) |
2242 | if (lpes0 == 1) | 2253 | if (lpes0 == 1) |
2243 | new_msr |= (target_ulong)1 << MSR_HV; | 2254 | new_msr |= (target_ulong)1 << MSR_HV; |
2244 | #endif | 2255 | #endif |
2245 | goto store_next; | 2256 | goto store_next; |
2246 | case POWERPC_EXCP_ALIGN: /* Alignment exception */ | 2257 | case POWERPC_EXCP_ALIGN: /* Alignment exception */ |
2247 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2258 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2248 | -#if defined(TARGET_PPC64H) | 2259 | +#if defined(TARGET_PPC64) |
2249 | if (lpes1 == 0) | 2260 | if (lpes1 == 0) |
2250 | new_msr |= (target_ulong)1 << MSR_HV; | 2261 | new_msr |= (target_ulong)1 << MSR_HV; |
2251 | #endif | 2262 | #endif |
@@ -2267,7 +2278,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2267,7 +2278,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2267 | return; | 2278 | return; |
2268 | } | 2279 | } |
2269 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2280 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2270 | -#if defined(TARGET_PPC64H) | 2281 | +#if defined(TARGET_PPC64) |
2271 | if (lpes1 == 0) | 2282 | if (lpes1 == 0) |
2272 | new_msr |= (target_ulong)1 << MSR_HV; | 2283 | new_msr |= (target_ulong)1 << MSR_HV; |
2273 | #endif | 2284 | #endif |
@@ -2284,7 +2295,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2284,7 +2295,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2284 | } | 2295 | } |
2285 | #endif | 2296 | #endif |
2286 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2297 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2287 | -#if defined(TARGET_PPC64H) | 2298 | +#if defined(TARGET_PPC64) |
2288 | if (lpes1 == 0) | 2299 | if (lpes1 == 0) |
2289 | new_msr |= (target_ulong)1 << MSR_HV; | 2300 | new_msr |= (target_ulong)1 << MSR_HV; |
2290 | #endif | 2301 | #endif |
@@ -2292,7 +2303,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2292,7 +2303,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2292 | break; | 2303 | break; |
2293 | case POWERPC_EXCP_PRIV: | 2304 | case POWERPC_EXCP_PRIV: |
2294 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2305 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2295 | -#if defined(TARGET_PPC64H) | 2306 | +#if defined(TARGET_PPC64) |
2296 | if (lpes1 == 0) | 2307 | if (lpes1 == 0) |
2297 | new_msr |= (target_ulong)1 << MSR_HV; | 2308 | new_msr |= (target_ulong)1 << MSR_HV; |
2298 | #endif | 2309 | #endif |
@@ -2300,7 +2311,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2300,7 +2311,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2300 | break; | 2311 | break; |
2301 | case POWERPC_EXCP_TRAP: | 2312 | case POWERPC_EXCP_TRAP: |
2302 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2313 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2303 | -#if defined(TARGET_PPC64H) | 2314 | +#if defined(TARGET_PPC64) |
2304 | if (lpes1 == 0) | 2315 | if (lpes1 == 0) |
2305 | new_msr |= (target_ulong)1 << MSR_HV; | 2316 | new_msr |= (target_ulong)1 << MSR_HV; |
2306 | #endif | 2317 | #endif |
@@ -2315,7 +2326,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2315,7 +2326,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2315 | goto store_current; | 2326 | goto store_current; |
2316 | case POWERPC_EXCP_FPU: /* Floating-point unavailable exception */ | 2327 | case POWERPC_EXCP_FPU: /* Floating-point unavailable exception */ |
2317 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2328 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2318 | -#if defined(TARGET_PPC64H) | 2329 | +#if defined(TARGET_PPC64) |
2319 | if (lpes1 == 0) | 2330 | if (lpes1 == 0) |
2320 | new_msr |= (target_ulong)1 << MSR_HV; | 2331 | new_msr |= (target_ulong)1 << MSR_HV; |
2321 | #endif | 2332 | #endif |
@@ -2336,7 +2347,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2336,7 +2347,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2336 | dump_syscall(env); | 2347 | dump_syscall(env); |
2337 | } | 2348 | } |
2338 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2349 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2339 | -#if defined(TARGET_PPC64H) | 2350 | +#if defined(TARGET_PPC64) |
2340 | lev = env->error_code; | 2351 | lev = env->error_code; |
2341 | if (lev == 1 || (lpes0 == 0 && lpes1 == 0)) | 2352 | if (lev == 1 || (lpes0 == 0 && lpes1 == 0)) |
2342 | new_msr |= (target_ulong)1 << MSR_HV; | 2353 | new_msr |= (target_ulong)1 << MSR_HV; |
@@ -2347,7 +2358,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2347,7 +2358,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2347 | goto store_current; | 2358 | goto store_current; |
2348 | case POWERPC_EXCP_DECR: /* Decrementer exception */ | 2359 | case POWERPC_EXCP_DECR: /* Decrementer exception */ |
2349 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2360 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2350 | -#if defined(TARGET_PPC64H) | 2361 | +#if defined(TARGET_PPC64) |
2351 | if (lpes1 == 0) | 2362 | if (lpes1 == 0) |
2352 | new_msr |= (target_ulong)1 << MSR_HV; | 2363 | new_msr |= (target_ulong)1 << MSR_HV; |
2353 | #endif | 2364 | #endif |
@@ -2434,65 +2445,69 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2434,65 +2445,69 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2434 | goto store_next; | 2445 | goto store_next; |
2435 | case POWERPC_EXCP_RESET: /* System reset exception */ | 2446 | case POWERPC_EXCP_RESET: /* System reset exception */ |
2436 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2447 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2437 | -#if defined(TARGET_PPC64H) | 2448 | +#if defined(TARGET_PPC64) |
2438 | new_msr |= (target_ulong)1 << MSR_HV; | 2449 | new_msr |= (target_ulong)1 << MSR_HV; |
2439 | #endif | 2450 | #endif |
2440 | goto store_next; | 2451 | goto store_next; |
2441 | -#if defined(TARGET_PPC64) | ||
2442 | case POWERPC_EXCP_DSEG: /* Data segment exception */ | 2452 | case POWERPC_EXCP_DSEG: /* Data segment exception */ |
2443 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2453 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2444 | -#if defined(TARGET_PPC64H) | 2454 | +#if defined(TARGET_PPC64) |
2445 | if (lpes1 == 0) | 2455 | if (lpes1 == 0) |
2446 | new_msr |= (target_ulong)1 << MSR_HV; | 2456 | new_msr |= (target_ulong)1 << MSR_HV; |
2447 | #endif | 2457 | #endif |
2448 | goto store_next; | 2458 | goto store_next; |
2449 | case POWERPC_EXCP_ISEG: /* Instruction segment exception */ | 2459 | case POWERPC_EXCP_ISEG: /* Instruction segment exception */ |
2450 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2460 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2451 | -#if defined(TARGET_PPC64H) | 2461 | +#if defined(TARGET_PPC64) |
2452 | if (lpes1 == 0) | 2462 | if (lpes1 == 0) |
2453 | new_msr |= (target_ulong)1 << MSR_HV; | 2463 | new_msr |= (target_ulong)1 << MSR_HV; |
2454 | #endif | 2464 | #endif |
2455 | goto store_next; | 2465 | goto store_next; |
2456 | -#endif /* defined(TARGET_PPC64) */ | ||
2457 | -#if defined(TARGET_PPC64H) | ||
2458 | case POWERPC_EXCP_HDECR: /* Hypervisor decrementer exception */ | 2466 | case POWERPC_EXCP_HDECR: /* Hypervisor decrementer exception */ |
2459 | srr0 = SPR_HSRR0; | 2467 | srr0 = SPR_HSRR0; |
2460 | srr1 = SPR_HSRR1; | 2468 | srr1 = SPR_HSRR1; |
2469 | +#if defined(TARGET_PPC64) | ||
2461 | new_msr |= (target_ulong)1 << MSR_HV; | 2470 | new_msr |= (target_ulong)1 << MSR_HV; |
2462 | - goto store_next; | ||
2463 | #endif | 2471 | #endif |
2472 | + goto store_next; | ||
2464 | case POWERPC_EXCP_TRACE: /* Trace exception */ | 2473 | case POWERPC_EXCP_TRACE: /* Trace exception */ |
2465 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2474 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2466 | -#if defined(TARGET_PPC64H) | 2475 | +#if defined(TARGET_PPC64) |
2467 | if (lpes1 == 0) | 2476 | if (lpes1 == 0) |
2468 | new_msr |= (target_ulong)1 << MSR_HV; | 2477 | new_msr |= (target_ulong)1 << MSR_HV; |
2469 | #endif | 2478 | #endif |
2470 | goto store_next; | 2479 | goto store_next; |
2471 | -#if defined(TARGET_PPC64H) | ||
2472 | case POWERPC_EXCP_HDSI: /* Hypervisor data storage exception */ | 2480 | case POWERPC_EXCP_HDSI: /* Hypervisor data storage exception */ |
2473 | srr0 = SPR_HSRR0; | 2481 | srr0 = SPR_HSRR0; |
2474 | srr1 = SPR_HSRR1; | 2482 | srr1 = SPR_HSRR1; |
2483 | +#if defined(TARGET_PPC64) | ||
2475 | new_msr |= (target_ulong)1 << MSR_HV; | 2484 | new_msr |= (target_ulong)1 << MSR_HV; |
2485 | +#endif | ||
2476 | goto store_next; | 2486 | goto store_next; |
2477 | case POWERPC_EXCP_HISI: /* Hypervisor instruction storage exception */ | 2487 | case POWERPC_EXCP_HISI: /* Hypervisor instruction storage exception */ |
2478 | srr0 = SPR_HSRR0; | 2488 | srr0 = SPR_HSRR0; |
2479 | srr1 = SPR_HSRR1; | 2489 | srr1 = SPR_HSRR1; |
2490 | +#if defined(TARGET_PPC64) | ||
2480 | new_msr |= (target_ulong)1 << MSR_HV; | 2491 | new_msr |= (target_ulong)1 << MSR_HV; |
2492 | +#endif | ||
2481 | goto store_next; | 2493 | goto store_next; |
2482 | case POWERPC_EXCP_HDSEG: /* Hypervisor data segment exception */ | 2494 | case POWERPC_EXCP_HDSEG: /* Hypervisor data segment exception */ |
2483 | srr0 = SPR_HSRR0; | 2495 | srr0 = SPR_HSRR0; |
2484 | srr1 = SPR_HSRR1; | 2496 | srr1 = SPR_HSRR1; |
2497 | +#if defined(TARGET_PPC64) | ||
2485 | new_msr |= (target_ulong)1 << MSR_HV; | 2498 | new_msr |= (target_ulong)1 << MSR_HV; |
2499 | +#endif | ||
2486 | goto store_next; | 2500 | goto store_next; |
2487 | case POWERPC_EXCP_HISEG: /* Hypervisor instruction segment exception */ | 2501 | case POWERPC_EXCP_HISEG: /* Hypervisor instruction segment exception */ |
2488 | srr0 = SPR_HSRR0; | 2502 | srr0 = SPR_HSRR0; |
2489 | srr1 = SPR_HSRR1; | 2503 | srr1 = SPR_HSRR1; |
2504 | +#if defined(TARGET_PPC64) | ||
2490 | new_msr |= (target_ulong)1 << MSR_HV; | 2505 | new_msr |= (target_ulong)1 << MSR_HV; |
2506 | +#endif | ||
2491 | goto store_next; | 2507 | goto store_next; |
2492 | -#endif /* defined(TARGET_PPC64H) */ | ||
2493 | case POWERPC_EXCP_VPU: /* Vector unavailable exception */ | 2508 | case POWERPC_EXCP_VPU: /* Vector unavailable exception */ |
2494 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2509 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2495 | -#if defined(TARGET_PPC64H) | 2510 | +#if defined(TARGET_PPC64) |
2496 | if (lpes1 == 0) | 2511 | if (lpes1 == 0) |
2497 | new_msr |= (target_ulong)1 << MSR_HV; | 2512 | new_msr |= (target_ulong)1 << MSR_HV; |
2498 | #endif | 2513 | #endif |
@@ -2519,7 +2534,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2519,7 +2534,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2519 | goto store_next; | 2534 | goto store_next; |
2520 | case POWERPC_EXCP_IFTLB: /* Instruction fetch TLB error */ | 2535 | case POWERPC_EXCP_IFTLB: /* Instruction fetch TLB error */ |
2521 | new_msr &= ~((target_ulong)1 << MSR_RI); /* XXX: check this */ | 2536 | new_msr &= ~((target_ulong)1 << MSR_RI); /* XXX: check this */ |
2522 | -#if defined(TARGET_PPC64H) /* XXX: check this */ | 2537 | +#if defined(TARGET_PPC64) /* XXX: check this */ |
2523 | if (lpes1 == 0) | 2538 | if (lpes1 == 0) |
2524 | new_msr |= (target_ulong)1 << MSR_HV; | 2539 | new_msr |= (target_ulong)1 << MSR_HV; |
2525 | #endif | 2540 | #endif |
@@ -2540,7 +2555,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2540,7 +2555,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2540 | break; | 2555 | break; |
2541 | case POWERPC_EXCP_DLTLB: /* Data load TLB miss */ | 2556 | case POWERPC_EXCP_DLTLB: /* Data load TLB miss */ |
2542 | new_msr &= ~((target_ulong)1 << MSR_RI); /* XXX: check this */ | 2557 | new_msr &= ~((target_ulong)1 << MSR_RI); /* XXX: check this */ |
2543 | -#if defined(TARGET_PPC64H) /* XXX: check this */ | 2558 | +#if defined(TARGET_PPC64) /* XXX: check this */ |
2544 | if (lpes1 == 0) | 2559 | if (lpes1 == 0) |
2545 | new_msr |= (target_ulong)1 << MSR_HV; | 2560 | new_msr |= (target_ulong)1 << MSR_HV; |
2546 | #endif | 2561 | #endif |
@@ -2561,7 +2576,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2561,7 +2576,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2561 | break; | 2576 | break; |
2562 | case POWERPC_EXCP_DSTLB: /* Data store TLB miss */ | 2577 | case POWERPC_EXCP_DSTLB: /* Data store TLB miss */ |
2563 | new_msr &= ~((target_ulong)1 << MSR_RI); /* XXX: check this */ | 2578 | new_msr &= ~((target_ulong)1 << MSR_RI); /* XXX: check this */ |
2564 | -#if defined(TARGET_PPC64H) /* XXX: check this */ | 2579 | +#if defined(TARGET_PPC64) /* XXX: check this */ |
2565 | if (lpes1 == 0) | 2580 | if (lpes1 == 0) |
2566 | new_msr |= (target_ulong)1 << MSR_HV; | 2581 | new_msr |= (target_ulong)1 << MSR_HV; |
2567 | #endif | 2582 | #endif |
@@ -2663,7 +2678,7 @@ static always_inline void powerpc_excp (CPUState *env, | @@ -2663,7 +2678,7 @@ static always_inline void powerpc_excp (CPUState *env, | ||
2663 | goto store_next; | 2678 | goto store_next; |
2664 | case POWERPC_EXCP_PERFM: /* Embedded performance monitor interrupt */ | 2679 | case POWERPC_EXCP_PERFM: /* Embedded performance monitor interrupt */ |
2665 | new_msr &= ~((target_ulong)1 << MSR_RI); | 2680 | new_msr &= ~((target_ulong)1 << MSR_RI); |
2666 | -#if defined(TARGET_PPC64H) | 2681 | +#if defined(TARGET_PPC64) |
2667 | if (lpes1 == 0) | 2682 | if (lpes1 == 0) |
2668 | new_msr |= (target_ulong)1 << MSR_HV; | 2683 | new_msr |= (target_ulong)1 << MSR_HV; |
2669 | #endif | 2684 | #endif |
@@ -2769,7 +2784,7 @@ void do_interrupt (CPUState *env) | @@ -2769,7 +2784,7 @@ void do_interrupt (CPUState *env) | ||
2769 | 2784 | ||
2770 | void ppc_hw_interrupt (CPUPPCState *env) | 2785 | void ppc_hw_interrupt (CPUPPCState *env) |
2771 | { | 2786 | { |
2772 | -#if defined(TARGET_PPC64H) | 2787 | +#if defined(TARGET_PPC64) |
2773 | int hdice; | 2788 | int hdice; |
2774 | #endif | 2789 | #endif |
2775 | 2790 | ||
@@ -2800,8 +2815,13 @@ void ppc_hw_interrupt (CPUPPCState *env) | @@ -2800,8 +2815,13 @@ void ppc_hw_interrupt (CPUPPCState *env) | ||
2800 | return; | 2815 | return; |
2801 | } | 2816 | } |
2802 | #endif | 2817 | #endif |
2803 | -#if defined(TARGET_PPC64H) | ||
2804 | - hdice = env->spr[SPR_LPCR] & 1; | 2818 | +#if defined(TARGET_PPC64) |
2819 | + if (0) { | ||
2820 | + /* XXX: find a suitable condition to enable the hypervisor mode */ | ||
2821 | + hdice = env->spr[SPR_LPCR] & 1; | ||
2822 | + } else { | ||
2823 | + hdice = 0; | ||
2824 | + } | ||
2805 | if ((msr_ee != 0 || msr_hv == 0 || msr_pr != 0) && hdice != 0) { | 2825 | if ((msr_ee != 0 || msr_hv == 0 || msr_pr != 0) && hdice != 0) { |
2806 | /* Hypervisor decrementer exception */ | 2826 | /* Hypervisor decrementer exception */ |
2807 | if (env->pending_interrupts & (1 << PPC_INTERRUPT_HDECR)) { | 2827 | if (env->pending_interrupts & (1 << PPC_INTERRUPT_HDECR)) { |
target-ppc/helper_regs.h
@@ -60,7 +60,7 @@ static always_inline void hreg_swap_gpr_tgpr (CPUPPCState *env) | @@ -60,7 +60,7 @@ static always_inline void hreg_swap_gpr_tgpr (CPUPPCState *env) | ||
60 | 60 | ||
61 | static always_inline void hreg_compute_mem_idx (CPUPPCState *env) | 61 | static always_inline void hreg_compute_mem_idx (CPUPPCState *env) |
62 | { | 62 | { |
63 | -#if defined (TARGET_PPC64H) | 63 | +#if defined (TARGET_PPC64) |
64 | /* Precompute MMU index */ | 64 | /* Precompute MMU index */ |
65 | if (msr_pr == 0 && msr_hv != 0) | 65 | if (msr_pr == 0 && msr_hv != 0) |
66 | env->mmu_idx = 2; | 66 | env->mmu_idx = 2; |
@@ -78,10 +78,7 @@ static always_inline void hreg_compute_hflags (CPUPPCState *env) | @@ -78,10 +78,7 @@ static always_inline void hreg_compute_hflags (CPUPPCState *env) | ||
78 | (1 << MSR_PR) | (1 << MSR_FP) | (1 << MSR_SE) | (1 << MSR_BE) | | 78 | (1 << MSR_PR) | (1 << MSR_FP) | (1 << MSR_SE) | (1 << MSR_BE) | |
79 | (1 << MSR_LE); | 79 | (1 << MSR_LE); |
80 | #if defined (TARGET_PPC64) | 80 | #if defined (TARGET_PPC64) |
81 | - hflags_mask |= (1ULL << MSR_CM) | (1ULL << MSR_SF); | ||
82 | -#if defined (TARGET_PPC64H) | ||
83 | - hflags_mask |= 1ULL << MSR_HV; | ||
84 | -#endif | 81 | + hflags_mask |= (1ULL << MSR_CM) | (1ULL << MSR_SF) | (1ULL << MSR_HV); |
85 | #endif | 82 | #endif |
86 | hreg_compute_mem_idx(env); | 83 | hreg_compute_mem_idx(env); |
87 | env->hflags = env->msr & hflags_mask; | 84 | env->hflags = env->msr & hflags_mask; |
target-ppc/translate_init.c
@@ -2609,9 +2609,7 @@ static void init_excp_970 (CPUPPCState *env) | @@ -2609,9 +2609,7 @@ static void init_excp_970 (CPUPPCState *env) | ||
2609 | env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; | 2609 | env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; |
2610 | env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; | 2610 | env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; |
2611 | env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; | 2611 | env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; |
2612 | -#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */ | ||
2613 | env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980; | 2612 | env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980; |
2614 | -#endif | ||
2615 | env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; | 2613 | env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; |
2616 | env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; | 2614 | env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; |
2617 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; | 2615 | env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; |