Index: src/mips/simulator-mips.cc |
diff --git a/src/mips/simulator-mips.cc b/src/mips/simulator-mips.cc |
index fc7aefd8fc5ae6a255b002170fa044dca2a0057e..be9f369d0190afa776b2c3c85339ffe5c2fdd3f7 100644 |
--- a/src/mips/simulator-mips.cc |
+++ b/src/mips/simulator-mips.cc |
@@ -1760,6 +1760,8 @@ void Simulator::ConfigureTypeRegister(Instruction* instr, |
UNIMPLEMENTED_MIPS(); |
}; |
break; |
+ case COP1X: |
+ break; |
case SPECIAL: |
switch (instr->FunctionFieldRaw()) { |
case JR: |
@@ -1949,6 +1951,7 @@ void Simulator::DecodeTypeRegister(Instruction* instr) { |
const uint32_t rt_u = static_cast<uint32_t>(rt); |
const int32_t rd_reg = instr->RdValue(); |
+ const int32_t fr_reg = instr->FrValue(); |
const int32_t fs_reg = instr->FsValue(); |
const int32_t ft_reg = instr->FtValue(); |
const int32_t fd_reg = instr->FdValue(); |
@@ -2210,6 +2213,19 @@ void Simulator::DecodeTypeRegister(Instruction* instr) { |
UNREACHABLE(); |
}; |
break; |
+ case COP1X: |
+ switch (instr->FunctionFieldRaw()) { |
+ case MADD_D: |
+ double fr, ft, fs; |
+ fr = get_fpu_register_double(fr_reg); |
+ fs = get_fpu_register_double(fs_reg); |
+ ft = get_fpu_register_double(ft_reg); |
+ set_fpu_register_double(fd_reg, fs * ft + fr); |
+ break; |
+ default: |
+ UNREACHABLE(); |
+ }; |
+ break; |
case SPECIAL: |
switch (instr->FunctionFieldRaw()) { |
case JR: { |