Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(944)

Unified Diff: src/mips64/simulator-mips64.h

Issue 2799923002: MIPS[64]: Implement fill.df, copy_u.df, copy_s.df instructions in simulator (Closed)
Patch Set: Rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/mips64/disasm-mips64.cc ('k') | src/mips64/simulator-mips64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/mips64/simulator-mips64.h
diff --git a/src/mips64/simulator-mips64.h b/src/mips64/simulator-mips64.h
index a9e0d3d11871f9b554d61f7f733e097fd9c14036..40980ca4f494027c0f13bd87b49ddf4d297d0111 100644
--- a/src/mips64/simulator-mips64.h
+++ b/src/mips64/simulator-mips64.h
@@ -189,6 +189,43 @@ 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
+ };
+
explicit Simulator(Isolate* isolate);
~Simulator();
@@ -222,6 +259,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);
bool set_fcsr_round_error(double original, double rounded);
@@ -311,6 +352,9 @@ class Simulator {
WORD_DWORD
};
+ // MSA Data Format
+ enum MSADataFormat { MSA_VECT = 0, MSA_BYTE, MSA_HALF, MSA_WORD, MSA_DWORD };
+
// Read and write memory.
inline uint32_t ReadBU(int64_t addr);
inline int32_t ReadB(int64_t addr);
@@ -336,6 +380,8 @@ class Simulator {
inline void DieOrDebug();
void TraceRegWr(int64_t value, TraceType t = DWORD);
+ template <typename T>
+ void TraceMSARegWr(T* value, TraceType t);
void TraceMemWr(int64_t addr, int64_t value, TraceType t);
void TraceMemRd(int64_t addr, int64_t value, TraceType t = DWORD);
@@ -369,6 +415,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();
+
// Executing is handled based on the instruction type.
void DecodeTypeRegister();
@@ -389,6 +448,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(const int32_t rd_reg, const int64_t alu_out) {
set_register(rd_reg, alu_out);
@@ -508,7 +570,9 @@ class Simulator {
// Registers.
int64_t registers_[kNumSimuRegisters];
// Coprocessor Registers.
- 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_;
« no previous file with comments | « src/mips64/disasm-mips64.cc ('k') | src/mips64/simulator-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698