b9b341f4a7
Previously, method extractors (getter functions which return tear-offs) where implemented in the following way: Method extractor body is an asm intrinsic which loads a few registers and jumps to BuildMethodExtractor stubs. BuildMethodExtractor stub loads more registers, calls AllocateClosure stub and initializes a few fields of a closure (this stub also used to call AllocateContext but it is no longer needed for tear-offs). AllocateClosure allocates a closure object and initializes closure fields. Instead of doing 2 hops to the object allocation, method extractor body now calls AllocateClosure stubs directly which initializes all closure fields. This saves a jump and a handful of instructions to load certain things on registers and set closure fields. Assembler intrinsic for method extractor body and architecture-specific BuildMethodExtractor stubs are now removed. Also, as method extractors are really tiny, they are now always inlined. TEST=ci Change-Id: Icfeed18414659a76c7d24d3f6f53a76c91e5bbd3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/356302 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>