• 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
..
arm Loading commit data...
arm64 Loading commit data...
ia32 Loading commit data...
mips Loading commit data...
mips64 Loading commit data...
ppc Loading commit data...
riscv64 Loading commit data...
s390 Loading commit data...
shared-ia32-x64 Loading commit data...
x64 Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...
aligned-slot-allocator.cc Loading commit data...
aligned-slot-allocator.h Loading commit data...
assembler-arch.h Loading commit data...
assembler-inl.h Loading commit data...
assembler.cc Loading commit data...
assembler.h Loading commit data...
bailout-reason.cc Loading commit data...
bailout-reason.h Loading commit data...
callable.h Loading commit data...
code-comments.cc Loading commit data...
code-comments.h Loading commit data...
code-desc.cc Loading commit data...
code-desc.h Loading commit data...
code-factory.cc Loading commit data...
code-factory.h Loading commit data...
code-reference.cc Loading commit data...
code-reference.h Loading commit data...
code-stub-assembler.cc Loading commit data...
code-stub-assembler.h Loading commit data...
compilation-cache.cc Loading commit data...
compilation-cache.h Loading commit data...
compiler.cc Loading commit data...
compiler.h Loading commit data...
constant-pool.cc Loading commit data...
constant-pool.h Loading commit data...
constants-arch.h Loading commit data...
cpu-features.h Loading commit data...
external-reference-encoder.cc Loading commit data...
external-reference-encoder.h Loading commit data...
external-reference-table.cc Loading commit data...
external-reference-table.h Loading commit data...
external-reference.cc Loading commit data...
external-reference.h Loading commit data...
flush-instruction-cache.cc Loading commit data...
flush-instruction-cache.h Loading commit data...
handler-table.cc Loading commit data...
handler-table.h Loading commit data...
interface-descriptors-inl.h Loading commit data...
interface-descriptors.cc Loading commit data...
interface-descriptors.h Loading commit data...
label.h Loading commit data...
machine-type.cc Loading commit data...
machine-type.h Loading commit data...
macro-assembler-inl.h Loading commit data...
macro-assembler.h Loading commit data...
optimized-compilation-info.cc Loading commit data...
optimized-compilation-info.h Loading commit data...
pending-optimization-table.cc Loading commit data...
pending-optimization-table.h Loading commit data...
register-arch.h Loading commit data...
register-configuration.cc Loading commit data...
register-configuration.h Loading commit data...
register.h Loading commit data...
reglist.h Loading commit data...
reloc-info.cc Loading commit data...
reloc-info.h Loading commit data...
safepoint-table.cc Loading commit data...
safepoint-table.h Loading commit data...
signature.h Loading commit data...
source-position-table.cc Loading commit data...
source-position-table.h Loading commit data...
source-position.cc Loading commit data...
source-position.h Loading commit data...
string-constants.cc Loading commit data...
string-constants.h Loading commit data...
tick-counter.cc Loading commit data...
tick-counter.h Loading commit data...
tnode.cc Loading commit data...
tnode.h Loading commit data...
turbo-assembler.cc Loading commit data...
turbo-assembler.h Loading commit data...
unoptimized-compilation-info.cc Loading commit data...
unoptimized-compilation-info.h Loading commit data...