diff options
Diffstat (limited to 'inc')
-rw-r--r-- | inc/ex.h | 9 | ||||
-rw-r--r-- | inc/mm.h | 13 | ||||
-rw-r--r-- | inc/wb.h | 3 |
3 files changed, 21 insertions, 4 deletions
@@ -78,7 +78,6 @@ class EX : public Stage * Handles operations involving three vector registers. * @param slot 1, and later, the result of the mnemonic operation. * @param slot 2 - * @param slot 3 * @param the mnemonic * @param the vector length register */ @@ -89,14 +88,18 @@ class EX : public Stage unsigned int v_len); /** - * Handles operations involving a single vector register. + * Handles operations involving a vector result and a scalar. * Currently, this is SRDL and SRDS * @param slot 1, and later, the result of the mnemonic operation. * @param slot 2 * @param the mnemonic * @param the vector length register */ - void handle_s_vector_operations(signed int &s1, signed int s2, Mnemonic m); + void handle_s_vector_operations( + std::array<signed int, V_R_LIMIT> &s1, + signed int s2, + Mnemonic m, + unsigned int v_len); /** * Wrapper for division functions, which detects HALT instructinos (division * by 0). @@ -29,6 +29,19 @@ class MM : public Stage private: void advance_helper() override; + /** + * Helpers for `advance_helper'. Sets the `this->status' to OK + * If the current memory IO returned OK, and all vector elements + * have been processed. Otherwise, sets `this->status' to STALLED + * @param the response from the storage devices. + */ + void try_start(); + void try_finish(int response); + /** + * The index element currently being loaded or stored. + * Used for strided load/store. + */ + int curr_element = 0; }; #endif /* MM_H_INCLUDED */ @@ -51,7 +51,8 @@ class WB : public Stage * @return the vector register to be stored, obtained by copying the * unfilled elements in the destination register to the source. This is * required to ensure what is written back only changes VECTOR_LENGTH number - * of elements. + * of elements. Correctly handles zeroing out ALU operations if the VECTOR + * LENGTH number is zero. */ std::array<signed int, V_R_LIMIT> copy_extra_vector_elements(); }; |