Index: src/mips64/simulator-mips64.h |
diff --git a/src/mips64/simulator-mips64.h b/src/mips64/simulator-mips64.h |
index dea9e30adfca7d41c0679858038b8ad394274705..75d4935b74d538f73c8b4661cc2a7a20ab636b91 100644 |
--- a/src/mips64/simulator-mips64.h |
+++ b/src/mips64/simulator-mips64.h |
@@ -325,57 +325,54 @@ class Simulator { |
inline int32_t SetDoubleHIW(double* addr); |
inline int32_t SetDoubleLOW(double* addr); |
- // functions called from DecodeTypeRegister |
- void DecodeTypeRegisterCOP1(Instruction* instr, const int32_t rs_reg, |
- const int64_t rs, const uint64_t rs_u, |
- const int32_t rt_reg, const int64_t rt, |
- const uint64_t rt_u, const int32_t rd_reg, |
- const int32_t fr_reg, const int32_t fs_reg, |
- const int32_t ft_reg, const int32_t fd_reg, |
- int64_t& alu_out); |
- |
- void DecodeTypeRegisterCOP1X(Instruction* instr, const int32_t fr_reg, |
- const int32_t fs_reg, const int32_t ft_reg, |
- const int32_t fd_reg); |
- |
- void DecodeTypeRegisterSPECIAL( |
- Instruction* instr, const int32_t rs_reg, const int64_t rs, |
- const uint64_t rs_u, const int32_t rt_reg, const int64_t rt, |
- const uint64_t rt_u, const int32_t rd_reg, const int32_t fr_reg, |
- const int32_t fs_reg, const int32_t ft_reg, const int32_t fd_reg, |
- const int64_t i64hilo, const uint64_t u64hilo, const int64_t alu_out, |
- const bool do_interrupt, const int64_t current_pc, const int64_t next_pc, |
- const int32_t return_addr_reg, const int64_t i128resultH, |
- const int64_t i128resultL); |
- |
- |
- void DecodeTypeRegisterSPECIAL2(Instruction* instr, const int32_t rd_reg, |
- const int64_t alu_out); |
- |
- void DecodeTypeRegisterSPECIAL3(Instruction* instr, const int32_t rt_reg, |
- const int32_t rd_reg, const int64_t alu_out); |
- |
- void DecodeTypeRegisterSRsType(Instruction* instr, const int32_t fs_reg, |
- const int32_t ft_reg, const int32_t fd_reg); |
- |
- void DecodeTypeRegisterDRsType(Instruction* instr, const int32_t fs_reg, |
- const int32_t ft_reg, const int32_t fd_reg); |
- |
- void DecodeTypeRegisterWRsType(Instruction* instr, const int32_t fs_reg, |
- const int32_t ft_reg, const int32_t fd_reg, |
- int64_t& alu_out); |
- |
- void DecodeTypeRegisterLRsType(Instruction* instr, const int32_t fs_reg, |
- const int32_t fd_reg, const int32_t ft_reg); |
+ // functions called from DecodeTypeRegister. |
+ void DecodeTypeRegisterCOP1(); |
+ |
+ void DecodeTypeRegisterCOP1X(); |
+ |
+ void DecodeTypeRegisterSPECIAL(); |
+ |
+ |
+ void DecodeTypeRegisterSPECIAL2(); |
+ |
+ void DecodeTypeRegisterSPECIAL3(); |
+ |
+ void DecodeTypeRegisterSRsType(); |
+ |
+ void DecodeTypeRegisterDRsType(); |
+ |
+ void DecodeTypeRegisterWRsType(); |
+ |
+ void DecodeTypeRegisterLRsType(); |
+ |
// Executing is handled based on the instruction type. |
void DecodeTypeRegister(Instruction* instr); |
- // Helper function for DecodeTypeRegister. |
- void ConfigureTypeRegister(Instruction* instr, int64_t* alu_out, |
- int64_t* i64hilo, uint64_t* u64hilo, |
- int64_t* next_pc, int* return_addr_reg, |
- bool* do_interrupt, int64_t* result128H, |
- int64_t* result128L); |
+ Instruction* currentInstr_; |
+ inline Instruction* get_instr() const { return currentInstr_; } |
+ inline void set_instr(Instruction* instr) { currentInstr_ = instr; } |
+ |
+ inline int32_t rs_reg() const { return currentInstr_->RsValue(); } |
+ inline int64_t rs() const { return get_register(rs_reg()); } |
+ inline uint64_t rs_u() const { |
+ return static_cast<uint64_t>(get_register(rs_reg())); |
+ } |
+ inline int32_t rt_reg() const { return currentInstr_->RtValue(); } |
+ inline int64_t rt() const { return get_register(rt_reg()); } |
+ inline uint64_t rt_u() const { |
+ return static_cast<uint64_t>(get_register(rt_reg())); |
+ } |
+ inline int32_t rd_reg() const { return currentInstr_->RdValue(); } |
+ inline int32_t fr_reg() const { return currentInstr_->FrValue(); } |
+ inline int32_t fs_reg() const { return currentInstr_->FsValue(); } |
+ inline int32_t ft_reg() const { return currentInstr_->FtValue(); } |
+ inline int32_t fd_reg() const { return currentInstr_->FdValue(); } |
+ inline int32_t sa() const { return currentInstr_->SaValue(); } |
+ |
+ inline void SetResult(const int32_t rd_reg, const int64_t alu_out) { |
+ set_register(rd_reg, alu_out); |
+ TraceRegWr(alu_out); |
+ } |
void DecodeTypeImmediate(Instruction* instr); |
void DecodeTypeJump(Instruction* instr); |
@@ -427,10 +424,9 @@ class Simulator { |
kDivideByZero, |
kNumExceptions |
}; |
- int16_t exceptions[kNumExceptions]; |
// Exceptions. |
- void SignalExceptions(); |
+ void SignalException(Exception e); |
// Runtime call support. |
static void* RedirectExternalReference(void* external_function, |