Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Upgrade to Binaryen 100 #75

Merged
merged 1 commit into from Mar 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions js/expression.ml
Expand Up @@ -37,9 +37,10 @@ let call wasm_mod name params return_typ =
inject return_typ;
|]

let call_indirect wasm_mod target params params_typ return_typ =
let call_indirect wasm_mod table target params params_typ return_typ =
meth_call wasm_mod "call_indirect"
[|
inject table;
inject target;
inject (array (Array.of_list params));
inject params_typ;
Expand All @@ -54,9 +55,10 @@ let return_call wasm_mod name params return_typ =
inject return_typ;
|]

let return_call_indirect wasm_mod target params params_typ return_typ =
let return_call_indirect wasm_mod table target params params_typ return_typ =
meth_call wasm_mod "return_call_indirect"
[|
inject table;
inject target;
inject (array (Array.of_list params));
inject params_typ;
Expand Down
24 changes: 18 additions & 6 deletions src/binaryen_stubs_expressions.c
Expand Up @@ -103,9 +103,11 @@ caml_binaryen_call(value _module, value _name, value _params, value _retty) {
}

CAMLprim value
caml_binaryen_call_indirect(value _module, value _target, value _params, value _paramsty, value _retty) {
CAMLparam5(_module, _target, _params, _paramsty, _retty);
caml_binaryen_call_indirect(value _module, value _table, value _target, value _params, value _paramsty, value _retty) {
CAMLparam5(_module, _table, _target, _params, _paramsty);
CAMLxparam1(_retty);
phated marked this conversation as resolved.
Show resolved Hide resolved
BinaryenModuleRef module = BinaryenModuleRef_val(_module);
char* table = Safe_String_val(_table);
BinaryenExpressionRef target = BinaryenExpressionRef_val(_target);
_params = array_of_list(_params);
int paramsLen = array_length(_params);
Expand All @@ -115,9 +117,13 @@ caml_binaryen_call_indirect(value _module, value _target, value _params, value _
}
BinaryenType paramsty = BinaryenType_val(_paramsty);
BinaryenType retty = BinaryenType_val(_retty);
BinaryenExpressionRef exp = BinaryenCallIndirect(module, target, params, paramsLen, paramsty, retty);
BinaryenExpressionRef exp = BinaryenCallIndirect(module, table, target, params, paramsLen, paramsty, retty);
CAMLreturn(alloc_BinaryenExpressionRef(exp));
}
CAMLprim value
caml_binaryen_call_indirect__bytecode(value * argv) {
return caml_binaryen_call_indirect(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
}

CAMLprim value
caml_binaryen_return_call(value _module, value _name, value _params, value _retty) {
Expand All @@ -136,9 +142,11 @@ caml_binaryen_return_call(value _module, value _name, value _params, value _rett
}

CAMLprim value
caml_binaryen_return_call_indirect(value _module, value _target, value _params, value _paramsty, value _retty) {
CAMLparam5(_module, _target, _params, _paramsty, _retty);
caml_binaryen_return_call_indirect(value _module, value _table, value _target, value _params, value _paramsty, value _retty) {
CAMLparam5(_module, _table, _target, _params, _paramsty);
CAMLxparam1(_retty);
BinaryenModuleRef module = BinaryenModuleRef_val(_module);
char* table = Safe_String_val(_table);
BinaryenExpressionRef target = BinaryenExpressionRef_val(_target);
_params = array_of_list(_params);
int paramsLen = array_length(_params);
Expand All @@ -148,9 +156,13 @@ caml_binaryen_return_call_indirect(value _module, value _target, value _params,
}
BinaryenType paramsty = BinaryenType_val(_paramsty);
BinaryenType retty = BinaryenType_val(_retty);
BinaryenExpressionRef exp = BinaryenReturnCallIndirect(module, target, params, paramsLen, paramsty, retty);
BinaryenExpressionRef exp = BinaryenReturnCallIndirect(module, table, target, params, paramsLen, paramsty, retty);
CAMLreturn(alloc_BinaryenExpressionRef(exp));
}
CAMLprim value
caml_binaryen_return_call_indirect__bytecode(value * argv) {
return caml_binaryen_return_call_indirect(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
}
phated marked this conversation as resolved.
Show resolved Hide resolved

CAMLprim value
caml_binaryen_local_get(value _module, value _slot, value _ty) {
Expand Down
5 changes: 5 additions & 0 deletions src/dune
Expand Up @@ -18,6 +18,11 @@
(action
(copy ../vendor/binaryen-c.h binaryen-c.h)))

(rule
(target wasm-delegations.h)
(action
(copy ../vendor/wasm-delegations.h wasm-delegations.h)))

(rule
(target libbinaryen.a)
(action
Expand Down
12 changes: 6 additions & 6 deletions src/expression.ml
Expand Up @@ -22,17 +22,17 @@ external call : Module.t -> string -> t list -> Type.t -> t
= "caml_binaryen_call"
(** Module, function name, params, return type. *)

external call_indirect : Module.t -> t -> t list -> Type.t -> Type.t -> t
= "caml_binaryen_call_indirect"
(** Module, function value, params, params type, return type. *)
external call_indirect : Module.t -> string -> t -> t list -> Type.t -> Type.t -> t
= "caml_binaryen_call_indirect__bytecode" "caml_binaryen_call_indirect"
(** Module, table, function value, params, params type, return type. *)

external return_call : Module.t -> string -> t list -> Type.t -> t
= "caml_binaryen_return_call"
(** Module, function name, params, return type. *)

external return_call_indirect : Module.t -> t -> t list -> Type.t -> Type.t -> t
= "caml_binaryen_return_call_indirect"
(** Module, function value, params, params type, return type. *)
external return_call_indirect : Module.t -> string -> t -> t list -> Type.t -> Type.t -> t
= "caml_binaryen_return_call_indirect__bytecode" "caml_binaryen_return_call_indirect"
(** Module, table, function value, params, params type, return type. *)

external local_get : Module.t -> int -> Type.t -> t = "caml_binaryen_local_get"
(** Module, slot, type. *)
Expand Down