Skip to content

[wasm coreclr] unboxing stubs #120092

@radekdoulik

Description

@radekdoulik

We are missing unboxing stubs on wasm as these are currently emitted as native code on other platforms.

This can be reached through

TestCallingConvention0(1, 2.0f, 3, 4.0, 5, 6.0);

static void TestCallingConvention0(int a, float b, int c, double d, int e, double f)
{
    Console.WriteLine("TestCallingConvention0: a = {0}, b = {1}, c = {2}, d = {3}, e = {4}, f = {5}", a, b, c, d, e, f);
}

and results in

ASSERT FAILED
	Expression: false && "The EmitComputedInstantiatingMethodStub is not implemented on wasm"
	Location:   line 81 in /Users/rodo/git/runtime-main/src/coreclr/vm/wasm/cgencpu.h
	Function:   EmitComputedInstantiatingMethodStub
	Process:    42
Frame (InterpreterFrame): 0x4fee58
   0) System.Text.ValueStringBuilder::AppendFormatHelper, IR_051c
   1) System.IO.StreamWriter::WriteFormatHelper, IR_007c
   2) System.IO.StreamWriter::WriteLine, IR_0034
   3) System.Console::WriteLine, IR_0013
   4) Program::<<Main>$>g__TestCallingConvention0|0_0, IR_00b4
   5) Program::<Main>$, IR_001c

the native part

StubLinkerCPU::EmitComputedInstantiatingMethodStub(MethodDesc*, ShuffleEntry*, void*) (src/coreclr/vm/wasm/cgencpu.h:81)
MakeUnboxingStubWorker(MethodDesc*) (src/coreclr/vm/prestub.cpp:1723)
MethodDesc::DoPrestub(MethodTable*, CallerGCMode) (src/coreclr/vm/prestub.cpp:2263)
CallPreStub(MethodDesc*)::$_1::operator()(CallPreStub(MethodDesc*)::Param*) const (src/coreclr/vm/interpexec.cpp:641)
CallPreStub(MethodDesc*) (src/coreclr/vm/interpexec.cpp:643)
InterpExecMethod(InterpreterFrame*, InterpMethodContextFrame*, InterpThreadContext*, ExceptionClauseArgs*) (src/coreclr/vm/interpexec.cpp:2453)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions