Revision 50443c98 target-ppc/helper.c
b/target-ppc/helper.c | ||
---|---|---|
807 | 807 |
|
808 | 808 |
void do_store_msr (CPUPPCState *env, target_ulong value) |
809 | 809 |
{ |
810 |
int enter_pm; |
|
811 |
|
|
810 | 812 |
value &= env->msr_mask; |
811 | 813 |
if (((value >> MSR_IR) & 1) != msr_ir || |
812 | 814 |
((value >> MSR_DR) & 1) != msr_dr) { |
... | ... | |
846 | 848 |
msr_ri = (value >> MSR_RI) & 1; |
847 | 849 |
msr_le = (value >> MSR_LE) & 1; |
848 | 850 |
do_compute_hflags(env); |
849 |
if (msr_pow) { |
|
851 |
|
|
852 |
enter_pm = 0; |
|
853 |
switch (PPC_EXCP(env)) { |
|
854 |
case PPC_FLAGS_EXCP_7x0: |
|
855 |
if (msr_pow == 1 && (env->spr[SPR_HID0] & 0x00E00000) != 0) |
|
856 |
enter_pm = 1; |
|
857 |
break; |
|
858 |
default: |
|
859 |
break; |
|
860 |
} |
|
861 |
if (enter_pm) { |
|
850 | 862 |
/* power save: exit cpu loop */ |
863 |
env->halted = 1; |
|
851 | 864 |
env->exception_index = EXCP_HLT; |
852 | 865 |
cpu_loop_exit(); |
853 | 866 |
} |
Also available in: Unified diff