From bf3eba4084311696937f88b93b7a9ecbcc333f3b Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 25 Dec 2015 11:54:16 -0800 Subject: add indirect call testcase for wasm-backend --- test/wasm_backend/indirect_call.cpp | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 test/wasm_backend/indirect_call.cpp (limited to 'test/wasm_backend/indirect_call.cpp') diff --git a/test/wasm_backend/indirect_call.cpp b/test/wasm_backend/indirect_call.cpp new file mode 100644 index 000000000..75c459199 --- /dev/null +++ b/test/wasm_backend/indirect_call.cpp @@ -0,0 +1,50 @@ +#include + +void print(const char *prefix, int v) { + int *x = (int*)8; // XXX this order is wrong! + *x = (int)prefix; + int *y = (int*)16; + *y = v; + EM_ASM({ + Module.print("print: " + Pointer_stringify(HEAP32[8>>2]) + " : " + HEAP32[16>>2]); + }); +} + +void something() { + print("something", 12); +} + +void more() { + print("more", -1); +} + +void other(int x) { + print("other", x + 40); +} + +void yet(int x) { + print("yet", x + 99); +} + +typedef void (*v)(); +typedef void (*vi)(int); + +int main(int argc, char **argv) { + print("argc", argc); + v f1[4] = { something, more, something, more }; + print("addr of something", (int)&something); + print("addr of more", (int)&more); + for (int i = 0; i < 4 && i < argc*4; i++) { + print("i", i); + v curr = f1[i]; + print("curr address to call", (int)curr); + curr(); + } + vi f2[4] = { other, yet, other, yet }; + for (int i = 0; i < 4 && i < argc*4; i++) { + vi curr = f2[i]; + print("curr", (int)curr); + curr(i); + } +} + -- cgit v1.2.3