diff options
Diffstat (limited to 'deps/v8/src/execution/loong64/simulator-loong64.cc')
-rw-r--r-- | deps/v8/src/execution/loong64/simulator-loong64.cc | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/deps/v8/src/execution/loong64/simulator-loong64.cc b/deps/v8/src/execution/loong64/simulator-loong64.cc index 7c9d42719c..a71f39aad3 100644 --- a/deps/v8/src/execution/loong64/simulator-loong64.cc +++ b/deps/v8/src/execution/loong64/simulator-loong64.cc @@ -3484,13 +3484,13 @@ void Simulator::DecodeTypeOp17() { printf_instr("MASKEQZ\t %s: %016lx, %s, %016lx, %s, %016lx\n", Registers::Name(rd_reg()), rd(), Registers::Name(rj_reg()), rj(), Registers::Name(rk_reg()), rk()); - SetResult(rd_reg(), rk() == 0 ? rj() : 0); + SetResult(rd_reg(), rk() == 0 ? 0 : rj()); break; case MASKNEZ: printf_instr("MASKNEZ\t %s: %016lx, %s, %016lx, %s, %016lx\n", Registers::Name(rd_reg()), rd(), Registers::Name(rj_reg()), rj(), Registers::Name(rk_reg()), rk()); - SetResult(rd_reg(), rk() != 0 ? rj() : 0); + SetResult(rd_reg(), rk() != 0 ? 0 : rj()); break; case NOR: printf_instr("NOR\t %s: %016lx, %s, %016lx, %s, %016lx\n", @@ -4267,12 +4267,28 @@ void Simulator::DecodeTypeOp17() { case FSCALEB_D: printf("Sim UNIMPLEMENTED: FSCALEB_D\n"); UNIMPLEMENTED(); - case FCOPYSIGN_S: - printf("Sim UNIMPLEMENTED: FCOPYSIGN_S\n"); - UNIMPLEMENTED(); - case FCOPYSIGN_D: - printf("Sim UNIMPLEMENTED: FCOPYSIGN_D\n"); - UNIMPLEMENTED(); + case FCOPYSIGN_S: { + printf_instr("FCOPYSIGN_S\t %s: %016f, %s, %016f, %s, %016f\n", + FPURegisters::Name(fd_reg()), fd_float(), + FPURegisters::Name(fj_reg()), fj_float(), + FPURegisters::Name(fk_reg()), fk_float()); + SetFPUFloatResult(fd_reg(), FPUCanonalizeOperation( + [](float lhs, float rhs) { + return std::copysign(lhs, rhs); + }, + fj_float(), fk_float())); + } break; + case FCOPYSIGN_D: { + printf_instr("FCOPYSIGN_d\t %s: %016f, %s, %016f, %s, %016f\n", + FPURegisters::Name(fd_reg()), fd_double(), + FPURegisters::Name(fj_reg()), fj_double(), + FPURegisters::Name(fk_reg()), fk_double()); + SetFPUDoubleResult(fd_reg(), FPUCanonalizeOperation( + [](double lhs, double rhs) { + return std::copysign(lhs, rhs); + }, + fj_double(), fk_double())); + } break; default: UNREACHABLE(); } |