Skip to content

Commit

Permalink
Merge remote-tracking branch 'spec/wasm-3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
backes committed Oct 29, 2024
2 parents 86e22aa + 1e10102 commit 1795669
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 17 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci-interpreter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ name: CI for interpreter & tests

on:
push:
branches: [ main ]
branches: [ main, wasm-3.0 ]
paths: [ .github/**, interpreter/**, test/** ]

pull_request:
branches: [ main ]
branches: [ main, wasm-3.0 ]
paths: [ .github/**, interpreter/**, test/** ]

# Allows you to run this workflow manually from the Actions tab
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci-spec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ name: CI for specs

on:
push:
branches: [ main ]
branches: [ main, wasm-3.0 ]
paths: [ .github/**, document/** ]

pull_request:
branches: [ main ]
branches: [ main, wasm-3.0 ]
paths: [ .github/**, document/** ]

# Allows you to run this workflow manually from the Actions tab
Expand Down
2 changes: 1 addition & 1 deletion document/core/appendix/embedding.rst
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ Modules
.. index:: instantiation, module instance
.. _embed-module-instantiate:

:math:`\F{module\_instantiate}(\store, \module, \externval^\ast) : (\store, \moduleinst ~|~ \error)`
:math:`\F{module\_instantiate}(\store, \module, \externval^\ast) : (\store, \moduleinst ~|~ \exception ~|~ \error)`
....................................................................................................

1. Try :ref:`instantiating <exec-instantiation>` :math:`\module` in :math:`\store` with :ref:`external values <syntax-externval>` :math:`\externval^\ast` as imports:
Expand Down
2 changes: 1 addition & 1 deletion document/core/exec/instructions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2142,7 +2142,7 @@ where :math:`\Large\times \{x^\ast\}^N` transforms a sequence of :math:`N` sets
.. math::
\begin{array}{lcl@{\qquad}l}
(\V128\K{.}\VCONST~c)~t\K{x}N\K{.}\BITMASK &\stepto& (\I32\K{.}\CONST~i)
& (\iff i = \ibits_{32}^{-1}(\ilts_{|t|}(\lanes_{t\K{x}N}(c), 0^N)))
& (\iff i = \ibits_{32}^{-1}(\ilts_{|t|}(\lanes_{t\K{x}N}(c), (0)^N) (0)^{32-N}))
\\
\end{array}
Expand Down
2 changes: 1 addition & 1 deletion document/core/exec/numerics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2271,7 +2271,7 @@ where:
\begin{array}{@{}lcll}
\irelaxedswizzlelane(i^n, j) &=& i[j] & (\iff j < 16) \\
\irelaxedswizzlelane(i^n, j) &=& 0 & (\iff \signed_8(j) < 0) \\
\irelaxedswizzlelane(i^n, j) &=& \relaxed(R_{\F{swizzle}})[ 0, i[j \mod n] ] & (\otherwise) \\
\irelaxedswizzlelane(i^n, j) &=& \relaxed(R_{\F{swizzle}})[ 0, i^n[j \mod n] ] & (\otherwise) \\
\end{array}
.. note::
Expand Down
3 changes: 2 additions & 1 deletion document/core/exec/runtime.rst
Original file line number Diff line number Diff line change
Expand Up @@ -897,7 +897,8 @@ Finally, the following definition of *evaluation context* and associated structu
\production{evaluation contexts} & E &::=&
[\_] ~|~
\val^\ast~E~\instr^\ast ~|~
\LABEL_n\{\instr^\ast\}~E~\END \\
\LABEL_n\{\instr^\ast\}~E~\END ~|~
\HANDLER_n\{\catch^\ast\}~E~\END \\
\end{array}
.. math::
Expand Down
48 changes: 40 additions & 8 deletions interpreter/script/js.ml
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,15 @@ let value v =
| Num n -> [Const (n @@ v.at) @@ v.at]
| Vec s -> [VecConst (s @@ v.at) @@ v.at]
| Ref (NullRef ht) -> [RefNull (Match.bot_of_heap_type [] ht) @@ v.at]
| Ref (HostRef n) ->
[ Const (I32 n @@ v.at) @@ v.at;
Call (hostref_idx @@ v.at) @@ v.at;
]
| Ref (Extern.ExternRef (HostRef n)) ->
[Const (I32 n @@ v.at) @@ v.at; Call (hostref_idx @@ v.at) @@ v.at]
[ Const (I32 n @@ v.at) @@ v.at;
Call (hostref_idx @@ v.at) @@ v.at;
ExternConvert Externalize @@ v.at;
]
| Ref _ -> assert false

let invoke ft vs at =
Expand Down Expand Up @@ -360,8 +367,14 @@ let rec type_of_result res =
) (List.hd ts) ts

let assert_return ress ts at =
let locals = ref [] in
let rec test (res, t) =
if not (Match.match_val_type [] t (type_of_result res)) then
if
not (
Match.match_val_type [] t (type_of_result res) ||
Match.match_val_type [] (type_of_result res) t
)
then
[ Br (0l @@ at) @@ at ]
else
match res.it with
Expand Down Expand Up @@ -437,7 +450,14 @@ let assert_return ress ts at =
| RefResult (RefPat {it = HostRef n; _}) ->
[ Const (Value.I32 n @@ at) @@ at;
Call (hostref_idx @@ at) @@ at;
Call (eq_ref_idx @@ at) @@ at;
Call (eq_ref_idx @@ at) @@ at;
Test (Value.I32 I32Op.Eqz) @@ at;
BrIf (0l @@ at) @@ at ]
| RefResult (RefPat {it = Extern.ExternRef (HostRef n); _}) ->
[ Const (Value.I32 n @@ at) @@ at;
Call (hostref_idx @@ at) @@ at;
ExternConvert Externalize @@ at;
Call (eq_ref_idx @@ at) @@ at;
Test (Value.I32 I32Op.Eqz) @@ at;
BrIf (0l @@ at) @@ at ]
| RefResult (RefPat _) ->
Expand All @@ -453,17 +473,21 @@ let assert_return ress ts at =
Test (I32 I32Op.Eqz) @@ at;
BrIf (0l @@ at) @@ at ]
| EitherResult ress ->
[ Block (ValBlockType None,
let idx = Lib.List32.length !locals in
locals := !locals @ [{ltype = t} @@ res.at];
[ LocalSet (idx @@ res.at) @@ res.at;
Block (ValBlockType None,
List.map (fun resI ->
Block (ValBlockType None,
[LocalGet (idx @@ resI.at) @@ resI.at] @
test (resI, t) @
[Br (1l @@ resI.at) @@ resI.at]
) @@ resI.at
) ress @
[Br (1l @@ at) @@ at]
) @@ at
]
in [], List.flatten (List.rev_map test (List.combine ress ts))
in !locals, List.flatten (List.rev_map test (List.combine ress ts))

let i32 = NumT I32T
let anyref = RefT (Null, AnyHT)
Expand Down Expand Up @@ -502,12 +526,20 @@ let wrap item_name wrap_action wrap_assertion at =
in
let funcs = [{ftype = 0l @@ at; locals; body} @@ at] in
let m = {empty_module with types; funcs; imports; exports} @@ at in
(try
Valid.check_module m; (* sanity check *)
with Valid.Invalid _ as exn ->
prerr_endline (string_of_region at ^
": internal error in JS converter, invalid wrapper module generated:");
Sexpr.output stderr 80 (Arrange.module_ m);
raise exn
);
Encode.encode m


let is_js_num_type = function
| I32T -> true
| I64T | F32T | F64T -> false
| I32T | I64T -> true
| F32T | F64T -> false

let is_js_vec_type = function
| _ -> false
Expand Down Expand Up @@ -567,7 +599,7 @@ let of_num n =
let open Value in
match n with
| I32 i -> I32.to_string_s i
| I64 i -> "int64(\"" ^ I64.to_string_s i ^ "\")"
| I64 i -> I64.to_string_s i ^ "n"
| F32 z -> of_float (F32.to_float z)
| F64 z -> of_float (F64.to_float z)

Expand Down
2 changes: 1 addition & 1 deletion test/js-api/wasm-module-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -966,7 +966,7 @@ class WasmModuleBuilder {
}
let type_index = (typeof type) == "number" ? type : this.addType(type);
this.imports.push({module: module, name: name, kind: kExternalFunction,
type: type_index});
type_index: type_index});
return this.num_imported_funcs++;
}

Expand Down

0 comments on commit 1795669

Please sign in to comment.