• Manos Koukoutos's avatar
    [wasm] Internal representation for function references · f60132e9
    Manos Koukoutos authored
    Design doc: bit.ly/3jEVgzz
    
    We separate the internal representation of function references in Wasm
    from their JSFunction-based (external) representation. This improves
    performance of call_ref by requiring less indirections to load the
    context and call target from a function reference. In the boundary
    between wasm and JS/the C API, we add transformations between the two
    representations.
    
    Detailed changes:
    - Introduce WasmInternalFunction, containing fields required by
      call_ref, as well as a reference to the corresponding
      WasmExternalFunction. Add a reference to the WasmInternalFunction in
      WasmFunctionData. The {WasmInternalFunction::FromExternal} helper
      extracts the internal out of an external function.
    - Change {WasmInstanceObject::external_functions()} to internal
      functions.
    - Change wasm function tables to contain internal functions.
    - Change the following code to use internal functions:
      - call_ref in liftoff and Turbofan
      - function type checks in liftoff and Turbofan
      - CallRefIC and GenericJSToWasmWrapper builtins
      - {InitExprInterface::RefFunc}
      - module-compiler.cc in {ProcessTypeFeedback}
      - In module-instantiate.cc, in function-rtt creation.
    - Add transformations between internal and external functions in:
      - WasmWrapperGraphBuilder::{ToJS, BuildUnpackObjectWrapper, FromJS,
        BuildJSToJSWrapper}.
      - debug-wasm-objects.cc in {FunctionProxy::Get},
        {WasmValueObject::New} and {AddWasmTableObjectInternalProperties}.
      - runtime-wasm.cc in ReplaceWrapper
      - the C and JS APIs
      - module-instantiate.cc, in import and export processing, as well as
        {InitializeIndirectFunctionTables}
      - WasmTableObject::{IsValidElement, SetFunctionTableEntry}
      - {WasmGlobalObject::SetFuncRef}
    - Simplify body descriptors of WasmExternalFunction variants.
    - Adjust tests.
    
    Bug: v8:11510
    
    Change-Id: I8377f46f55c3771391ae1c5c8201a83854ee7878
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3277878Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#78068}
    f60132e9