Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[WASM-References] Add support for type annotated select
https://bugs.webkit.org/show_bug.cgi?id=219595 Patch by Dmitry Bezhetskov <dbezhetskov@igalia.com> on 2020-12-15 Reviewed by Yusuke Suzuki. JSTests: Added new harness for testing ref-types proposal because it has different API with core/spec. However, a few files are actually the same I decided to repeat them to have an independent copy. Added ref-types spec's tests for the new type annotated select instruction: https://github.com/WebAssembly/reference-types/blob/master/test/core/select.wast. * wasm.yaml: * wasm/ref-spec-harness.js: Added. (import.string_appeared_here.then): (test): (promise_test): (let.assert_unreached): (let.console.log): * wasm/ref-spec-harness/async_index.js: Added. (let.testNum): (uniqueTest): (assertThrows): (externref): (is_externref): (is_funcref): (eq_externref): (eq_funcref): (binary): (module): (assert_invalid): (instance): (exports): (then.): (reinitializeRegistry.get promise_test): (reinitializeRegistry): (catch): (assert_exhaustion): (get const): * wasm/ref-spec-harness/sync_index.js: Added. (let.testNum): (assertThrows): (_assert): (ValueResult): (ErrorResult): (Result.prototype.isError): (externref): (is_externref): (is_funcref): (eq_externref): (eq_funcref): (reinitializeRegistry.let.handler.get return): (binary): (module): * wasm/ref-spec-harness/wasm-constants.js: Added. (hostref): (bytes): (bytesWithHeader): (makeSig): (makeSig_v_x): (makeSig_v_xx): (makeSig_r_v): (makeSig_r_x): (makeSig_r_xx): (assertTraps): (assertWasmThrows): * wasm/ref-spec-harness/wasm-module-builder.js: Added. (Binary.prototype.emit_u8): (Binary.prototype.emit_u16): (Binary.prototype.emit_u32): (Binary.prototype.emit_u32v): (Binary.prototype.emit_bytes): (Binary.prototype.emit_string): (Binary.prototype.emit_header): (Binary.prototype.emit_section): (Binary): (WasmFunctionBuilder): (WasmFunctionBuilder.prototype.exportAs): (WasmFunctionBuilder.prototype.exportFunc): (WasmFunctionBuilder.prototype.addBody): (WasmFunctionBuilder.prototype.addLocals): (WasmFunctionBuilder.prototype.end): (WasmGlobalBuilder): (WasmGlobalBuilder.prototype.exportAs): (WasmModuleBuilder): (WasmModuleBuilder.prototype.addStart): (WasmModuleBuilder.prototype.addMemory): (WasmModuleBuilder.prototype.addExplicitSection): (WasmModuleBuilder.prototype.stringToBytes): (WasmModuleBuilder.prototype.addCustomSection): (WasmModuleBuilder.prototype.addType): (WasmModuleBuilder.prototype.addGlobal): (WasmModuleBuilder.prototype.addFunction): (WasmModuleBuilder.prototype.addImport): (WasmModuleBuilder.prototype.addImportedGlobal): (WasmModuleBuilder.prototype.addImportedMemory): (WasmModuleBuilder.prototype.addImportedTable): (WasmModuleBuilder.prototype.addExport): (WasmModuleBuilder.prototype.addExportOfKind): (WasmModuleBuilder.prototype.addDataSegment): (WasmModuleBuilder.prototype.exportMemoryAs): (WasmModuleBuilder.prototype.addFunctionTableInit): (WasmModuleBuilder.prototype.appendToTable): (WasmModuleBuilder.prototype.setFunctionTableLength): (WasmModuleBuilder.prototype.toArray): (WasmModuleBuilder.prototype.toBuffer): (WasmModuleBuilder.prototype.instantiate): * wasm/ref-spec-harness/wast.js: Added. (normalize): (require.else._registry.name): (require): (add_hex_char): (add_char): (string_with): (list_of_opt): (break_bytes.f): (break_bytes): (f): (decls): (func_type): (limits): (global_type): (testop): (relop): (unop): (binop): (cvtop): (oper): (mem_size): (extension): (memop): (storeop): (var): (constop): (instr.else.switch.case.0.f): (instr.else.switch.case.1.f.1): (instr.else.switch.case.2.f.2): (instr): (func_with_name): (func): (start): (table): (memory): (segment): (elems): (data): (typedef): (import_kind): (import): (export_kind): (export): (var_opt): (is_func_import): (is_table_import): (is_memory_import): (is_global_import): (f.1): (f.2): (f.3): (module_with_var_opt): (module_): (literal): (definition): (access): (action): (script): (_registry.string_appeared_here): (init): (make_matrix): (copy): (append): (sub): (fill): (blit): (iter): (map): (iteri): (mapi): (to_list): (list_length): (of_list): (fold_left): (fold_right): (maxson): (trickle): (bubble): (trickleup): (sort): (merge): (isortto): (sortto): (stable_sort): (import_type): (export_type): (dims.n): (dims.d.i): (dims): (map_file): (create): (of_array): (slice_left): (slice_right): (slice_left_1): (slice_right_1): (slice_left_2): (slice_right_2): (array1_of_genarray): (array2_of_genarray): (array3_of_genarray): (reshape_1): (reshape_2): (reshape_3): (reshape): (__): (contents): (to_bytes): (nth): (length): (clear): (reset): (resize): (add_substring): (add_subbytes): (add_string): (add_bytes): (add_buffer): (add_channel): (output_buffer): (closing): (advance_to_closing): (advance_to_non_alpha): (find_ident): (add_substitute): (make): (to_string): (of_string): (sub_string): (extend): (blit_string): (concat): (cat): (is_space): (trim): (escaped): (uppercase): (lowercase): (apply1): (capitalize): (uncapitalize): (index_rec): (index): (index_from): (rindex_rec): (rindex): (rindex_from): (contains_from): (contains): (rcontains_from): (caml_array_sub): (len): (caml_array_concat): (caml_make_vect): (caml_array_blit): (get if): (caml_set_oo_id): (get_id): (caml_int32_float_of_bits): (caml_int32_bits_of_float): (caml_classify_float): (caml_modf_float): (caml_ldexp_float): (caml_frexp_float): (caml_copysign_float): (caml_expm1_float): (caml_hypot_float): (caml_log10_float): (caml_failwith): (parse_digit): (int_of_string_base): (parse_sign_and_base): (caml_int_of_string.aux): (caml_int_of_string): (caml_int64_of_string.aux): (caml_int64_of_string): (int_of_base): (parse_format): (finish_formatting): (caml_format_int): (caml_int64_format): (caml_format_float): (float_of_string): (div): (mod_): (caml_bswap16): (caml_int32_bswap): (imul): (neg_signed): (not): (eq): (neg): (lsl_): (lsr_): (asr_): (is_zero): (mul): (swap): (xor): (or_): (and_): (ge): (lt): (gt): (le): (to_float): (of_float): (div_mod): (compare): (of_int32): (to_int32): (to_hex.aux): (to_hex): (discard_sign): (float_of_bits): (bits_of_float.to_nat): (bits_of_float): (get64): (erase_rel): (concat_fmtty): (concat_fmt): (create_char_set): (add_in_char_set): (rev_char_set): (is_in_char_set): (prec_of_prec_opt): (param_format_of_ignored_format): (buffer_check_size): (buffer_add_char): (buffer_add_string): (buffer_contents): (char_of_iconv): (char_of_fconv): (char_of_counter): (print_char): (set while.set var): (set while.set else): (set var): (set else): (set print_char): (set if): (bprint_padty): (bprint_ignored_flag): (bprint_pad_opt): (bprint_padding): (bprint_precision): (bprint_iconv_flag): (bprint_int_fmt): (bprint_altint_fmt): (bprint_fconv_flag): (bprint_float_fmt): (string_of_formatting_lit): (string_of_formatting_gen): (bprint_char_literal): (bprint_string_literal): (bprint_fmtty): (int_of_custom_arity): (bprint_fmt): (string_of_fmt): (symm): (fmtty_rel_det): (trans): (fmtty_of_formatting_gen): (fmtty_of_fmt): (fmtty_of_custom): (fmtty_of_padding_fmtty): (fmtty_of_precision_fmtty): (type_padding): (type_padprec): (type_ignored_param_one): (type_format_gen): (type_ignored_format_substitution): (type_format): (recast): (fix_padding): (fix_int_precision): (string_to_caml_string): (format_of_iconv): (format_of_aconv): (format_of_fconv): (convert_int): (convert_int32): (convert_nativeint): (convert_int64): (else.is_valid): (convert_float): (format_caml_char): (string_of_fmtty): (else.switch.): (else.switch.k.prime): (else.switch.else.): (else.switch.else.k.prime.1): (make_printf): (make_from_fmtty): (make_invalid_arg): (make_string_padding): (make_int_padding_precision): (make_custom): (output_acc): (bufput_acc): (strput_acc): (failwith_message.k): (failwith_message): (open_box_of_string.else.invalid_box): (open_box_of_string.else.parse_spaces): (open_box_of_string.else.parse_lword): (open_box_of_string.else.parse_int): (open_box_of_string): (make_padding_fmt_ebb): (make_precision_fmt_ebb): (make_padprec_fmt_ebb): (invalid_format_message): (invalid_format_without): (expected_character): (compute_int_conv): (incompatible_flag): (parse_positive): (parse_conv): (parse_after_precision): (else.parse_literal): (parse_after_padding): (parse_literal): (parse_after_at): (add_literal): (parse_spaces): (parse_integer): (compute_float_conv): (search_subformat_end): (check_no_0): (opt_of_pad): (get_prec_opt): (else.switch.case.99.char_format): (else.switch.scan_format): (parse_conversion): (set_flag): (parse_flags): (is_int_base): (counter_of_char): (add_range): (fail_single_percent): (parse_char_set_after_char): (parse_char_set_content): (parse_char_set_start): (parse_char_set): (check_open_box): (parse_tag): (fmt_ebb_of_string): (format_of_string_fmtty): (format_of_string_format): (caret): (caml_ml_open_descriptor_in): (caml_ml_open_descriptor_out): (caml_ml_flush): (node_std_output): (caml_ml_output_char): (caml_ml_input): (caml_ml_input_char): (caml_ml_out_channels_list): (fail): (caml_lex_array): (caml_lex_engine): (caml_lex_run_mem): (caml_lex_run_tag): (caml_new_lex_engine): (caml_obj_dup): (caml_obj_truncate): (caml_lazy_make_forward): (caml_update_dummy): (caml_int_compare): (caml_compare): (caml_equal): (caml_notequal): (caml_greaterequal): (caml_lessequal): (else.aux): (caml_get_public_method): (caml_parse_engine): (caml_set_parser_trace): (js_string_of_char): (caml_string_get): (caml_create_string): (caml_string_compare): (caml_fill_string): (caml_blit_string): (caml_blit_bytes): (bytes_of_string): (bytes_to_string): (caml_string_of_char_array): (caml_is_printable): (caml_string_get16): (caml_string_get32): (repeat): (chr): (app): (js): (curry_1): (_1): (js1): (__1): (curry_2): (_2): (js2): (__2): (curry_3): (_3): (js3): (__3): (curry_4): (_4): (js4): (__4): (curry_5): (_5): (js5): (__5): (curry_6): (_6): (js6): (__6): (curry_7): (_7): (js7): (__7): (curry_8): (_8): (js8): (__8): (stream): (eos): (skip): (read): (peek): (string_of_byte): (position): (region): (error): (guard): (get 1): (get expect): (get illegal): (at): (u32): (u64): (get require): (vuN): (get var): (vsN): (vu32): (vs32): (vs64): (f32): (f64): (len32): (string): (opt): (vec): (sized): (value_type): (elem_type): (stack_type): (table_type): (memory_type): (mutability.get if): (mutability): (instr.get if): (instr_block): (const): (id): (section): (type_section): (import_kind.get if): (import_section): (func_section): (table_section): (memory_section): (global): (global_section): (export_kind.get if): (export_section): (start_section): (local): (code): (code_section): (table_segment): (elem_section): (memory_segment): (data_section): (partial_arg.1): (custom): (custom_section): (iterate): (decode): (patch): (encode.u8): (encode.u16): (encode.u32): (encode.vu64): (encode.vs64): (encode.vu32): (encode.len): (encode.bool): (encode.string): (encode.vec): (encode.gap32): (encode.patch_gap32): (encode.value_type): (encode.stack_type): (encode.func_type): (encode.limits): (encode.table_type): (encode.memory_type): (encode.global_type): (encode.memop): (encode): (encode.instr): (encode.const): (encode.section): (encode.type_section): (encode.import): (encode.import_section): (encode.func): (encode.func_section): (encode.table): (encode.table_section): (encode.memory): (encode.memory_section): (encode.global): (encode.global_section): (encode.export_kind): (encode.export): (encode.export_section): (encode.start_section): (encode.combine): (encode.compress): (encode.local): (encode.code): (encode.code_section): (encode.segment): (encode.table_segment): (encode.elem_section): (encode.memory_segment): (encode.module_): (Make.warn): (Make.error): (Make): (print_nan_significand_digits): (Make.of_bits): (Make.to_bits): (Make.is_nan): (Make.canonicalize_nan): (Make.determine_binary_nan): (Make.determine_unary_nan): (Make.binary): (Make.unary): (Make.add): (Make.sub): (Make.mul): (Make.div): (Make.sqrt): (Make.ceil): (Make.floor): (Make.trunc): (Make.nearest): (Make.min): (Make.max): (Make.abs): (Make.neg): (Make.copysign): (Make.eq): (Make.ne): (Make.lt): (Make.gt): (Make.le): (Make.ge): (Make.of_signless_string): (Make.of_string): (Make.to_string): (add_queue): (peek_queue): (take_queue): (pp_enqueue): (pp_clear_queue): (pp_output_string): (break_new_line): (break_same_line): (pp_force_break_line): (switch.add_tab): (else.switch.find): (format_pp_token): (advance_left): (enqueue_advance): (enqueue_string_as): (set_size): (scan_push): (pp_open_box_gen): (pp_close_box): (pp_open_tag): (pp_close_tag): (pp_set_print_tags): (pp_set_mark_tags): (pp_get_print_tags): (pp_get_mark_tags): (pp_set_tags): (pp_get_formatter_tag_functions): (pp_set_formatter_tag_functions): (pp_rinit): (pp_flush_queue): (pp_print_as_size): (pp_print_string): (pp_print_int): (pp_print_float): (pp_print_bool): (pp_open_hbox): (pp_open_vbox): (pp_open_hvbox): (pp_open_hovbox): (pp_open_box): (pp_print_newline): (pp_print_flush): (pp_force_newline): (pp_print_if_newline): (pp_print_break): (pp_print_space): (pp_print_cut): (pp_open_tbox): (pp_close_tbox): (pp_print_tbreak): (pp_print_tab): (pp_set_tab): (pp_print_list): (flush): (pp_print_text): (pp_set_max_boxes): (pp_get_max_boxes): (pp_over_max_boxes): (pp_get_ellipsis_text): (pp_limit): (pp_set_max_indent): (pp_get_max_indent): (pp_set_margin): (pp_get_margin): (pp_set_formatter_out_functions): (pp_get_formatter_out_functions): (pp_set_formatter_output_functions): (pp_get_formatter_output_functions): (pp_set_all_formatter_output_functions): (pp_get_all_formatter_output_functions): (display_newline): (display_blanks): (state.16): (state.17): (state.18): (state.19): (pp_set_formatter_out_channel): (default_pp_mark_open_tag): (default_pp_mark_close_tag): (default_pp_print_open_tag): (default_pp_print_close_tag): (pp_make_formatter): (ppf.18): (ppf.19): (make_formatter): (formatter_of_out_channel): (formatter_of_buffer): (flush_str_formatter): (flush_buf_formatter): (open_hbox): (open_vbox): (open_hvbox): (open_hovbox): (open_box): (close_box): (open_tag): (close_tag): (print_as): (print_string): (print_int): (print_float): (print_bool): (print_cut): (print_space): (force_newline): (print_flush): (print_newline): (print_if_newline): (open_tbox): (close_tbox): (print_tbreak): (set_tab): (print_tab): (set_margin): (get_margin): (set_max_indent): (get_max_indent): (set_max_boxes): (get_max_boxes): (over_max_boxes): (set_ellipsis_text): (get_ellipsis_text): (set_formatter_out_channel): (set_formatter_out_functions): (get_formatter_out_functions): (set_formatter_output_functions): (get_formatter_output_functions): (set_all_formatter_output_functions): (get_all_formatter_output_functions): (set_formatter_tag_functions): (get_formatter_tag_functions): (set_print_tags): (get_print_tags): (set_mark_tags): (get_mark_tags): (set_tags): (compute_tag): (output_formatting_lit): (kfprintf): (ikfprintf): (fprintf): (ifprintf): (printf): (eprintf): (k.prime): (ksprintf): (sprintf): (asprintf.k.prime): (asprintf): (k): (bprintf): (succ): (pred): (abs): (lognot): (Make.cmp_u): (Make.divrem_u): (Make.div_s): (Make.div_u): (Make.rem_s): (Make.rem_u): (Make.shift): (Make.shl): (Make.shr_s): (Make.shr_u): (Make.clamp_rotate_count): (Make.rotl): (Make.rotr): (Make.loop): (Make.clz): (Make.ctz): (Make.popcnt): (Make.eqz): (Make.lt_u): (Make.le_u): (Make.gt_u): (Make.ge_u): (Make.of_int_u): (Make.to_string_u): (Make.require): (Make.dec_digit): (Make.hex_digit): (Make.parse_int): (Make.of_string_s): (Make.of_string_u): (convert_pos): (error_nest): (text): (intop): (floatop): (numop): (memsz): (ext): (token.else.switch): (token.else.switch.): (token): (__ocaml_lex_comment_rec): (engine): (new_engine): (from_function): (from_channel): (from_string): (lexeme): (sub_lexeme): (sub_lexeme_opt): (sub_lexeme_char): (sub_lexeme_char_opt): (lexeme_char): (lexeme_start): (lexeme_end): (lexeme_start_p): (lexeme_end_p): (new_line): (flush_input): (take): (drop): (last): (split_last): (index_of): (index_of_int32): (dim): (set 1): (get 2): (log2): (is_power_of_two): (loop): (breakup): (hd): (tl): (rev_append): (rev): (flatten): (rev_map): (map2): (rev_map2): (iter2): (fold_left2): (fold_right2): (for_all): (exists): (for_all2): (exists2): (mem): (memq): (assoc): (assq): (mem_assoc): (mem_assq): (remove_assoc): (remove_assq): (find): (find_all): (partition): (split): (combine): (chop): (rev_sort): (sort_uniq): (Make.height): (Make.create): (Make.singleton): (Make.bal): (Make.is_empty): (Make.find): (Make.mem): (Make.min_binding): (Make.max_binding): (Make.remove_min_binding): (Make.remove): (Make.iter): (Make.map): (Make.mapi): (Make.fold): (Make.for_all): (Make.exists): (Make.add_min_binding): (Make.add_max_binding): (Make.join): (Make.concat): (Make.concat_or_join): (Make.split): (Make.merge): (Make.filter): (Make.partition): (Make.cons_enum): (Make.compare): (Make.equal): (Make.cardinal): (Make.bindings_aux): (Make.bindings): (double_field): (set_double_field): (marshal): (unmarshal): (extension_slot): (extension_name): (extension_id): (i32_const): (i64_const): (f32_const): (f64_const): (block): (br): (br_if): (br_table): (if_): (call): (call_indirect): (get_local): (set_local): (tee_local): (get_global): (set_global): (i32_load): (i64_load): (f32_load): (f64_load): (i32_load8_s): (i32_load8_u): (i32_load16_s): (i32_load16_u): (i64_load8_s): (i64_load8_u): (i64_load16_s): (i64_load16_u): (i64_load32_s): (i64_load32_u): (i32_store): (i64_store): (f32_store): (f64_store): (i32_store8): (i32_store16): (i64_store8): (i64_store16): (i64_store32): (parse): (string_to): (string_to_script): (string_to_module): (parse_error): (position_to_pos): (positions_to_region): (ati): (nat): (nat32): (empty_context): (enter_func): (type_): (lookup): (label): (anon_type): (bind): (bind_func): (bind_local): (bind_global): (bind_table): (bind_memory): (anon): (anon_func): (anon_locals): (anon_global): (anon_table): (anon_memory): (anon_label): (explicit_sig): (inline_type): (yyact): (script1): (module1): (grow_stacks): (clear_parser): (current_lookahead_fun): (catch.else.current_lookahead_fun.0): (yyparse): (peek_val): (symbol_start_pos): (symbol_end_pos): (rhs_start_pos): (rhs_end_pos): (symbol_start): (symbol_end): (rhs_start): (rhs_end): (is_current_lookahead): (failwith): (invalid_arg): (min): (max): (lnot): (char_of_int): (string_of_bool): (bool_of_string): (string_of_int): (valid_float_lexem): (string_of_float): (open_out_gen): (open_out): (open_out_bin): (flush_all): (output_bytes): (output_string): (output): (output_substring): (output_value): (close_out): (close_out_noerr): (open_in_gen): (open_in): (open_in_bin): (input): (else.r): (unsafe_really_input): (really_input): (really_input_string): (input_line.build_result): (input_line.n): (input_line.scan): (input_line): (close_in_noerr): (print_bytes): (print_endline): (prerr_char): (prerr_string): (prerr_bytes): (prerr_int): (prerr_float): (prerr_endline): (prerr_newline): (read_line): (read_int): (read_float): (string_of_format): (at_exit.exit_function.0): (at_exit): (do_at_exit): (exit): (output_binary_int): (seek_out): (pos_out): (out_channel_length): (set_binary_mode_out): (input_binary_int): (input_value): (seek_in): (pos_in): (in_channel_length): (close_in): (set_binary_mode_in): (LargeFile_000): (LargeFile_001): (LargeFile_002): (LargeFile_003): (LargeFile_004): (LargeFile_005): (kbprintf): (plus): (pp): (print): (string_of_pos): (string_of_region): (escaped.needs_escape): (set_signal): (catch_break): (size): (string_of_value_type): (string_of_value_types): (string_of_elem_type): (string_of_limits): (string_of_table_type): (string_of_global_type): (string_of_stack_type): (string_of_func_type): (type_of): (default_value): (value_of_bool): (string_of_values): (to_value): (of_value): (g): (binary): (bytes): * wasm/references-spec-tests/select.wast.js: Added. * wasm/references/table_instructions_parse_unreachable.js: (invalidAnnotatedSelectUnreachable): * wasm/wasm.json: Source/JavaScriptCore: Add support for typed select instruction from ref-types proposal: select t : [t t i32] -> [t]. The annotated select instruction takes a value type immediate to deduce result type of select expression. This version of select will help us with subtyping in the future where we want to avoid computing lubs. For more information see: WebAssembly/reference-types#125, https://webassembly.github.io/reference-types/core/binary/instructions.html#parametric-instructions. * wasm/WasmFunctionParser.h: (JSC::Wasm::FunctionParser<Context>::parseAnnotatedSelectImmediates): (JSC::Wasm::FunctionParser<Context>::parseExpression): (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression): * wasm/wasm.json: Tools: Add support for testing ref-types. * Scripts/run-jsc-stress-tests: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@270827 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- Loading branch information