@@ -103,25 +103,36 @@ impl<'a> TrampolineCompiler<'a> {
103103 Trampoline :: ResourceNew ( ty) => self . translate_resource_new ( * ty) ,
104104 Trampoline :: ResourceRep ( ty) => self . translate_resource_rep ( * ty) ,
105105 Trampoline :: ResourceDrop ( ty) => self . translate_resource_drop ( * ty) ,
106- Trampoline :: TaskBackpressure { instance } => {
107- self . translate_task_backpressure_call ( * instance)
106+ Trampoline :: BackpressureSet { instance } => {
107+ self . translate_backpressure_set_call ( * instance)
108108 }
109- Trampoline :: TaskReturn { results } => self . translate_task_return_call ( * results) ,
110- Trampoline :: TaskWait {
109+ Trampoline :: TaskReturn { results, options } => {
110+ self . translate_task_return_call ( * results, options)
111+ }
112+ Trampoline :: WaitableSetNew { instance } => self . translate_waitable_set_new ( * instance) ,
113+ Trampoline :: WaitableSetWait {
111114 instance,
112115 async_,
113116 memory,
114- } => {
115- self . translate_task_wait_or_poll_call ( * instance, * async_, * memory, host:: task_wait)
116- }
117+ } => self . translate_task_wait_or_poll_call (
118+ * instance,
119+ * async_,
120+ * memory,
121+ host:: waitable_set_wait,
122+ ) ,
117123 Trampoline :: WaitableSetPoll {
118124 instance,
119125 async_,
120126 memory,
121- } => {
122- self . translate_task_wait_or_poll_call ( * instance, * async_, * memory, host:: task_poll)
123- }
124- Trampoline :: TaskYield { async_ } => self . translate_task_yield_call ( * async_) ,
127+ } => self . translate_task_wait_or_poll_call (
128+ * instance,
129+ * async_,
130+ * memory,
131+ host:: waitable_set_poll,
132+ ) ,
133+ Trampoline :: WaitableSetDrop { instance } => self . translate_waitable_set_drop ( * instance) ,
134+ Trampoline :: WaitableJoin { instance } => self . translate_waitable_join ( * instance) ,
135+ Trampoline :: Yield { async_ } => self . translate_yield_call ( * async_) ,
125136 Trampoline :: SubtaskDrop { instance } => self . translate_subtask_drop_call ( * instance) ,
126137 Trampoline :: StreamNew { ty } => self . translate_future_or_stream_call (
127138 & [ ty. as_u32 ( ) ] ,
@@ -375,7 +386,7 @@ impl<'a> TrampolineCompiler<'a> {
375386 }
376387 }
377388
378- fn translate_task_return_call ( & mut self , results : TypeTupleIndex ) {
389+ fn translate_task_return_call ( & mut self , results : TypeTupleIndex , options : & CanonicalOptions ) {
379390 let args = self . builder . func . dfg . block_params ( self . block0 ) . to_vec ( ) ;
380391 let vmctx = args[ 0 ] ;
381392
@@ -394,6 +405,60 @@ impl<'a> TrampolineCompiler<'a> {
394405 ) ;
395406 }
396407
408+ fn translate_waitable_set_new ( & mut self , instance : RuntimeComponentInstanceIndex ) {
409+ let args = self . builder . func . dfg . block_params ( self . block0 ) . to_vec ( ) ;
410+ let vmctx = args[ 0 ] ;
411+
412+ let instance = self
413+ . builder
414+ . ins ( )
415+ . iconst ( ir:: types:: I32 , i64:: from ( instance. as_u32 ( ) ) ) ;
416+
417+ self . translate_intrinsic_libcall (
418+ vmctx,
419+ host:: waitable_set_new,
420+ & [ vmctx, instance] ,
421+ TrapSentinel :: NegativeOne ,
422+ ) ;
423+ }
424+
425+ fn translate_waitable_set_drop ( & mut self , instance : RuntimeComponentInstanceIndex ) {
426+ let args = self . builder . func . dfg . block_params ( self . block0 ) . to_vec ( ) ;
427+ let vmctx = args[ 0 ] ;
428+ let set = args[ 2 ] ;
429+
430+ let instance = self
431+ . builder
432+ . ins ( )
433+ . iconst ( ir:: types:: I32 , i64:: from ( instance. as_u32 ( ) ) ) ;
434+
435+ self . translate_intrinsic_libcall (
436+ vmctx,
437+ host:: waitable_set_drop,
438+ & [ vmctx, instance, set] ,
439+ TrapSentinel :: Falsy ,
440+ ) ;
441+ }
442+
443+ fn translate_waitable_join ( & mut self , instance : RuntimeComponentInstanceIndex ) {
444+ let args = self . builder . func . dfg . block_params ( self . block0 ) . to_vec ( ) ;
445+ let vmctx = args[ 0 ] ;
446+ let set = args[ 2 ] ;
447+ let waitable = args[ 3 ] ;
448+
449+ let instance = self
450+ . builder
451+ . ins ( )
452+ . iconst ( ir:: types:: I32 , i64:: from ( instance. as_u32 ( ) ) ) ;
453+
454+ self . translate_intrinsic_libcall (
455+ vmctx,
456+ host:: waitable_join,
457+ & [ vmctx, instance, set, waitable] ,
458+ TrapSentinel :: Falsy ,
459+ ) ;
460+ }
461+
397462 fn translate_sync_enter ( & mut self ) {
398463 match self . abi {
399464 Abi :: Wasm => { }
@@ -534,7 +599,7 @@ impl<'a> TrampolineCompiler<'a> {
534599 self . translate_intrinsic_libcall ( vmctx, get_libcall, & callee_args, sentinel) ;
535600 }
536601
537- fn translate_task_backpressure_call ( & mut self , caller_instance : RuntimeComponentInstanceIndex ) {
602+ fn translate_backpressure_set_call ( & mut self , caller_instance : RuntimeComponentInstanceIndex ) {
538603 let args = self . builder . func . dfg . block_params ( self . block0 ) . to_vec ( ) ;
539604 let vmctx = args[ 0 ] ;
540605
@@ -549,7 +614,7 @@ impl<'a> TrampolineCompiler<'a> {
549614
550615 self . translate_intrinsic_libcall (
551616 vmctx,
552- host:: task_backpressure ,
617+ host:: backpressure_set ,
553618 & callee_args,
554619 TrapSentinel :: Falsy ,
555620 ) ;
@@ -586,7 +651,7 @@ impl<'a> TrampolineCompiler<'a> {
586651 ) ;
587652 }
588653
589- fn translate_task_yield_call ( & mut self , async_ : bool ) {
654+ fn translate_yield_call ( & mut self , async_ : bool ) {
590655 let args = self . builder . func . dfg . block_params ( self . block0 ) . to_vec ( ) ;
591656 let vmctx = args[ 0 ] ;
592657
@@ -597,12 +662,7 @@ impl<'a> TrampolineCompiler<'a> {
597662 . iconst ( ir:: types:: I8 , if async_ { 1 } else { 0 } ) ,
598663 ] ;
599664
600- self . translate_intrinsic_libcall (
601- vmctx,
602- host:: task_yield,
603- & callee_args,
604- TrapSentinel :: Falsy ,
605- ) ;
665+ self . translate_intrinsic_libcall ( vmctx, host:: yield_, & callee_args, TrapSentinel :: Falsy ) ;
606666 }
607667
608668 fn translate_subtask_drop_call ( & mut self , caller_instance : RuntimeComponentInstanceIndex ) {
0 commit comments