summaryrefslogtreecommitdiff
path: root/test/wasm_backend/unaligned_only.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/wasm_backend/unaligned_only.cpp')
-rw-r--r--test/wasm_backend/unaligned_only.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/test/wasm_backend/unaligned_only.cpp b/test/wasm_backend/unaligned_only.cpp
new file mode 100644
index 000000000..75f8b419b
--- /dev/null
+++ b/test/wasm_backend/unaligned_only.cpp
@@ -0,0 +1,70 @@
+#include <stdint.h>
+#include <emscripten.h>
+
+void print(int v) {
+ int *x = (int*)8;
+ *x = v;
+ EM_ASM({
+ Module.print("print: " + HEAP32[8>>2]);
+ });
+}
+
+char buffer[8];
+
+int main() {
+ {
+ volatile int16_t* x;
+ x = (int16_t*)&buffer[0];
+ *x = 0x1234;
+ print(*x);
+ x = (int16_t*)&buffer[1];
+ *x = 0x2345;
+ print(*x);
+ }
+ {
+ volatile int32_t* x;
+ x = (int32_t*)&buffer[0];
+ *x = 0x12345678;
+ print(*x);
+ x = (int32_t*)&buffer[1];
+ *x = 0x23456789;
+ print(*x);
+ x = (int32_t*)&buffer[2];
+ *x = 0x3456789a;
+ print(*x);
+ x = (int32_t*)&buffer[3];
+ *x = 0x456789ab;
+ print(*x);
+ }
+ {
+ volatile float* x;
+ x = (float*)&buffer[0];
+ *x = -0x12345678;
+ print(*x);
+ x = (float*)&buffer[1];
+ *x = -0x12345678;
+ print(*x);
+ x = (float*)&buffer[2];
+ *x = -0x12345678;
+ print(*x);
+ x = (float*)&buffer[3];
+ *x = -0x12345678;
+ print(*x);
+ }
+ {
+ volatile double* x;
+ x = (double*)&buffer[0];
+ *x = -1;
+ print(*x);
+ x = (double*)&buffer[1];
+ *x = -2;
+ print(*x);
+ x = (double*)&buffer[2];
+ *x = -3;
+ print(*x);
+ x = (double*)&buffer[3];
+ *x = -4;
+ print(*x);
+ }
+}
+