Index: src/ppc/simulator-ppc.cc |
diff --git a/src/ppc/simulator-ppc.cc b/src/ppc/simulator-ppc.cc |
index cdce60eb5980f73ffa5015b0199a3595d454e137..5b817d5cad74ca6b4301dc72334aaf02ef0c5349 100644 |
--- a/src/ppc/simulator-ppc.cc |
+++ b/src/ppc/simulator-ppc.cc |
@@ -2679,6 +2679,24 @@ void Simulator::ExecuteExt2(Instruction* instr) { |
} |
+void Simulator::ExecuteExt3(Instruction* instr) { |
+ int opcode = instr->Bits(10, 1) << 1; |
+ switch (opcode) { |
+ case FCFID: { |
+ // fcfids |
+ int frt = instr->RTValue(); |
+ int frb = instr->RBValue(); |
+ double t_val = get_double_from_d_register(frb); |
+ int64_t* frb_val_p = reinterpret_cast<int64_t*>(&t_val); |
+ double frt_val = static_cast<float>(*frb_val_p); |
+ set_d_register_from_double(frt, frt_val); |
+ return; |
+ } |
+ } |
+ UNIMPLEMENTED(); // Not used by V8. |
+} |
+ |
+ |
void Simulator::ExecuteExt4(Instruction* instr) { |
switch (instr->Bits(5, 1) << 1) { |
case FDIV: { |
@@ -3594,8 +3612,10 @@ void Simulator::ExecuteGeneric(Instruction* instr) { |
break; |
} |
- case EXT3: |
- UNIMPLEMENTED(); |
+ case EXT3: { |
+ ExecuteExt3(instr); |
+ break; |
+ } |
case EXT4: { |
ExecuteExt4(instr); |
break; |