You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-HEK* cache str "UNIVERSAL" its heavily used inside the Perl VM, and take
advantage of shared HEK* to HEK* comparison loop optimization inside
hv_common
-HEK* cache str "dfs", it is ineligible for COW 255 since its under 9 chars
long
-mro_get_mro() cleanup retval, PPCODE: moves SP back to 0, we push 1 elem
then EUPXS does a PUTBACK for us, this removes alot of PL_stack_base
derefs
- av_push_simple(ret_array, newSVsv(hv_iterkeysv(iter)));
is created 2 SV*s for no good reason, someone earlier never read the api
docs for what hv_iterkeysv() does, or looked at its internals
-mXPUSHs -> mPUSHs, X not needed, we bounds checked if (items != 1)
and rewind with PPCODE earlier
-switch to SvPV_const(), COW future proofing
-hv_existss(isarev, "UNIVERSAL") switch to SVPV HEK* for faster lookups
and precalced U32 hash
-mro_get_pkg_gen() just use EU::PXS's built in IV retval logic instead of
DIYing it, newer EU::PXSs use dXSTARG; and TARGi,(); optimization
-mro_invalidate_all_method_caches() do @_ logic as early as possible
croak_xs_usage() doesn't care if MARK was popped, or how much forwards
or backwards the SV** inside PL_stack_sp is. Doing this allows the
smallest machine code possible on any CPU arch, since the offset literals
into my_perl, or unthreaded offsets into libperl.so.dll, that do the
reads and writes are very close together (RISC CPUs might need a dedicated
load const litteral integer to register op, to reach around inside my_perl
or libperl.so.dll, they can't put a variable length
1-4 byte opcode + (U16 || U32) litteral into 1 RISC op. ARM's limit is U12
for example.
0 commit comments