diff --git a/cpu/ppc/ppcfpopcodes.cpp b/cpu/ppc/ppcfpopcodes.cpp index 8789bc7..8327680 100644 --- a/cpu/ppc/ppcfpopcodes.cpp +++ b/cpu/ppc/ppcfpopcodes.cpp @@ -681,18 +681,17 @@ void dppc_interpreter::ppc_lfs() { ppc_grab_regsfpdia(); ppc_effective_address = int32_t(int16_t(ppc_cur_instruction)); ppc_effective_address += (reg_a) ? val_reg_a : 0; - float result = (float)mmu_read_vmem(ppc_effective_address); - ppc_state.fpr[reg_d].dbl64_r = (double)result; + uint32_t result = mmu_read_vmem(ppc_effective_address); + ppc_state.fpr[reg_d].dbl64_r = *(float*)(&result); } - void dppc_interpreter::ppc_lfsu() { ppc_grab_regsfpdia(); if (reg_a) { ppc_effective_address = int32_t(int16_t(ppc_cur_instruction)); ppc_effective_address += (reg_a) ? val_reg_a : 0; - float result = (float)mmu_read_vmem(ppc_effective_address); - ppc_state.fpr[reg_d].dbl64_r = (double)result; + uint32_t result = mmu_read_vmem(ppc_effective_address); + ppc_state.fpr[reg_d].dbl64_r = *(float*)(&result); ppc_state.gpr[reg_a] = ppc_effective_address; } else { ppc_exception_handler(Except_Type::EXC_PROGRAM, Exc_Cause::ILLEGAL_OP); @@ -702,16 +701,16 @@ void dppc_interpreter::ppc_lfsu() { void dppc_interpreter::ppc_lfsx() { ppc_grab_regsfpdiab(); ppc_effective_address = (reg_a) ? val_reg_a + val_reg_b : val_reg_b; - float result = (float)mmu_read_vmem(ppc_effective_address); - ppc_state.fpr[reg_d].dbl64_r = (double)result; + uint32_t result = mmu_read_vmem(ppc_effective_address); + ppc_state.fpr[reg_d].dbl64_r = *(float*)(&result); } void dppc_interpreter::ppc_lfsux() { ppc_grab_regsfpdiab(); if (reg_a) { ppc_effective_address = val_reg_a + val_reg_b; - float result = (float)mmu_read_vmem(ppc_effective_address); - ppc_state.fpr[reg_d].dbl64_r = (double)result; + uint32_t result = mmu_read_vmem(ppc_effective_address); + ppc_state.fpr[reg_d].dbl64_r = *(float*)(&result); ppc_state.gpr[reg_a] = ppc_effective_address; } else { ppc_exception_handler(Except_Type::EXC_PROGRAM, Exc_Cause::ILLEGAL_OP);