summaryrefslogtreecommitdiff
path: root/BFS/dpu/dpu-utils.h
diff options
context:
space:
mode:
authorJuan Gomez Luna <juan.gomez@safari.ethz.ch>2021-06-16 19:46:05 +0200
committerJuan Gomez Luna <juan.gomez@safari.ethz.ch>2021-06-16 19:46:05 +0200
commit3de4b495fb176eba9a0eb517a4ce05903cb67acb (patch)
treefc6776a94549d2d4039898f183dbbeb2ce013ba9 /BFS/dpu/dpu-utils.h
parentef5c3688c486b80a56d3c1cded25f2b2387f2668 (diff)
PrIM -- first commit
Diffstat (limited to 'BFS/dpu/dpu-utils.h')
-rw-r--r--BFS/dpu/dpu-utils.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/BFS/dpu/dpu-utils.h b/BFS/dpu/dpu-utils.h
new file mode 100644
index 0000000..b02c073
--- /dev/null
+++ b/BFS/dpu/dpu-utils.h
@@ -0,0 +1,44 @@
+
+#ifndef _DPU_UTILS_H_
+#define _DPU_UTILS_H_
+
+#include <mram.h>
+
+#define PRINT_ERROR(fmt, ...) printf("\033[0;31mERROR:\033[0m "fmt"\n", ##__VA_ARGS__)
+
+static uint64_t load8B(uint32_t ptr_m, uint32_t idx, uint64_t* cache_w) {
+ mram_read((__mram_ptr void const*)(ptr_m + idx*sizeof(uint64_t)), cache_w, 8);
+ return cache_w[0];
+}
+
+static void store8B(uint64_t val, uint32_t ptr_m, uint32_t idx, uint64_t* cache_w) {
+ cache_w[0] = val;
+ mram_write(cache_w, (__mram_ptr void*)(ptr_m + idx*sizeof(uint64_t)), 8);
+}
+
+static uint32_t load4B(uint32_t ptr_m, uint32_t idx, uint64_t* cache_w) {
+ // Load 8B
+ uint32_t ptr_idx_m = ptr_m + idx*sizeof(uint32_t);
+ uint32_t offset = ((uint32_t)ptr_idx_m)%8;
+ uint32_t ptr_block_m = ptr_idx_m - offset;
+ mram_read((__mram_ptr void const*)ptr_block_m, cache_w, 8);
+ // Extract 4B
+ uint32_t* cache_32_w = (uint32_t*) cache_w;
+ return cache_32_w[offset/4];
+}
+
+static void store4B(uint32_t val, uint32_t ptr_m, uint32_t idx, uint64_t* cache_w) {
+ // Load 8B
+ uint32_t ptr_idx_m = ptr_m + idx*sizeof(uint32_t);
+ uint32_t offset = ((uint32_t)ptr_idx_m)%8;
+ uint32_t ptr_block_m = ptr_idx_m - offset;
+ mram_read((__mram_ptr void const*)ptr_block_m, cache_w, 8);
+ // Modify 4B
+ uint32_t* cache_32_w = (uint32_t*) cache_w;
+ cache_32_w[offset/4] = val;
+ // Write back 8B
+ mram_write(cache_w, (__mram_ptr void*)ptr_block_m, 8);
+}
+
+#endif
+