From 348187ad3becd036b0864045da65150eb8e3715f Mon Sep 17 00:00:00 2001 From: Richard Leach Date: Mon, 24 May 2021 00:33:36 +0100 Subject: [PATCH] Perl_newSVnv: inline relevant subset of sv_setnv --- sv.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/sv.c b/sv.c index ceef9966da34..51a6df489157 100644 --- a/sv.c +++ b/sv.c @@ -9608,7 +9608,26 @@ Perl_newSVnv(pTHX_ const NV n) SV *sv; new_SV(sv); - sv_setnv(sv,n); + /* Inlining ONLY the small relevant subset of sv_setnv here + * for performance. */ + + /* We're starting from SVt_FIRST, so provided that's + * actual 0, we don't have to unset any SV type flags + * to promote to SVt_NV. */ + STATIC_ASSERT_STMT(SVt_FIRST == 0); + +#if NVSIZE <= IVSIZE + SET_SVANY_FOR_BODYLESS_NV(sv); +#else + SvANY(sv) = new_XNV(); +#endif + + SvFLAGS(sv) |= SVt_NV; + (void)SvNOK_on(sv); + + SvNV_set(sv, n); + SvTAINT(sv); + return sv; }