Chromium Code Reviews| Index: src/mips/simulator-mips.h | 
| diff --git a/src/mips/simulator-mips.h b/src/mips/simulator-mips.h | 
| index 2785f913c9feda3e2a1585e95bf8723bc500901d..3abf8e828b68231ecd2c88354c9f433c83bade81 100644 | 
| --- a/src/mips/simulator-mips.h | 
| +++ b/src/mips/simulator-mips.h | 
| @@ -184,6 +184,54 @@ class Simulator { | 
| kNumFPURegisters | 
| }; | 
| + // MSA registers | 
| + enum MSARegister { | 
| + w0, | 
| + w1, | 
| + w2, | 
| + w3, | 
| + w4, | 
| + w5, | 
| + w6, | 
| + w7, | 
| + w8, | 
| + w9, | 
| + w10, | 
| + w11, | 
| + w12, | 
| + w13, | 
| + w14, | 
| + w15, | 
| + w16, | 
| + w17, | 
| + w18, | 
| + w19, | 
| + w20, | 
| + w21, | 
| + w22, | 
| + w23, | 
| + w24, | 
| + w25, | 
| + w26, | 
| + w27, | 
| + w28, | 
| + w29, | 
| + w30, | 
| + w31, | 
| + kNumMSARegisters | 
| + }; | 
| + | 
| + const uint32_t kMsaI8Mask = ((3U << 24) | ((1 << 6) - 1)); | 
| 
 
Ilija.Pavlovic1
2017/04/20 13:13:46
Should be these const definitions placed in consta
 
dusan.simicic
2017/04/20 15:57:42
I see now that same mask constants are defined als
 
 | 
| + const uint32_t kMsaI5Mask = ((7U << 23) | ((1 << 6) - 1)); | 
| + const uint32_t kMsaMI10Mask = (15U << 2); | 
| + const uint32_t kMsaBITMask = ((7U << 23) | ((1 << 6) - 1)); | 
| + const uint32_t kMsaELMMask = (15U << 22); | 
| + const uint32_t kMsa3RMask = ((7U << 23) | ((1 << 6) - 1)); | 
| + const uint32_t kMsa3RFMask = ((15U << 22) | ((1 << 6) - 1)); | 
| + const uint32_t kMsaVECMask = (23U << 21); | 
| + const uint32_t kMsa2RMask = (7U << 18); | 
| + const uint32_t kMsa2RFMask = (15U << 17); | 
| + | 
| explicit Simulator(Isolate* isolate); | 
| ~Simulator(); | 
| @@ -216,6 +264,10 @@ class Simulator { | 
| int32_t get_fpu_register_hi_word(int fpureg) const; | 
| float get_fpu_register_float(int fpureg) const; | 
| double get_fpu_register_double(int fpureg) const; | 
| + template <typename T> | 
| + void get_msa_register(int wreg, T* value); | 
| + template <typename T> | 
| + void set_msa_register(int wreg, const T* value); | 
| void set_fcsr_bit(uint32_t cc, bool value); | 
| bool test_fcsr_bit(uint32_t cc); | 
| void set_fcsr_rounding_mode(FPURoundingMode mode); | 
| @@ -296,6 +348,9 @@ class Simulator { | 
| // Helpers for data value tracing. | 
| enum TraceType { BYTE, HALF, WORD, DWORD, FLOAT, DOUBLE, FLOAT_DOUBLE }; | 
| + // MSA Data Format | 
| + enum MSADataFormat { MSA_VECT = 0, MSA_BYTE, MSA_HALF, MSA_WORD, MSA_DWORD }; | 
| + | 
| // Read and write memory. | 
| inline uint32_t ReadBU(int32_t addr); | 
| inline int32_t ReadB(int32_t addr); | 
| @@ -316,6 +371,8 @@ class Simulator { | 
| void TraceRegWr(int32_t value, TraceType t = WORD); | 
| void TraceRegWr(int64_t value, TraceType t = DWORD); | 
| + template <typename T> | 
| + void TraceMSARegWr(T* value, TraceType t); | 
| void TraceMemWr(int32_t addr, int32_t value, TraceType t = WORD); | 
| void TraceMemRd(int32_t addr, int32_t value, TraceType t = WORD); | 
| void TraceMemWr(int32_t addr, int64_t value, TraceType t = DWORD); | 
| @@ -355,6 +412,19 @@ class Simulator { | 
| void DecodeTypeRegisterLRsType(); | 
| + int DecodeMsaDataFormat(); | 
| + void DecodeTypeMsaI8(); | 
| + void DecodeTypeMsaI5(); | 
| + void DecodeTypeMsaI10(); | 
| + void DecodeTypeMsaELM(); | 
| + void DecodeTypeMsaBIT(); | 
| + void DecodeTypeMsaMI10(); | 
| + void DecodeTypeMsa3R(); | 
| + void DecodeTypeMsa3RF(); | 
| + void DecodeTypeMsaVec(); | 
| + void DecodeTypeMsa2R(); | 
| + void DecodeTypeMsa2RF(); | 
| + | 
| inline int32_t rs_reg() const { return instr_.RsValue(); } | 
| inline int32_t rs() const { return get_register(rs_reg()); } | 
| inline uint32_t rs_u() const { | 
| @@ -372,6 +442,9 @@ class Simulator { | 
| inline int32_t fd_reg() const { return instr_.FdValue(); } | 
| inline int32_t sa() const { return instr_.SaValue(); } | 
| inline int32_t lsa_sa() const { return instr_.LsaSaValue(); } | 
| + inline int32_t ws_reg() const { return instr_.WsValue(); } | 
| + inline int32_t wt_reg() const { return instr_.WtValue(); } | 
| + inline int32_t wd_reg() const { return instr_.WdValue(); } | 
| inline void SetResult(int32_t rd_reg, int32_t alu_out) { | 
| set_register(rd_reg, alu_out); | 
| @@ -483,7 +556,9 @@ class Simulator { | 
| // Coprocessor Registers. | 
| // Note: FP32 mode uses only the lower 32-bit part of each element, | 
| // the upper 32-bit is unpredictable. | 
| - int64_t FPUregisters_[kNumFPURegisters]; | 
| + // Note: FPUregisters_[] array is increased to 64 * 8B = 32 * 16B in | 
| + // order to support MSA registers | 
| + int64_t FPUregisters_[kNumFPURegisters * 2]; | 
| // FPU control register. | 
| uint32_t FCSR_; |