add reshape data structures and get_shape function
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 3 Nov 2018 10:17:39 +0000 (10:17 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 3 Nov 2018 10:17:39 +0000 (10:17 +0000)
riscv/processor.cc
riscv/processor.h
riscv/sv.h

index 9df369867c91f4138636f8c525dfc2050171fb3e..5c95f8ce6f2981750850139e0f0fec766d3c2e39 100644 (file)
@@ -157,6 +157,19 @@ sv_csr_t &state_t::sv()
     return get_usv();
 }
 
+sv_shape_t* state_t::get_shape(reg_t reg)
+{
+    if (prv == PRV_M || prv == PRV_S || reg == 0) {
+        return NULL;
+    }
+    for (int i = 0; i < 3; i++) {
+        if (remap[i].regidx == reg) {
+            return &shape[i];
+        }
+    }
+    return NULL;
+}
+
 void processor_t::set_debug(bool value)
 {
   debug = value;
index 7d2a609b9eebbc3caf00b00dd13c17a98f2f2879..4e8cd3b047f3deaf1b3ca54d3df5ce8da8945160 100644 (file)
@@ -160,6 +160,11 @@ struct state_t
   sv_csr_t &get_ssv() { return ssv; }
   sv_csr_t &get_usv() { return usv; }
 
+  sv_remap_t remap[3];
+  sv_shape_t shape[3];
+
+  sv_shape_t *get_shape(reg_t reg);
+
 #endif
 
   uint32_t fflags;
index af4402ae303715094b53c4947212c662ff5d61eb..89ed2e9d75bd801abd5742b6f4c2b2d91b4295d2 100644 (file)
@@ -71,4 +71,17 @@ typedef struct {
 
 bool sv_check_reg(bool intreg, uint64_t reg);
 
+typedef struct {
+    uint64_t regidx: 7; // actual i.e. real register (0-127)
+    unsigned int shape: 2; // which shape register to use
+} sv_remap_t;
+
+typedef struct {
+    int xsz;
+    int ysz;
+    int zsz;
+    int offs;
+    int permute;
+} sv_shape_t;
+
 #endif