• Milad Fa's avatar
    PPC/s390: Reland "[codegen] Add static interface descriptors" · ea177a6b
    Milad Fa authored
    Port 2871e05c
    
    Original Commit Message:
    
        This is a reland of ae0752df
    
        Reland fixes:
    
          * Remove UNREACHABLE() from constexpr switch, since we don't have a
            CONSTEXPR_UNREACHABLE() (it's ok, the switch is exhaustive for the
            enum anyway).
          * Fix IsRegisterArray trait to use public inheritance and size_t for
            std::array size.
    
        Original change's description:
        > [codegen] Add static interface descriptors
        >
        > Add a new CRTP StaticCallInterfaceDescriptor class, which provides
        > static constexpr getters for a descriptor's registers, parameter counts,
        > and so on. Each CallInterfaceDescriptor subclass is changed to extend
        > StaticCallInterfaceDescriptor, with StaticCallInterfaceDescriptor itself
        > extending CallInterfaceDescriptor to still provide a dynamic lookup
        > where needed.
        >
        > StaticCallInterfaceDescriptor provides a couple of customisation points,
        > where it reads its CRTP derived descriptor's static fields and
        > functions, with default fallbacks where appropriate. With these
        > customisation points, the definition of CallInterfaceDescriptor
        > subclasses is simplified to:
        >
        >     a) Providing parameter names (as before)
        >     b) Providing parameter types (as before)
        >     c) Optionally setting flags (like kNoContext or kAllowVarArgs) as
        >        static booleans on the class.
        >     d) Optionally providing a `registers()` method that returns a
        >        std::array<Register, N> of registers that may be used for
        >        parameters (if not provided, this defaults to the implementation
        >        specific default register set).
        >
        > Parameter registers (and register count) are automagically set based on
        > the number of parameters and number of given registers, with extra magic
        > to ignore no_reg registers (to reduce ia32 special casing). The
        > CallInterfaceDescriptorData is initialized based on these static
        > functions, rather than manual per-descriptor initializers.
        >
        > This allows us to skip loading descriptors dynamically for CallBuiltin
        > in Sparkplug, and instead lets us use a bit of template magic to
        > statically set up arguments for the calls. Any other users of statically
        > known descriptors will also benefit, thanks to C++ picking the static
        > methods over the dynamic methods on the base class when available.
        >
        > Because we can remove various virtual functions and trigger heavier
        > inlining of constantly known values, binary size slightly decreases with
        > this change.
        >
        > Note that torque-generated descriptors are changed to use the same magic,
        > rather than having Torque-specific magic, for consistency.
        >
        > Bug: v8:11420
        > Change-Id: Icc5e238b6313a08734feb564204a13226b450c22
        > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2814518
        > Auto-Submit: Leszek Swirski <leszeks@chromium.org>
        > Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
        > Reviewed-by: Clemens Backes <clemensb@chromium.org>
        > Reviewed-by: Igor Sheludko <ishell@chromium.org>
        > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
        > Commit-Queue: Clemens Backes <clemensb@chromium.org>
        > Cr-Commit-Position: refs/heads/master@{#73996}
    
    R=leszeks@chromium.org, joransiu@ca.ibm.com, junyan@redhat.com, midawson@redhat.com
    BUG=
    LOG=N
    
    Change-Id: Id854bb901df72787ed225fc8790c3f626121ab3a
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2830897Reviewed-by: 's avatarJunliang Yan <junyan@redhat.com>
    Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Commit-Queue: Milad Fa <mfarazma@redhat.com>
    Cr-Commit-Position: refs/heads/master@{#74034}
    ea177a6b
Name
Last commit
Last update
..
assembler-ppc-inl.h Loading commit data...
assembler-ppc.cc Loading commit data...
assembler-ppc.h Loading commit data...
constants-ppc.cc Loading commit data...
constants-ppc.h Loading commit data...
cpu-ppc.cc Loading commit data...
interface-descriptors-ppc-inl.h Loading commit data...
macro-assembler-ppc.cc Loading commit data...
macro-assembler-ppc.h Loading commit data...
register-ppc.h Loading commit data...