diff --git a/crates/guest-rust/rt/src/async_support/subtask.rs b/crates/guest-rust/rt/src/async_support/subtask.rs index ce480bc12..adab770d0 100644 --- a/crates/guest-rust/rt/src/async_support/subtask.rs +++ b/crates/guest-rust/rt/src/async_support/subtask.rs @@ -80,12 +80,10 @@ unsafe impl WaitableOp for SubtaskOps { let (ptr_params, cleanup) = Cleanup::new(T::ABI_LAYOUT); let ptr_results = ptr_params.add(T::RESULTS_OFFSET); T::params_lower(state.params, ptr_params); - let result = T::call_import(ptr_params, ptr_results); - // FIXME(bytecodealliance/wasip3-prototyping#99) the decoding of the - // result here isn't standards-compliant. - let code = result >> 30; - let subtask = - NonZeroU32::new((result << 2) >> 2).map(|handle| SubtaskHandle { handle }); + let packed = T::call_import(ptr_params, ptr_results); + let code = packed & 0xf; + let subtask = NonZeroU32::new(packed >> 4).map(|handle| SubtaskHandle { handle }); + rtdebug!("({ptr_params:?}, {ptr_results:?}) = ({code:#x}, {subtask:#x?})"); ( code,