Lines Matching refs:builder

125     builder: &mut FunctionBuilder,  in translate_operator()
131 translate_unreachable_operator(validator, &op, builder, environ)?; in translate_operator()
136 debug_assert!(!builder.is_unreachable()); in translate_operator()
137 let srcloc = builder.srcloc(); in translate_operator()
150 let val = builder.use_var(Variable::from_u32(*local_index)); in translate_operator()
153 builder.set_val_label(val, label); in translate_operator()
159 let ty = builder.func.dfg.value_type(val); in translate_operator()
161 val = optionally_bitcast_vector(val, I8X16, builder); in translate_operator()
164 builder.def_var(Variable::from_u32(*local_index), val); in translate_operator()
166 builder.set_val_label(val, label); in translate_operator()
167 environ.state_slot_local_set(builder, *local_index, val); in translate_operator()
173 let ty = builder.func.dfg.value_type(val); in translate_operator()
175 val = optionally_bitcast_vector(val, I8X16, builder); in translate_operator()
178 builder.def_var(Variable::from_u32(*local_index), val); in translate_operator()
180 builder.set_val_label(val, label); in translate_operator()
181 environ.state_slot_local_set(builder, *local_index, val); in translate_operator()
188 let val = environ.translate_global_get(builder, global_index)?; in translate_operator()
195 if builder.func.dfg.value_type(val).is_vector() { in translate_operator()
196 val = optionally_bitcast_vector(val, I8X16, builder); in translate_operator()
198 environ.translate_global_set(builder, global_index, val)?; in translate_operator()
218 if builder.func.dfg.value_type(arg1).is_vector() { in translate_operator()
219 arg1 = optionally_bitcast_vector(arg1, I8X16, builder); in translate_operator()
221 if builder.func.dfg.value_type(arg2).is_vector() { in translate_operator()
222 arg2 = optionally_bitcast_vector(arg2, I8X16, builder); in translate_operator()
225 let val = builder.ins().select(cond, arg1, arg2); in translate_operator()
243 builder.declare_value_needs_stack_map(val); in translate_operator()
249 environ.trap(builder, crate::TRAP_UNREACHABLE); in translate_operator()
265 let next = block_with_params(builder, results.clone(), environ)?; in translate_operator()
270 let loop_body = block_with_params(builder, params.clone(), environ)?; in translate_operator()
271 let next = block_with_params(builder, results.clone(), environ)?; in translate_operator()
272 canonicalise_then_jump(builder, loop_body, environ.stacks.peekn(params.len())); in translate_operator()
283 .extend_from_slice(builder.block_params(loop_body)); in translate_operator()
285 builder.switch_to_block(loop_body); in translate_operator()
286 environ.translate_loop_header(builder)?; in translate_operator()
291 let next_block = builder.create_block(); in translate_operator()
300 let destination = block_with_params(builder, results.clone(), environ)?; in translate_operator()
302 builder, in translate_operator()
319 let destination = block_with_params(builder, results.clone(), environ)?; in translate_operator()
320 let else_block = block_with_params(builder, params.clone(), environ)?; in translate_operator()
322 builder, in translate_operator()
329 builder.seal_block(else_block); in translate_operator()
333 builder.seal_block(next_block); // Only predecessor is the current block. in translate_operator()
334 builder.switch_to_block(next_block); in translate_operator()
383 block_with_params(builder, params.clone(), environ)?; in translate_operator()
385 builder, in translate_operator()
391 builder.change_jump_destination( in translate_operator()
396 builder.seal_block(else_block); in translate_operator()
401 builder, in translate_operator()
420 builder.switch_to_block(else_block); in translate_operator()
435 canonicalise_then_jump(builder, next_block, return_args); in translate_operator()
443 builder.switch_to_block(next_block); in translate_operator()
444 builder.seal_block(next_block); in translate_operator()
448 builder.seal_block(header) in translate_operator()
451 frame.restore_catch_handlers(&mut environ.stacks.handlers, builder); in translate_operator()
460 .extend_from_slice(builder.block_params(next_block)); in translate_operator()
497 canonicalise_then_jump(builder, br_destination, destination_args); in translate_operator()
501 Operator::BrIf { relative_depth } => translate_br_if(*relative_depth, builder, environ), in translate_operator()
532 data.push(builder.func.dfg.block_call(block, &[])); in translate_operator()
540 let block = builder.func.dfg.block_call(block, &[]); in translate_operator()
541 let jt = builder.create_jump_table(JumpTableData::new(block, &data)); in translate_operator()
542 builder.ins().br_table(val, jt); in translate_operator()
554 let block = builder.create_block(); in translate_operator()
559 data.push(builder.func.dfg.block_call(branch_block, &[])); in translate_operator()
564 let block = builder.create_block(); in translate_operator()
569 let default_branch_block = builder.func.dfg.block_call(default_branch_block, &[]); in translate_operator()
570 let jt = builder.create_jump_table(JumpTableData::new(default_branch_block, &data)); in translate_operator()
571 builder.ins().br_table(val, jt); in translate_operator()
573 builder.switch_to_block(dest_block); in translate_operator()
574 builder.seal_block(dest_block); in translate_operator()
582 canonicalise_then_jump(builder, real_dest_block, destination_args); in translate_operator()
595 environ.handle_before_return(&return_args, builder); in translate_operator()
596 bitcast_wasm_returns(&mut return_args, builder); in translate_operator()
597 builder.ins().return_(&return_args); in translate_operator()
616 let body = builder.create_block(); in translate_operator()
618 let next = block_with_params(builder, results.clone(), environ)?; in translate_operator()
619 builder.ins().jump(body, []); in translate_operator()
620 builder.seal_block(body); in translate_operator()
636 catch_blocks.push(create_catch_block(builder, catch, environ)?); in translate_operator()
648 builder.switch_to_block(body); in translate_operator()
655 environ.translate_exn_throw(builder, tag_index, &args)?; in translate_operator()
662 environ.translate_exn_throw_ref(builder, exnref)?; in translate_operator()
676 let sig_ref = environ.get_or_create_interned_sig_ref(builder.func, ty); in translate_operator()
681 bitcast_wasm_params(environ, sig_ref, &mut args, builder); in translate_operator()
684 builder, in translate_operator()
693 builder.func.dfg.signatures[sig_ref].returns.len(), in translate_operator()
707 let sigref = environ.get_or_create_sig_ref(builder.func, type_index); in translate_operator()
713 bitcast_wasm_params(environ, sigref, &mut args, builder); in translate_operator()
716 builder, in translate_operator()
735 builder.func.dfg.signatures[sigref].returns.len(), in translate_operator()
753 let sig_ref = environ.get_or_create_interned_sig_ref(builder.func, ty); in translate_operator()
758 bitcast_wasm_params(environ, sig_ref, &mut args, builder); in translate_operator()
760 environ.translate_return_call(builder, srcloc, function_index, sig_ref, &args)?; in translate_operator()
773 let sigref = environ.get_or_create_sig_ref(builder.func, type_index); in translate_operator()
779 bitcast_wasm_params(environ, sigref, &mut args, builder); in translate_operator()
782 builder, in translate_operator()
800 let sigref = environ.get_or_create_sig_ref(builder.func, type_index); in translate_operator()
806 bitcast_wasm_params(environ, sigref, &mut args, builder); in translate_operator()
808 environ.translate_return_call_ref(builder, srcloc, sigref, callee, &args)?; in translate_operator()
821 let _heap = environ.get_or_create_heap(builder.func, mem); in translate_operator()
823 environ.before_memory_grow(builder, val, mem); in translate_operator()
824 let result = environ.translate_memory_grow(builder, mem, val)?; in translate_operator()
829 let _heap = environ.get_or_create_heap(builder.func, mem); in translate_operator()
830 let result = environ.translate_memory_size(builder.cursor(), mem)?; in translate_operator()
840 translate_load(memarg, ir::Opcode::Uload8, I32, builder, environ)? in translate_operator()
846 translate_load(memarg, ir::Opcode::Uload16, I32, builder, environ)? in translate_operator()
852 translate_load(memarg, ir::Opcode::Sload8, I32, builder, environ)? in translate_operator()
858 translate_load(memarg, ir::Opcode::Sload16, I32, builder, environ)? in translate_operator()
864 translate_load(memarg, ir::Opcode::Uload8, I64, builder, environ)? in translate_operator()
870 translate_load(memarg, ir::Opcode::Uload16, I64, builder, environ)? in translate_operator()
876 translate_load(memarg, ir::Opcode::Sload8, I64, builder, environ)? in translate_operator()
882 translate_load(memarg, ir::Opcode::Sload16, I64, builder, environ)? in translate_operator()
888 translate_load(memarg, ir::Opcode::Sload32, I64, builder, environ)? in translate_operator()
894 translate_load(memarg, ir::Opcode::Uload32, I64, builder, environ)? in translate_operator()
900 translate_load(memarg, ir::Opcode::Load, I32, builder, environ)? in translate_operator()
906 translate_load(memarg, ir::Opcode::Load, F32, builder, environ)? in translate_operator()
912 translate_load(memarg, ir::Opcode::Load, I64, builder, environ)? in translate_operator()
918 translate_load(memarg, ir::Opcode::Load, F64, builder, environ)? in translate_operator()
924 translate_load(memarg, ir::Opcode::Load, I8X16, builder, environ)? in translate_operator()
931 prepare_addr(memarg, 8, builder, environ)? in translate_operator()
933 let loaded = builder.ins().sload8x8(flags, base, 0); in translate_operator()
939 prepare_addr(memarg, 8, builder, environ)? in translate_operator()
941 let loaded = builder.ins().uload8x8(flags, base, 0); in translate_operator()
947 prepare_addr(memarg, 8, builder, environ)? in translate_operator()
949 let loaded = builder.ins().sload16x4(flags, base, 0); in translate_operator()
955 prepare_addr(memarg, 8, builder, environ)? in translate_operator()
957 let loaded = builder.ins().uload16x4(flags, base, 0); in translate_operator()
963 prepare_addr(memarg, 8, builder, environ)? in translate_operator()
965 let loaded = builder.ins().sload32x2(flags, base, 0); in translate_operator()
971 prepare_addr(memarg, 8, builder, environ)? in translate_operator()
973 let loaded = builder.ins().uload32x2(flags, base, 0); in translate_operator()
984 translate_store(memarg, ir::Opcode::Store, builder, environ)?; in translate_operator()
987 translate_store(memarg, ir::Opcode::Istore8, builder, environ)?; in translate_operator()
990 translate_store(memarg, ir::Opcode::Istore16, builder, environ)?; in translate_operator()
993 translate_store(memarg, ir::Opcode::Istore32, builder, environ)?; in translate_operator()
996 translate_store(memarg, ir::Opcode::Store, builder, environ)?; in translate_operator()
1002 .push1(builder.ins().iconst(I32, i64::from(value.cast_unsigned()))); in translate_operator()
1004 Operator::I64Const { value } => environ.stacks.push1(builder.ins().iconst(I64, *value)), in translate_operator()
1008 .push1(builder.ins().f32const(f32_translation(*value))); in translate_operator()
1013 .push1(builder.ins().f64const(f64_translation(*value))); in translate_operator()
1018 environ.stacks.push1(builder.ins().clz(arg)); in translate_operator()
1022 environ.stacks.push1(builder.ins().ctz(arg)); in translate_operator()
1026 environ.stacks.push1(builder.ins().popcnt(arg)); in translate_operator()
1030 environ.stacks.push1(builder.ins().sextend(I64, val)); in translate_operator()
1034 environ.stacks.push1(builder.ins().uextend(I64, val)); in translate_operator()
1038 environ.stacks.push1(builder.ins().ireduce(I32, val)); in translate_operator()
1042 environ.stacks.push1(builder.ins().sqrt(arg)); in translate_operator()
1046 let result = environ.ceil_f32(builder, arg); in translate_operator()
1051 let result = environ.ceil_f64(builder, arg); in translate_operator()
1056 let result = environ.floor_f32(builder, arg); in translate_operator()
1061 let result = environ.floor_f64(builder, arg); in translate_operator()
1066 let result = environ.trunc_f32(builder, arg); in translate_operator()
1071 let result = environ.trunc_f64(builder, arg); in translate_operator()
1076 let result = environ.nearest_f32(builder, arg); in translate_operator()
1081 let result = environ.nearest_f64(builder, arg); in translate_operator()
1086 environ.stacks.push1(builder.ins().fabs(val)); in translate_operator()
1090 environ.stacks.push1(builder.ins().fneg(arg)); in translate_operator()
1094 environ.stacks.push1(builder.ins().fcvt_from_uint(F64, val)); in translate_operator()
1098 environ.stacks.push1(builder.ins().fcvt_from_sint(F64, val)); in translate_operator()
1102 environ.stacks.push1(builder.ins().fcvt_from_sint(F32, val)); in translate_operator()
1106 environ.stacks.push1(builder.ins().fcvt_from_uint(F32, val)); in translate_operator()
1110 environ.stacks.push1(builder.ins().fpromote(F64, val)); in translate_operator()
1114 environ.stacks.push1(builder.ins().fdemote(F32, val)); in translate_operator()
1118 let result = environ.translate_fcvt_to_sint(builder, I64, val); in translate_operator()
1123 let result = environ.translate_fcvt_to_sint(builder, I32, val); in translate_operator()
1128 let result = environ.translate_fcvt_to_uint(builder, I64, val); in translate_operator()
1133 let result = environ.translate_fcvt_to_uint(builder, I32, val); in translate_operator()
1140 .push1(builder.ins().fcvt_to_sint_sat(I64, val)); in translate_operator()
1146 .push1(builder.ins().fcvt_to_sint_sat(I32, val)); in translate_operator()
1152 .push1(builder.ins().fcvt_to_uint_sat(I64, val)); in translate_operator()
1158 .push1(builder.ins().fcvt_to_uint_sat(I32, val)); in translate_operator()
1164 .push1(builder.ins().bitcast(F32, MemFlags::new(), val)); in translate_operator()
1170 .push1(builder.ins().bitcast(F64, MemFlags::new(), val)); in translate_operator()
1176 .push1(builder.ins().bitcast(I32, MemFlags::new(), val)); in translate_operator()
1182 .push1(builder.ins().bitcast(I64, MemFlags::new(), val)); in translate_operator()
1186 environ.stacks.push1(builder.ins().ireduce(I8, val)); in translate_operator()
1188 environ.stacks.push1(builder.ins().sextend(I32, val)); in translate_operator()
1192 environ.stacks.push1(builder.ins().ireduce(I16, val)); in translate_operator()
1194 environ.stacks.push1(builder.ins().sextend(I32, val)); in translate_operator()
1198 environ.stacks.push1(builder.ins().ireduce(I8, val)); in translate_operator()
1200 environ.stacks.push1(builder.ins().sextend(I64, val)); in translate_operator()
1204 environ.stacks.push1(builder.ins().ireduce(I16, val)); in translate_operator()
1206 environ.stacks.push1(builder.ins().sextend(I64, val)); in translate_operator()
1210 environ.stacks.push1(builder.ins().ireduce(I32, val)); in translate_operator()
1212 environ.stacks.push1(builder.ins().sextend(I64, val)); in translate_operator()
1217 environ.stacks.push1(builder.ins().iadd(arg1, arg2)); in translate_operator()
1221 environ.stacks.push1(builder.ins().band(arg1, arg2)); in translate_operator()
1225 environ.stacks.push1(builder.ins().bor(arg1, arg2)); in translate_operator()
1229 environ.stacks.push1(builder.ins().bxor(arg1, arg2)); in translate_operator()
1233 environ.stacks.push1(builder.ins().ishl(arg1, arg2)); in translate_operator()
1237 environ.stacks.push1(builder.ins().sshr(arg1, arg2)); in translate_operator()
1241 environ.stacks.push1(builder.ins().ushr(arg1, arg2)); in translate_operator()
1245 environ.stacks.push1(builder.ins().rotl(arg1, arg2)); in translate_operator()
1249 environ.stacks.push1(builder.ins().rotr(arg1, arg2)); in translate_operator()
1253 environ.stacks.push1(builder.ins().fadd(arg1, arg2)); in translate_operator()
1257 environ.stacks.push1(builder.ins().isub(arg1, arg2)); in translate_operator()
1261 environ.stacks.push1(builder.ins().fsub(arg1, arg2)); in translate_operator()
1265 environ.stacks.push1(builder.ins().imul(arg1, arg2)); in translate_operator()
1269 environ.stacks.push1(builder.ins().fmul(arg1, arg2)); in translate_operator()
1273 environ.stacks.push1(builder.ins().fdiv(arg1, arg2)); in translate_operator()
1277 let result = environ.translate_sdiv(builder, arg1, arg2); in translate_operator()
1282 let result = environ.translate_udiv(builder, arg1, arg2); in translate_operator()
1287 let result = environ.translate_srem(builder, arg1, arg2); in translate_operator()
1292 let result = environ.translate_urem(builder, arg1, arg2); in translate_operator()
1297 environ.stacks.push1(builder.ins().fmin(arg1, arg2)); in translate_operator()
1301 environ.stacks.push1(builder.ins().fmax(arg1, arg2)); in translate_operator()
1305 environ.stacks.push1(builder.ins().fcopysign(arg1, arg2)); in translate_operator()
1309 translate_icmp(IntCC::SignedLessThan, builder, environ) in translate_operator()
1312 translate_icmp(IntCC::UnsignedLessThan, builder, environ) in translate_operator()
1315 translate_icmp(IntCC::SignedLessThanOrEqual, builder, environ) in translate_operator()
1318 translate_icmp(IntCC::UnsignedLessThanOrEqual, builder, environ) in translate_operator()
1321 translate_icmp(IntCC::SignedGreaterThan, builder, environ) in translate_operator()
1324 translate_icmp(IntCC::UnsignedGreaterThan, builder, environ) in translate_operator()
1327 translate_icmp(IntCC::SignedGreaterThanOrEqual, builder, environ) in translate_operator()
1330 translate_icmp(IntCC::UnsignedGreaterThanOrEqual, builder, environ) in translate_operator()
1334 let val = builder.ins().icmp_imm(IntCC::Equal, arg, 0); in translate_operator()
1335 environ.stacks.push1(builder.ins().uextend(I32, val)); in translate_operator()
1337 Operator::I32Eq | Operator::I64Eq => translate_icmp(IntCC::Equal, builder, environ), in translate_operator()
1338 Operator::F32Eq | Operator::F64Eq => translate_fcmp(FloatCC::Equal, builder, environ), in translate_operator()
1339 Operator::I32Ne | Operator::I64Ne => translate_icmp(IntCC::NotEqual, builder, environ), in translate_operator()
1340 Operator::F32Ne | Operator::F64Ne => translate_fcmp(FloatCC::NotEqual, builder, environ), in translate_operator()
1341 Operator::F32Gt | Operator::F64Gt => translate_fcmp(FloatCC::GreaterThan, builder, environ), in translate_operator()
1343 translate_fcmp(FloatCC::GreaterThanOrEqual, builder, environ) in translate_operator()
1345 Operator::F32Lt | Operator::F64Lt => translate_fcmp(FloatCC::LessThan, builder, environ), in translate_operator()
1347 translate_fcmp(FloatCC::LessThanOrEqual, builder, environ) in translate_operator()
1351 let result = environ.translate_ref_null(builder.cursor(), hty)?; in translate_operator()
1359 let result = environ.translate_ref_is_null(builder.cursor(), value, *ty)?; in translate_operator()
1364 let result = environ.translate_ref_func(builder.cursor(), index)?; in translate_operator()
1377 let heap = environ.get_or_create_heap(builder.func, memory_index); in translate_operator()
1380 assert!(builder.func.dfg.value_type(expected) == implied_ty); in translate_operator()
1386 let offset = builder.ins().iconst(index_type, memarg.offset as i64); in translate_operator()
1387 environ.uadd_overflow_trap(builder, addr, offset, ir::TrapCode::HEAP_OUT_OF_BOUNDS) in translate_operator()
1392 builder, in translate_operator()
1403 let heap = environ.get_or_create_heap(builder.func, memory_index); in translate_operator()
1410 let offset = builder.ins().iconst(index_type, memarg.offset as i64); in translate_operator()
1411 environ.uadd_overflow_trap(builder, addr, offset, ir::TrapCode::HEAP_OUT_OF_BOUNDS) in translate_operator()
1414 builder, in translate_operator()
1423 translate_atomic_load(I32, I32, memarg, builder, environ)? in translate_operator()
1426 translate_atomic_load(I64, I64, memarg, builder, environ)? in translate_operator()
1429 translate_atomic_load(I32, I8, memarg, builder, environ)? in translate_operator()
1432 translate_atomic_load(I32, I16, memarg, builder, environ)? in translate_operator()
1435 translate_atomic_load(I64, I8, memarg, builder, environ)? in translate_operator()
1438 translate_atomic_load(I64, I16, memarg, builder, environ)? in translate_operator()
1441 translate_atomic_load(I64, I32, memarg, builder, environ)? in translate_operator()
1445 translate_atomic_store(I32, memarg, builder, environ)? in translate_operator()
1448 translate_atomic_store(I64, memarg, builder, environ)? in translate_operator()
1451 translate_atomic_store(I8, memarg, builder, environ)? in translate_operator()
1454 translate_atomic_store(I16, memarg, builder, environ)? in translate_operator()
1457 translate_atomic_store(I8, memarg, builder, environ)? in translate_operator()
1460 translate_atomic_store(I16, memarg, builder, environ)? in translate_operator()
1463 translate_atomic_store(I32, memarg, builder, environ)? in translate_operator()
1467 translate_atomic_rmw(I32, I32, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1470 translate_atomic_rmw(I64, I64, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1473 translate_atomic_rmw(I32, I8, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1476 translate_atomic_rmw(I32, I16, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1479 translate_atomic_rmw(I64, I8, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1482 translate_atomic_rmw(I64, I16, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1485 translate_atomic_rmw(I64, I32, AtomicRmwOp::Add, memarg, builder, environ)? in translate_operator()
1489 translate_atomic_rmw(I32, I32, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1492 translate_atomic_rmw(I64, I64, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1495 translate_atomic_rmw(I32, I8, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1498 translate_atomic_rmw(I32, I16, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1501 translate_atomic_rmw(I64, I8, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1504 translate_atomic_rmw(I64, I16, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1507 translate_atomic_rmw(I64, I32, AtomicRmwOp::Sub, memarg, builder, environ)? in translate_operator()
1511 translate_atomic_rmw(I32, I32, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1514 translate_atomic_rmw(I64, I64, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1517 translate_atomic_rmw(I32, I8, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1520 translate_atomic_rmw(I32, I16, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1523 translate_atomic_rmw(I64, I8, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1526 translate_atomic_rmw(I64, I16, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1529 translate_atomic_rmw(I64, I32, AtomicRmwOp::And, memarg, builder, environ)? in translate_operator()
1533 translate_atomic_rmw(I32, I32, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1536 translate_atomic_rmw(I64, I64, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1539 translate_atomic_rmw(I32, I8, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1542 translate_atomic_rmw(I32, I16, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1545 translate_atomic_rmw(I64, I8, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1548 translate_atomic_rmw(I64, I16, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1551 translate_atomic_rmw(I64, I32, AtomicRmwOp::Or, memarg, builder, environ)? in translate_operator()
1555 translate_atomic_rmw(I32, I32, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1558 translate_atomic_rmw(I64, I64, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1561 translate_atomic_rmw(I32, I8, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1564 translate_atomic_rmw(I32, I16, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1567 translate_atomic_rmw(I64, I8, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1570 translate_atomic_rmw(I64, I16, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1573 translate_atomic_rmw(I64, I32, AtomicRmwOp::Xor, memarg, builder, environ)? in translate_operator()
1577 translate_atomic_rmw(I32, I32, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1580 translate_atomic_rmw(I64, I64, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1583 translate_atomic_rmw(I32, I8, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1586 translate_atomic_rmw(I32, I16, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1589 translate_atomic_rmw(I64, I8, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1592 translate_atomic_rmw(I64, I16, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1595 translate_atomic_rmw(I64, I32, AtomicRmwOp::Xchg, memarg, builder, environ)? in translate_operator()
1599 translate_atomic_cas(I32, I32, memarg, builder, environ)? in translate_operator()
1602 translate_atomic_cas(I64, I64, memarg, builder, environ)? in translate_operator()
1605 translate_atomic_cas(I32, I8, memarg, builder, environ)? in translate_operator()
1608 translate_atomic_cas(I32, I16, memarg, builder, environ)? in translate_operator()
1611 translate_atomic_cas(I64, I8, memarg, builder, environ)? in translate_operator()
1614 translate_atomic_cas(I64, I16, memarg, builder, environ)? in translate_operator()
1617 translate_atomic_cas(I64, I32, memarg, builder, environ)? in translate_operator()
1621 builder.ins().fence(); in translate_operator()
1625 let _src_heap = environ.get_or_create_heap(builder.func, src_index); in translate_operator()
1628 let _dst_heap = environ.get_or_create_heap(builder.func, dst_index); in translate_operator()
1633 environ.translate_memory_copy(builder, src_index, dst_index, dst_pos, src_pos, len)?; in translate_operator()
1637 let _heap = environ.get_or_create_heap(builder.func, mem); in translate_operator()
1641 environ.translate_memory_fill(builder, mem, dest, val, len)?; in translate_operator()
1645 let _heap = environ.get_or_create_heap(builder.func, mem); in translate_operator()
1649 environ.translate_memory_init(builder, mem, *data_index, dest, src, len)?; in translate_operator()
1652 environ.translate_data_drop(builder.cursor(), *data_index)?; in translate_operator()
1656 environ.translate_table_size(builder.cursor(), TableIndex::from_u32(*index))?; in translate_operator()
1663 let result = environ.translate_table_grow(builder, table_index, delta, init_value)?; in translate_operator()
1669 let result = environ.translate_table_get(builder, table_index, index)?; in translate_operator()
1676 environ.translate_table_set(builder, table_index, value, index)?; in translate_operator()
1686 builder, in translate_operator()
1699 environ.translate_table_fill(builder, table_index, dest, val, len)?; in translate_operator()
1709 builder, in translate_operator()
1718 environ.translate_elem_drop(builder.cursor(), *elem_index)?; in translate_operator()
1722 let handle = builder.func.dfg.constants.insert(data); in translate_operator()
1723 let value = builder.ins().vconst(I8X16, handle); in translate_operator()
1729 let reduced = builder in translate_operator()
1732 let splatted = builder.ins().splat(type_of(op), reduced); in translate_operator()
1739 let splatted = builder.ins().splat(type_of(op), environ.stacks.pop1()); in translate_operator()
1752 builder, in translate_operator()
1756 let splatted = builder.ins().splat(type_of(op), environ.stacks.pop1()); in translate_operator()
1766 builder, in translate_operator()
1770 let as_vector = builder in translate_operator()
1779 let vector = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1786 builder, in translate_operator()
1793 .push1(builder.ins().insertlane(vector, replacement, *lane)) in translate_operator()
1799 let vector = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1802 .push1(builder.ins().extractlane(vector, *lane)); in translate_operator()
1803 translate_store(memarg, ir::Opcode::Store, builder, environ)?; in translate_operator()
1806 let vector = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1807 let extracted = builder.ins().extractlane(vector, *lane); in translate_operator()
1808 environ.stacks.push1(builder.ins().sextend(I32, extracted)) in translate_operator()
1811 let vector = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1812 let extracted = builder.ins().extractlane(vector, *lane); in translate_operator()
1813 environ.stacks.push1(builder.ins().uextend(I32, extracted)); in translate_operator()
1822 let vector = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1825 .push1(builder.ins().extractlane(vector, *lane)) in translate_operator()
1830 let reduced = builder.ins().ireduce(ty.lane_type(), replacement); in translate_operator()
1831 let vector = optionally_bitcast_vector(vector, ty, builder); in translate_operator()
1834 .push1(builder.ins().insertlane(vector, reduced, *lane)) in translate_operator()
1841 let vector = optionally_bitcast_vector(vector, type_of(op), builder); in translate_operator()
1844 .push1(builder.ins().insertlane(vector, replacement, *lane)) in translate_operator()
1847 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
1848 let result = environ.i8x16_shuffle(builder, a, b, lanes); in translate_operator()
1856 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
1857 let result = environ.swizzle(builder, a, b); in translate_operator()
1861 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1862 environ.stacks.push1(builder.ins().iadd(a, b)) in translate_operator()
1865 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1866 environ.stacks.push1(builder.ins().sadd_sat(a, b)) in translate_operator()
1869 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1870 environ.stacks.push1(builder.ins().uadd_sat(a, b)) in translate_operator()
1873 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1874 environ.stacks.push1(builder.ins().isub(a, b)) in translate_operator()
1877 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1878 environ.stacks.push1(builder.ins().ssub_sat(a, b)) in translate_operator()
1881 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1882 environ.stacks.push1(builder.ins().usub_sat(a, b)) in translate_operator()
1885 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1886 environ.stacks.push1(builder.ins().smin(a, b)) in translate_operator()
1889 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1890 environ.stacks.push1(builder.ins().umin(a, b)) in translate_operator()
1893 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1894 environ.stacks.push1(builder.ins().smax(a, b)) in translate_operator()
1897 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1898 environ.stacks.push1(builder.ins().umax(a, b)) in translate_operator()
1901 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1902 environ.stacks.push1(builder.ins().avg_round(a, b)) in translate_operator()
1905 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1906 environ.stacks.push1(builder.ins().ineg(a)) in translate_operator()
1909 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1910 environ.stacks.push1(builder.ins().iabs(a)) in translate_operator()
1913 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1914 environ.stacks.push1(builder.ins().imul(a, b)) in translate_operator()
1917 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1918 environ.stacks.push1(builder.ins().bor(a, b)) in translate_operator()
1921 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1922 environ.stacks.push1(builder.ins().bxor(a, b)) in translate_operator()
1925 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1926 environ.stacks.push1(builder.ins().band(a, b)) in translate_operator()
1929 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
1930 environ.stacks.push1(builder.ins().band_not(a, b)) in translate_operator()
1934 environ.stacks.push1(builder.ins().bnot(a)); in translate_operator()
1938 let bitcast_a = optionally_bitcast_vector(a, type_of(op), builder); in translate_operator()
1941 environ.stacks.push1(builder.ins().ishl(bitcast_a, b)) in translate_operator()
1945 let bitcast_a = optionally_bitcast_vector(a, type_of(op), builder); in translate_operator()
1948 environ.stacks.push1(builder.ins().ushr(bitcast_a, b)) in translate_operator()
1952 let bitcast_a = optionally_bitcast_vector(a, type_of(op), builder); in translate_operator()
1955 environ.stacks.push1(builder.ins().sshr(bitcast_a, b)) in translate_operator()
1958 let (a, b, c) = pop3_with_bitcast(environ, I8X16, builder); in translate_operator()
1961 environ.stacks.push1(builder.ins().bitselect(c, a, b)) in translate_operator()
1964 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1965 let bool_result = builder.ins().vany_true(a); in translate_operator()
1968 .push1(builder.ins().uextend(I32, bool_result)) in translate_operator()
1974 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1975 let bool_result = builder.ins().vall_true(a); in translate_operator()
1978 .push1(builder.ins().uextend(I32, bool_result)) in translate_operator()
1984 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
1985 environ.stacks.push1(builder.ins().vhigh_bits(I32, a)); in translate_operator()
1988 translate_vector_icmp(IntCC::Equal, type_of(op), builder, environ) in translate_operator()
1991 translate_vector_icmp(IntCC::NotEqual, type_of(op), builder, environ) in translate_operator()
1994 translate_vector_icmp(IntCC::SignedGreaterThan, type_of(op), builder, environ) in translate_operator()
1997 translate_vector_icmp(IntCC::SignedLessThan, type_of(op), builder, environ) in translate_operator()
2000 translate_vector_icmp(IntCC::UnsignedGreaterThan, type_of(op), builder, environ) in translate_operator()
2003 translate_vector_icmp(IntCC::UnsignedLessThan, type_of(op), builder, environ) in translate_operator()
2009 builder, in translate_operator()
2014 translate_vector_icmp(IntCC::SignedLessThanOrEqual, type_of(op), builder, environ) in translate_operator()
2019 builder, in translate_operator()
2025 builder, in translate_operator()
2029 translate_vector_fcmp(FloatCC::Equal, type_of(op), builder, environ) in translate_operator()
2032 translate_vector_fcmp(FloatCC::NotEqual, type_of(op), builder, environ) in translate_operator()
2035 translate_vector_fcmp(FloatCC::LessThan, type_of(op), builder, environ) in translate_operator()
2038 translate_vector_fcmp(FloatCC::GreaterThan, type_of(op), builder, environ) in translate_operator()
2041 translate_vector_fcmp(FloatCC::LessThanOrEqual, type_of(op), builder, environ) in translate_operator()
2044 translate_vector_fcmp(FloatCC::GreaterThanOrEqual, type_of(op), builder, environ) in translate_operator()
2047 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
2048 environ.stacks.push1(builder.ins().fadd(a, b)) in translate_operator()
2051 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
2052 environ.stacks.push1(builder.ins().fsub(a, b)) in translate_operator()
2055 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
2056 environ.stacks.push1(builder.ins().fmul(a, b)) in translate_operator()
2059 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
2060 environ.stacks.push1(builder.ins().fdiv(a, b)) in translate_operator()
2063 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
2064 environ.stacks.push1(builder.ins().fmax(a, b)) in translate_operator()
2067 let (a, b) = pop2_with_bitcast(environ, type_of(op), builder); in translate_operator()
2068 environ.stacks.push1(builder.ins().fmin(a, b)) in translate_operator()
2078 let (a, b) = pop2_with_bitcast(environ, ty, builder); in translate_operator()
2079 let cmp = builder.ins().fcmp(FloatCC::LessThan, a, b); in translate_operator()
2080 let cmp = optionally_bitcast_vector(cmp, ty, builder); in translate_operator()
2081 environ.stacks.push1(builder.ins().bitselect(cmp, b, a)) in translate_operator()
2090 let (a, b) = pop2_with_bitcast(environ, ty, builder); in translate_operator()
2091 let cmp = builder.ins().fcmp(FloatCC::LessThan, b, a); in translate_operator()
2092 let cmp = optionally_bitcast_vector(cmp, ty, builder); in translate_operator()
2093 environ.stacks.push1(builder.ins().bitselect(cmp, b, a)) in translate_operator()
2096 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
2097 environ.stacks.push1(builder.ins().sqrt(a)) in translate_operator()
2100 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
2101 environ.stacks.push1(builder.ins().fneg(a)) in translate_operator()
2104 let a = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
2105 environ.stacks.push1(builder.ins().fabs(a)) in translate_operator()
2108 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2109 environ.stacks.push1(builder.ins().fcvt_from_sint(F32X4, a)) in translate_operator()
2112 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2113 environ.stacks.push1(builder.ins().fcvt_from_uint(F32X4, a)) in translate_operator()
2116 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2117 let widened_a = builder.ins().swiden_low(a); in translate_operator()
2120 .push1(builder.ins().fcvt_from_sint(F64X2, widened_a)); in translate_operator()
2123 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2124 let widened_a = builder.ins().uwiden_low(a); in translate_operator()
2127 .push1(builder.ins().fcvt_from_uint(F64X2, widened_a)); in translate_operator()
2130 let a = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2131 environ.stacks.push1(builder.ins().fvpromote_low(a)); in translate_operator()
2134 let a = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2135 environ.stacks.push1(builder.ins().fvdemote(a)); in translate_operator()
2138 let a = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2141 .push1(builder.ins().fcvt_to_sint_sat(I32X4, a)) in translate_operator()
2144 let a = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2145 let converted_a = builder.ins().fcvt_to_sint_sat(I64X2, a); in translate_operator()
2146 let handle = builder.func.dfg.constants.insert(vec![0u8; 16].into()); in translate_operator()
2147 let zero = builder.ins().vconst(I64X2, handle); in translate_operator()
2151 .push1(builder.ins().snarrow(converted_a, zero)); in translate_operator()
2166 let a = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2169 .push1(builder.ins().fcvt_to_uint_sat(I32X4, a)) in translate_operator()
2172 let a = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2173 let zero_constant = builder.func.dfg.constants.insert(vec![0u8; 16].into()); in translate_operator()
2180 let lane0 = builder.ins().extractlane(a, 0); in translate_operator()
2181 let lane1 = builder.ins().extractlane(a, 1); in translate_operator()
2182 let lane0_rounded = builder.ins().fcvt_to_uint_sat(I32, lane0); in translate_operator()
2183 let lane1_rounded = builder.ins().fcvt_to_uint_sat(I32, lane1); in translate_operator()
2184 let result = builder.ins().vconst(I32X4, zero_constant); in translate_operator()
2185 let result = builder.ins().insertlane(result, lane0_rounded, 0); in translate_operator()
2186 builder.ins().insertlane(result, lane1_rounded, 1) in translate_operator()
2188 let converted_a = builder.ins().fcvt_to_uint_sat(I64X2, a); in translate_operator()
2189 let zero = builder.ins().vconst(I64X2, zero_constant); in translate_operator()
2190 builder.ins().uunarrow(converted_a, zero) in translate_operator()
2196 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2197 environ.stacks.push1(builder.ins().snarrow(a, b)) in translate_operator()
2200 let (a, b) = pop2_with_bitcast(environ, I32X4, builder); in translate_operator()
2201 environ.stacks.push1(builder.ins().snarrow(a, b)) in translate_operator()
2204 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2205 environ.stacks.push1(builder.ins().unarrow(a, b)) in translate_operator()
2208 let (a, b) = pop2_with_bitcast(environ, I32X4, builder); in translate_operator()
2209 environ.stacks.push1(builder.ins().unarrow(a, b)) in translate_operator()
2212 let a = pop1_with_bitcast(environ, I8X16, builder); in translate_operator()
2213 environ.stacks.push1(builder.ins().swiden_low(a)) in translate_operator()
2216 let a = pop1_with_bitcast(environ, I8X16, builder); in translate_operator()
2217 environ.stacks.push1(builder.ins().swiden_high(a)) in translate_operator()
2220 let a = pop1_with_bitcast(environ, I8X16, builder); in translate_operator()
2221 environ.stacks.push1(builder.ins().uwiden_low(a)) in translate_operator()
2224 let a = pop1_with_bitcast(environ, I8X16, builder); in translate_operator()
2225 environ.stacks.push1(builder.ins().uwiden_high(a)) in translate_operator()
2228 let a = pop1_with_bitcast(environ, I16X8, builder); in translate_operator()
2229 environ.stacks.push1(builder.ins().swiden_low(a)) in translate_operator()
2232 let a = pop1_with_bitcast(environ, I16X8, builder); in translate_operator()
2233 environ.stacks.push1(builder.ins().swiden_high(a)) in translate_operator()
2236 let a = pop1_with_bitcast(environ, I16X8, builder); in translate_operator()
2237 environ.stacks.push1(builder.ins().uwiden_low(a)) in translate_operator()
2240 let a = pop1_with_bitcast(environ, I16X8, builder); in translate_operator()
2241 environ.stacks.push1(builder.ins().uwiden_high(a)) in translate_operator()
2244 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2245 environ.stacks.push1(builder.ins().swiden_low(a)) in translate_operator()
2248 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2249 environ.stacks.push1(builder.ins().swiden_high(a)) in translate_operator()
2252 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2253 environ.stacks.push1(builder.ins().uwiden_low(a)) in translate_operator()
2256 let a = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2257 environ.stacks.push1(builder.ins().uwiden_high(a)) in translate_operator()
2260 let a = pop1_with_bitcast(environ, I8X16, builder); in translate_operator()
2261 let widen_low = builder.ins().swiden_low(a); in translate_operator()
2262 let widen_high = builder.ins().swiden_high(a); in translate_operator()
2265 .push1(builder.ins().iadd_pairwise(widen_low, widen_high)); in translate_operator()
2268 let a = pop1_with_bitcast(environ, I16X8, builder); in translate_operator()
2269 let widen_low = builder.ins().swiden_low(a); in translate_operator()
2270 let widen_high = builder.ins().swiden_high(a); in translate_operator()
2273 .push1(builder.ins().iadd_pairwise(widen_low, widen_high)); in translate_operator()
2276 let a = pop1_with_bitcast(environ, I8X16, builder); in translate_operator()
2277 let widen_low = builder.ins().uwiden_low(a); in translate_operator()
2278 let widen_high = builder.ins().uwiden_high(a); in translate_operator()
2281 .push1(builder.ins().iadd_pairwise(widen_low, widen_high)); in translate_operator()
2284 let a = pop1_with_bitcast(environ, I16X8, builder); in translate_operator()
2285 let widen_low = builder.ins().uwiden_low(a); in translate_operator()
2286 let widen_high = builder.ins().uwiden_high(a); in translate_operator()
2289 .push1(builder.ins().iadd_pairwise(widen_low, widen_high)); in translate_operator()
2292 let arg = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2293 let result = environ.ceil_f32x4(builder, arg); in translate_operator()
2297 let arg = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2298 let result = environ.ceil_f64x2(builder, arg); in translate_operator()
2302 let arg = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2303 let result = environ.floor_f32x4(builder, arg); in translate_operator()
2307 let arg = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2308 let result = environ.floor_f64x2(builder, arg); in translate_operator()
2312 let arg = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2313 let result = environ.trunc_f32x4(builder, arg); in translate_operator()
2317 let arg = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2318 let result = environ.trunc_f64x2(builder, arg); in translate_operator()
2322 let arg = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2323 let result = environ.nearest_f32x4(builder, arg); in translate_operator()
2327 let arg = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2328 let result = environ.nearest_f64x2(builder, arg); in translate_operator()
2332 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2333 let alow = builder.ins().swiden_low(a); in translate_operator()
2334 let blow = builder.ins().swiden_low(b); in translate_operator()
2335 let low = builder.ins().imul(alow, blow); in translate_operator()
2336 let ahigh = builder.ins().swiden_high(a); in translate_operator()
2337 let bhigh = builder.ins().swiden_high(b); in translate_operator()
2338 let high = builder.ins().imul(ahigh, bhigh); in translate_operator()
2339 environ.stacks.push1(builder.ins().iadd_pairwise(low, high)); in translate_operator()
2342 let arg = pop1_with_bitcast(environ, type_of(op), builder); in translate_operator()
2343 environ.stacks.push1(builder.ins().popcnt(arg)); in translate_operator()
2346 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2347 environ.stacks.push1(builder.ins().sqmul_round_sat(a, b)) in translate_operator()
2350 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2351 let a_low = builder.ins().swiden_low(a); in translate_operator()
2352 let b_low = builder.ins().swiden_low(b); in translate_operator()
2353 environ.stacks.push1(builder.ins().imul(a_low, b_low)); in translate_operator()
2356 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2357 let a_high = builder.ins().swiden_high(a); in translate_operator()
2358 let b_high = builder.ins().swiden_high(b); in translate_operator()
2359 environ.stacks.push1(builder.ins().imul(a_high, b_high)); in translate_operator()
2362 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2363 let a_low = builder.ins().uwiden_low(a); in translate_operator()
2364 let b_low = builder.ins().uwiden_low(b); in translate_operator()
2365 environ.stacks.push1(builder.ins().imul(a_low, b_low)); in translate_operator()
2368 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2369 let a_high = builder.ins().uwiden_high(a); in translate_operator()
2370 let b_high = builder.ins().uwiden_high(b); in translate_operator()
2371 environ.stacks.push1(builder.ins().imul(a_high, b_high)); in translate_operator()
2374 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2375 let a_low = builder.ins().swiden_low(a); in translate_operator()
2376 let b_low = builder.ins().swiden_low(b); in translate_operator()
2377 environ.stacks.push1(builder.ins().imul(a_low, b_low)); in translate_operator()
2380 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2381 let a_high = builder.ins().swiden_high(a); in translate_operator()
2382 let b_high = builder.ins().swiden_high(b); in translate_operator()
2383 environ.stacks.push1(builder.ins().imul(a_high, b_high)); in translate_operator()
2386 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2387 let a_low = builder.ins().uwiden_low(a); in translate_operator()
2388 let b_low = builder.ins().uwiden_low(b); in translate_operator()
2389 environ.stacks.push1(builder.ins().imul(a_low, b_low)); in translate_operator()
2392 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2393 let a_high = builder.ins().uwiden_high(a); in translate_operator()
2394 let b_high = builder.ins().uwiden_high(b); in translate_operator()
2395 environ.stacks.push1(builder.ins().imul(a_high, b_high)); in translate_operator()
2398 let (a, b) = pop2_with_bitcast(environ, I32X4, builder); in translate_operator()
2399 let a_low = builder.ins().swiden_low(a); in translate_operator()
2400 let b_low = builder.ins().swiden_low(b); in translate_operator()
2401 environ.stacks.push1(builder.ins().imul(a_low, b_low)); in translate_operator()
2404 let (a, b) = pop2_with_bitcast(environ, I32X4, builder); in translate_operator()
2405 let a_high = builder.ins().swiden_high(a); in translate_operator()
2406 let b_high = builder.ins().swiden_high(b); in translate_operator()
2407 environ.stacks.push1(builder.ins().imul(a_high, b_high)); in translate_operator()
2410 let (a, b) = pop2_with_bitcast(environ, I32X4, builder); in translate_operator()
2411 let a_low = builder.ins().uwiden_low(a); in translate_operator()
2412 let b_low = builder.ins().uwiden_low(b); in translate_operator()
2413 environ.stacks.push1(builder.ins().imul(a_low, b_low)); in translate_operator()
2416 let (a, b) = pop2_with_bitcast(environ, I32X4, builder); in translate_operator()
2417 let a_high = builder.ins().uwiden_high(a); in translate_operator()
2418 let b_high = builder.ins().uwiden_high(b); in translate_operator()
2419 environ.stacks.push1(builder.ins().imul(a_high, b_high)); in translate_operator()
2430 let (a, b) = pop2_with_bitcast(environ, ty, builder); in translate_operator()
2435 builder.ins().fmax(a, b) in translate_operator()
2440 let cmp = builder.ins().fcmp(FloatCC::LessThan, a, b); in translate_operator()
2441 let cmp = optionally_bitcast_vector(cmp, ty, builder); in translate_operator()
2442 builder.ins().bitselect(cmp, b, a) in translate_operator()
2449 let (a, b) = pop2_with_bitcast(environ, ty, builder); in translate_operator()
2454 builder.ins().fmin(a, b) in translate_operator()
2459 let cmp = builder.ins().fcmp(FloatCC::LessThan, b, a); in translate_operator()
2460 let cmp = optionally_bitcast_vector(cmp, ty, builder); in translate_operator()
2461 builder.ins().bitselect(cmp, b, a) in translate_operator()
2467 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2468 let result = environ.relaxed_swizzle(builder, a, b); in translate_operator()
2473 let (a, b, c) = pop3_with_bitcast(environ, type_of(op), builder); in translate_operator()
2474 let result = environ.fma_f32x4(builder, a, b, c); in translate_operator()
2478 let (a, b, c) = pop3_with_bitcast(environ, type_of(op), builder); in translate_operator()
2479 let result = environ.fma_f64x2(builder, a, b, c); in translate_operator()
2483 let (a, b, c) = pop3_with_bitcast(environ, type_of(op), builder); in translate_operator()
2484 let a = builder.ins().fneg(a); in translate_operator()
2485 let result = environ.fma_f32x4(builder, a, b, c); in translate_operator()
2489 let (a, b, c) = pop3_with_bitcast(environ, type_of(op), builder); in translate_operator()
2490 let a = builder.ins().fneg(a); in translate_operator()
2491 let result = environ.fma_f64x2(builder, a, b, c); in translate_operator()
2500 let (a, b, c) = pop3_with_bitcast(environ, ty, builder); in translate_operator()
2510 builder.ins().bitselect(c, a, b) in translate_operator()
2512 builder.ins().blendv(c, a, b) in translate_operator()
2518 let a = pop1_with_bitcast(environ, F32X4, builder); in translate_operator()
2523 builder.ins().fcvt_to_sint_sat(I32X4, a) in translate_operator()
2525 builder.ins().x86_cvtt2dq(I32X4, a) in translate_operator()
2530 let a = pop1_with_bitcast(environ, F64X2, builder); in translate_operator()
2534 builder.ins().fcvt_to_sint_sat(I64X2, a) in translate_operator()
2536 builder.ins().x86_cvtt2dq(I64X2, a) in translate_operator()
2538 let handle = builder.func.dfg.constants.insert(vec![0u8; 16].into()); in translate_operator()
2539 let zero = builder.ins().vconst(I64X2, handle); in translate_operator()
2543 .push1(builder.ins().snarrow(converted_a, zero)); in translate_operator()
2546 let (a, b) = pop2_with_bitcast(environ, I16X8, builder); in translate_operator()
2553 builder.ins().sqmul_round_sat(a, b) in translate_operator()
2555 builder.ins().x86_pmulhrsw(a, b) in translate_operator()
2560 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2565 let alo = builder.ins().swiden_low(a); in translate_operator()
2566 let blo = builder.ins().swiden_low(b); in translate_operator()
2567 let lo = builder.ins().imul(alo, blo); in translate_operator()
2568 let ahi = builder.ins().swiden_high(a); in translate_operator()
2569 let bhi = builder.ins().swiden_high(b); in translate_operator()
2570 let hi = builder.ins().imul(ahi, bhi); in translate_operator()
2571 builder.ins().iadd_pairwise(lo, hi) in translate_operator()
2573 builder.ins().x86_pmaddubsw(a, b) in translate_operator()
2579 let c = pop1_with_bitcast(environ, I32X4, builder); in translate_operator()
2580 let (a, b) = pop2_with_bitcast(environ, I8X16, builder); in translate_operator()
2585 let alo = builder.ins().swiden_low(a); in translate_operator()
2586 let blo = builder.ins().swiden_low(b); in translate_operator()
2587 let lo = builder.ins().imul(alo, blo); in translate_operator()
2588 let ahi = builder.ins().swiden_high(a); in translate_operator()
2589 let bhi = builder.ins().swiden_high(b); in translate_operator()
2590 let hi = builder.ins().imul(ahi, bhi); in translate_operator()
2591 builder.ins().iadd_pairwise(lo, hi) in translate_operator()
2593 builder.ins().x86_pmaddubsw(a, b) in translate_operator()
2595 let dotlo = builder.ins().swiden_low(dot); in translate_operator()
2596 let dothi = builder.ins().swiden_high(dot); in translate_operator()
2597 let dot32 = builder.ins().iadd_pairwise(dotlo, dothi); in translate_operator()
2598 environ.stacks.push1(builder.ins().iadd(dot32, c)); in translate_operator()
2606 let is_null = environ.translate_ref_is_null(builder.cursor(), r, r_ty)?; in translate_operator()
2608 let else_block = builder.create_block(); in translate_operator()
2609 canonicalise_brif(builder, is_null, br_destination, inputs, else_block, &[]); in translate_operator()
2611 builder.seal_block(else_block); // The only predecessor is the current block. in translate_operator()
2612 builder.switch_to_block(else_block); in translate_operator()
2629 let is_null = environ.translate_ref_is_null(builder.cursor(), r, r_ty)?; in translate_operator()
2630 let else_block = builder.create_block(); in translate_operator()
2631 canonicalise_brif(builder, is_null, else_block, &[], br_destination, &inputs); in translate_operator()
2636 builder.seal_block(else_block); // The only predecessor is the current block. in translate_operator()
2640 builder.switch_to_block(else_block); in translate_operator()
2647 let sigref = environ.get_or_create_sig_ref(builder.func, type_index); in translate_operator()
2653 bitcast_wasm_params(environ, sigref, &mut args, builder); in translate_operator()
2656 environ.translate_call_ref(builder, environ.next_srcloc, sigref, callee, &args)?; in translate_operator()
2660 builder.func.dfg.signatures[sigref].returns.len(), in translate_operator()
2671 let is_null = environ.translate_ref_is_null(builder.cursor(), r, *r_ty)?; in translate_operator()
2672 environ.trapnz(builder, is_null, crate::TRAP_NULL_REFERENCE); in translate_operator()
2678 let i31ref = environ.translate_ref_i31(builder.cursor(), val)?; in translate_operator()
2683 let val = environ.translate_i31_get_s(builder, i31ref)?; in translate_operator()
2688 let val = environ.translate_i31_get_u(builder, i31ref)?; in translate_operator()
2697 let struct_ref = environ.translate_struct_new(builder, struct_type_index, fields)?; in translate_operator()
2703 let struct_ref = environ.translate_struct_new_default(builder, struct_type_index)?; in translate_operator()
2715 builder, in translate_operator()
2730 builder, in translate_operator()
2746 builder, in translate_operator()
2762 builder, in translate_operator()
2774 let array_ref = environ.translate_array_new(builder, array_type_index, elem, len)?; in translate_operator()
2780 let array_ref = environ.translate_array_new_default(builder, array_type_index, len)?; in translate_operator()
2790 let array_ref = environ.translate_array_new_fixed(builder, array_type_index, &elems)?; in translate_operator()
2802 builder, in translate_operator()
2818 builder, in translate_operator()
2834 builder, in translate_operator()
2847 environ.translate_array_fill(builder, array_type_index, array, index, val, len)?; in translate_operator()
2857 builder, in translate_operator()
2874 builder, in translate_operator()
2885 let len = environ.translate_array_len(builder, array)?; in translate_operator()
2892 environ.translate_array_get(builder, array_type_index, array, index, None)?; in translate_operator()
2899 builder, in translate_operator()
2911 builder, in translate_operator()
2922 environ.translate_array_set(builder, array_type_index, array, index, elem)?; in translate_operator()
2926 let eq = builder.ins().icmp(ir::condcodes::IntCC::Equal, r1, r2); in translate_operator()
2927 let eq = builder.ins().uextend(ir::types::I32, eq); in translate_operator()
2937 builder, in translate_operator()
2954 builder, in translate_operator()
2971 builder, in translate_operator()
2979 environ.trapz(builder, cast_okay, crate::TRAP_CAST_FAILURE); in translate_operator()
2989 builder, in translate_operator()
2997 environ.trapz(builder, cast_okay, crate::TRAP_CAST_FAILURE); in translate_operator()
3011 let cast_is_okay = environ.translate_ref_test(builder, to_ref_type, r, *r_ty)?; in translate_operator()
3014 let cast_fails_block = builder.create_block(); in translate_operator()
3016 builder, in translate_operator()
3028 builder.seal_block(cast_fails_block); in translate_operator()
3032 builder.switch_to_block(cast_fails_block); in translate_operator()
3045 let cast_is_okay = environ.translate_ref_test(builder, to_ref_type, r, *r_ty)?; in translate_operator()
3048 let cast_succeeds_block = builder.create_block(); in translate_operator()
3050 builder, in translate_operator()
3062 builder.seal_block(cast_succeeds_block); in translate_operator()
3066 builder.switch_to_block(cast_succeeds_block); in translate_operator()
3086 let contobj = environ.translate_cont_new(builder, r, &arg_types, &result_types)?; in translate_operator()
3118 let new_contobj = environ.translate_cont_bind(builder, original_contobj, &args); in translate_operator()
3136 environ.translate_suspend(builder, tag_index.as_u32(), &params, &return_types); in translate_operator()
3169 builder, in translate_operator()
3228 builder, in translate_operator()
3282 let arg1 = builder.ins().sextend(I128, arg1); in translate_operator()
3283 let arg2 = builder.ins().sextend(I128, arg2); in translate_operator()
3284 let result = builder.ins().imul(arg1, arg2); in translate_operator()
3285 let (lo, hi) = builder.ins().isplit(result); in translate_operator()
3290 let arg1 = builder.ins().uextend(I128, arg1); in translate_operator()
3291 let arg2 = builder.ins().uextend(I128, arg2); in translate_operator()
3292 let result = builder.ins().imul(arg1, arg2); in translate_operator()
3293 let (lo, hi) = builder.ins().isplit(result); in translate_operator()
3298 let arg1 = builder.ins().iconcat(arg1, arg2); in translate_operator()
3299 let arg2 = builder.ins().iconcat(arg3, arg4); in translate_operator()
3300 let result = builder.ins().iadd(arg1, arg2); in translate_operator()
3301 let (res1, res2) = builder.ins().isplit(result); in translate_operator()
3306 let arg1 = builder.ins().iconcat(arg1, arg2); in translate_operator()
3307 let arg2 = builder.ins().iconcat(arg3, arg4); in translate_operator()
3308 let result = builder.ins().isub(arg1, arg2); in translate_operator()
3309 let (res1, res2) = builder.ins().isplit(result); in translate_operator()
3325 builder: &mut FunctionBuilder, in translate_unreachable_operator()
3374 let else_block = block_with_params(builder, params, environ)?; in translate_unreachable_operator()
3382 builder.change_jump_destination( in translate_unreachable_operator()
3387 builder.seal_block(else_block); in translate_unreachable_operator()
3400 builder.switch_to_block(else_block); in translate_unreachable_operator()
3417 frame.restore_catch_handlers(&mut environ.stacks.handlers, builder); in translate_unreachable_operator()
3425 builder.seal_block(header); in translate_unreachable_operator()
3452 builder.switch_to_block(frame.following_code()); in translate_unreachable_operator()
3453 builder.seal_block(frame.following_code()); in translate_unreachable_operator()
3457 value_stack.extend_from_slice(builder.block_params(frame.following_code())); in translate_unreachable_operator()
3484 builder: &mut FunctionBuilder, in prepare_addr()
3490 let heap = environ.get_or_create_heap(builder.func, memory_index); in prepare_addr()
3567 builder, in prepare_addr()
3605 let offset = builder in prepare_addr()
3609 builder, in prepare_addr()
3615 builder, in prepare_addr()
3651 builder: &mut FunctionBuilder, in align_atomic_addr()
3669 builder.ins().iadd_imm(addr, memarg.offset.cast_signed()) in align_atomic_addr()
3672 let misalignment = builder in align_atomic_addr()
3675 let f = builder.ins().icmp_imm(IntCC::NotEqual, misalignment, 0); in align_atomic_addr()
3676 environ.trapnz(builder, f, crate::TRAP_HEAP_MISALIGNED); in align_atomic_addr()
3686 builder: &mut FunctionBuilder, in prepare_atomic_addr()
3689 align_atomic_addr(memarg, loaded_bytes, builder, environ); in prepare_atomic_addr()
3690 prepare_addr(memarg, loaded_bytes, builder, environ) in prepare_atomic_addr()
3700 builder: &mut FunctionBuilder, in translate_load()
3704 let (flags, wasm_index, base) = match prepare_addr(memarg, mem_op_size, builder, environ)? { in translate_load()
3709 environ.before_load(builder, mem_op_size, wasm_index, memarg.offset); in translate_load()
3711 let (load, dfg) = builder in translate_load()
3722 builder: &mut FunctionBuilder, in translate_store()
3726 let val_ty = builder.func.dfg.value_type(val); in translate_store()
3731 prepare_addr(memarg, mem_op_size, builder, environ)? in translate_store()
3734 environ.before_store(builder, mem_op_size, wasm_index, memarg.offset); in translate_store()
3736 builder in translate_store()
3752 fn translate_icmp(cc: IntCC, builder: &mut FunctionBuilder, environ: &mut FuncEnvironment<'_>) { in translate_icmp()
3754 let val = builder.ins().icmp(cc, arg0, arg1); in translate_icmp()
3755 environ.stacks.push1(builder.ins().uextend(I32, val)); in translate_icmp()
3763 builder: &mut FunctionBuilder, in translate_atomic_rmw()
3767 let arg2_ty = builder.func.dfg.value_type(arg2); in translate_atomic_rmw()
3788 arg2 = builder.ins().ireduce(access_ty, arg2); in translate_atomic_rmw()
3796 builder, in translate_atomic_rmw()
3801 let mut res = builder.ins().atomic_rmw(access_ty, flags, op, addr, arg2); in translate_atomic_rmw()
3803 res = builder.ins().uextend(widened_ty, res); in translate_atomic_rmw()
3813 builder: &mut FunctionBuilder, in translate_atomic_cas()
3817 let expected_ty = builder.func.dfg.value_type(expected); in translate_atomic_cas()
3818 let replacement_ty = builder.func.dfg.value_type(replacement); in translate_atomic_cas()
3839 expected = builder.ins().ireduce(access_ty, expected); in translate_atomic_cas()
3843 replacement = builder.ins().ireduce(access_ty, replacement); in translate_atomic_cas()
3851 builder, in translate_atomic_cas()
3855 let mut res = builder.ins().atomic_cas(flags, addr, expected, replacement); in translate_atomic_cas()
3857 res = builder.ins().uextend(widened_ty, res); in translate_atomic_cas()
3867 builder: &mut FunctionBuilder, in translate_atomic_load()
3892 builder, in translate_atomic_load()
3896 let mut res = builder.ins().atomic_load(access_ty, flags, addr); in translate_atomic_load()
3898 res = builder.ins().uextend(widened_ty, res); in translate_atomic_load()
3907 builder: &mut FunctionBuilder, in translate_atomic_store()
3911 let data_ty = builder.func.dfg.value_type(data); in translate_atomic_store()
3931 data = builder.ins().ireduce(access_ty, data); in translate_atomic_store()
3939 builder, in translate_atomic_store()
3943 builder.ins().atomic_store(flags, data, addr); in translate_atomic_store()
3950 builder: &mut FunctionBuilder, in translate_vector_icmp()
3954 let bitcast_a = optionally_bitcast_vector(a, needed_type, builder); in translate_vector_icmp()
3955 let bitcast_b = optionally_bitcast_vector(b, needed_type, builder); in translate_vector_icmp()
3957 .push1(builder.ins().icmp(cc, bitcast_a, bitcast_b)) in translate_vector_icmp()
3960 fn translate_fcmp(cc: FloatCC, builder: &mut FunctionBuilder, env: &mut FuncEnvironment<'_>) { in translate_fcmp()
3962 let val = builder.ins().fcmp(cc, arg0, arg1); in translate_fcmp()
3963 env.stacks.push1(builder.ins().uextend(I32, val)); in translate_fcmp()
3969 builder: &mut FunctionBuilder, in translate_vector_fcmp()
3973 let bitcast_a = optionally_bitcast_vector(a, needed_type, builder); in translate_vector_fcmp()
3974 let bitcast_b = optionally_bitcast_vector(b, needed_type, builder); in translate_vector_fcmp()
3976 .push1(builder.ins().fcmp(cc, bitcast_a, bitcast_b)) in translate_vector_fcmp()
3981 builder: &mut FunctionBuilder, in translate_br_if()
3986 let next_block = builder.create_block(); in translate_br_if()
3987 canonicalise_brif(builder, val, br_destination, inputs, next_block, &[]); in translate_br_if()
3989 builder.seal_block(next_block); // The only predecessor is the current block. in translate_br_if()
3990 builder.switch_to_block(next_block); in translate_br_if()
4238 builder: &mut FunctionBuilder, in optionally_bitcast_vector()
4240 if builder.func.dfg.value_type(value) != needed_type { in optionally_bitcast_vector()
4243 builder.ins().bitcast(needed_type, flags, value) in optionally_bitcast_vector()
4263 builder: &mut FunctionBuilder,
4269 let value = if is_non_canonical_v128(builder.func.dfg.value_type(*v)) {
4272 builder.ins().bitcast(I8X16, flags, *v)
4285 builder: &mut FunctionBuilder, in canonicalise_then_jump()
4290 let canonicalised = canonicalise_v128_values(&mut tmp_canonicalised, builder, params); in canonicalise_then_jump()
4291 builder.ins().jump(destination, canonicalised) in canonicalise_then_jump()
4296 builder: &mut FunctionBuilder, in canonicalise_brif()
4305 canonicalise_v128_values(&mut tmp_canonicalised_then, builder, params_then); in canonicalise_brif()
4308 canonicalise_v128_values(&mut tmp_canonicalised_else, builder, params_else); in canonicalise_brif()
4309 builder.ins().brif( in canonicalise_brif()
4324 builder: &mut FunctionBuilder, in pop1_with_bitcast()
4326 optionally_bitcast_vector(env.stacks.pop1(), needed_type, builder) in pop1_with_bitcast()
4335 builder: &mut FunctionBuilder, in pop2_with_bitcast()
4338 let bitcast_a = optionally_bitcast_vector(a, needed_type, builder); in pop2_with_bitcast()
4339 let bitcast_b = optionally_bitcast_vector(b, needed_type, builder); in pop2_with_bitcast()
4346 builder: &mut FunctionBuilder, in pop3_with_bitcast()
4349 let bitcast_a = optionally_bitcast_vector(a, needed_type, builder); in pop3_with_bitcast()
4350 let bitcast_b = optionally_bitcast_vector(b, needed_type, builder); in pop3_with_bitcast()
4351 let bitcast_c = optionally_bitcast_vector(c, needed_type, builder); in pop3_with_bitcast()
4356 builder: &FunctionBuilder, in bitcast_arguments()
4377 let arg_type = builder.func.dfg.value_type(**arg); in bitcast_arguments()
4399 pub fn bitcast_wasm_returns(arguments: &mut [Value], builder: &mut FunctionBuilder) { in bitcast_wasm_returns()
4400 let changes = bitcast_arguments(builder, arguments, &builder.func.signature.returns, |i| { in bitcast_wasm_returns()
4401 builder.func.signature.returns[i].purpose == ir::ArgumentPurpose::Normal in bitcast_wasm_returns()
4406 *arg = builder.ins().bitcast(t, flags, *arg); in bitcast_wasm_returns()
4415 builder: &mut FunctionBuilder, in bitcast_wasm_params()
4417 let callee_signature = &builder.func.dfg.signatures[callee_signature]; in bitcast_wasm_params()
4418 let changes = bitcast_arguments(builder, arguments, &callee_signature.params, |i| { in bitcast_wasm_params()
4424 *arg = builder.ins().bitcast(t, flags, *arg); in bitcast_wasm_params()
4429 builder: &mut FunctionBuilder, in create_catch_block()
4457 let block = block_with_params(builder, [exn_payload_wasm_ty], environ)?; in create_catch_block()
4458 builder.switch_to_block(block); in create_catch_block()
4459 let exn_ref = builder.func.dfg.block_params(block)[0]; in create_catch_block()
4462 builder.ins().ireduce(exn_ref_ty, exn_ref) in create_catch_block()
4468 builder.declare_value_needs_stack_map(exn_ref); in create_catch_block()
4484 params.extend(environ.translate_exn_unbox(builder, tag, exn_ref)?); in create_catch_block()
4494 canonicalise_then_jump(builder, frame.br_destination(), &params); in create_catch_block()