diff --git a/targets/wasm-module/matrix0_base.cpp b/targets/wasm-module/matrix0_base.cpp new file mode 100644 index 0000000..7f20e70 --- /dev/null +++ b/targets/wasm-module/matrix0_base.cpp @@ -0,0 +1,63 @@ +#include "../lib.h" + +#define REPLICA_COUNT 1 +#define MAT_SIZE 3 + +static uint32_t X[MAT_SIZE * MAT_SIZE] = { + 0, 1, 2, // + 3, 4, 5, // + 6, 7, 8 // +}; +static uint32_t Y[MAT_SIZE * MAT_SIZE] = { + 8, 7, 6, // + 5, 4, 3, // + 2, 1, 0 // +}; +static uint32_t Calculated[MAT_SIZE * MAT_SIZE] = {0}; + +static INLINE uint32_t *idx(uint32_t *matrix, uint8_t x, uint8_t y) { + return &matrix[y * MAT_SIZE + x]; +} + +template static INLINE void matrix(void) { + for (uint8_t y = 0; y < MAT_SIZE; ++y) { + for (uint8_t x = 0; x < MAT_SIZE; ++x) { + for (uint8_t k = 0; k < MAT_SIZE; ++k) { + *idx(Calculated, x, y) += (*idx(X, k, y)) * (*idx(Y, x, k)); + } + } + } +} + +static int cmp(uint32_t *A, uint32_t *B) { + for (uint8_t i = 0; i < MAT_SIZE * MAT_SIZE; ++i) { + if (A[i] != B[i]) { + return 0; + } + } + return 1; +} + +extern "C" EXPORT("wasm_module") int wasm_module(void) { + fail_start_trace(); + + matrix<0>(); + + fail_stop_trace(); + + uint32_t Expected[MAT_SIZE * MAT_SIZE] = { + 9, 6, 3, // + 54, 42, 30, // + 99, 78, 57 // + }; + + if (cmp(Calculated, Expected)) { + HOST_PRINT("result correct.\n"); + fail_marker_positive(); + return 0; + } else { + HOST_PRINT("result incorrect.\n"); + fail_marker_negative(); + return 1; + } +}