mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-22 21:32:31 +00:00
Perform build and magnum tuning
Building o//third_party/python now takes 5 seconds on my PC This change works towards modifying Python to use runtime dispatching when appropriate. For example, when loading the magnums in the socket module, it's a good idea to check if the magnum is zero, because that means the local system platform doesn't support it.
This commit is contained in:
parent
ee7e296339
commit
d26d7ae0e4
1028 changed files with 6576 additions and 172777 deletions
54
third_party/python/Objects/stringlib/replace.inc
vendored
Normal file
54
third_party/python/Objects/stringlib/replace.inc
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
/* clang-format off */
|
||||
/* stringlib: replace implementation */
|
||||
|
||||
#ifndef STRINGLIB_FASTSEARCH_H
|
||||
#error must include fastsearch.inc before including this module
|
||||
#endif
|
||||
|
||||
Py_LOCAL_INLINE(void)
|
||||
STRINGLIB(replace_1char_inplace)(STRINGLIB_CHAR* s, STRINGLIB_CHAR* end,
|
||||
Py_UCS4 u1, Py_UCS4 u2, Py_ssize_t maxcount)
|
||||
{
|
||||
*s = u2;
|
||||
while (--maxcount && ++s != end) {
|
||||
/* Find the next character to be replaced.
|
||||
|
||||
If it occurs often, it is faster to scan for it using an inline
|
||||
loop. If it occurs seldom, it is faster to scan for it using a
|
||||
function call; the overhead of the function call is amortized
|
||||
across the many characters that call covers. We start with an
|
||||
inline loop and use a heuristic to determine whether to fall back
|
||||
to a function call. */
|
||||
if (*s != u1) {
|
||||
int attempts = 10;
|
||||
/* search u1 in a dummy loop */
|
||||
while (1) {
|
||||
if (++s == end)
|
||||
return;
|
||||
if (*s == u1)
|
||||
break;
|
||||
if (!--attempts) {
|
||||
/* if u1 was not found for attempts iterations,
|
||||
use FASTSEARCH() or memchr() */
|
||||
#if STRINGLIB_SIZEOF_CHAR == 1
|
||||
s++;
|
||||
s = memchr(s, u1, end - s);
|
||||
if (s == NULL)
|
||||
return;
|
||||
#else
|
||||
Py_ssize_t i;
|
||||
STRINGLIB_CHAR ch1 = (STRINGLIB_CHAR) u1;
|
||||
s++;
|
||||
i = FASTSEARCH(s, end - s, &ch1, 1, 0, FAST_SEARCH);
|
||||
if (i < 0)
|
||||
return;
|
||||
s += i;
|
||||
#endif
|
||||
/* restart the dummy loop */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*s = u2;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue