mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
[build] Get release mode optimizations working
Added a release config, and fixed a few spots where optimizations broke things: - Clang was generating incorrect code for run_ctor_list in libc's init.cpp (it ignored a check for the end of the list) - my rep movsb memcpy implementation used incorrect inline asm constraints, so it was returning a pointer to the end of the copied range instead of the start. Since this function was just inline asm anyway, I rewrote it in asm by hand in a new memutils.s file.
This commit is contained in:
@@ -9,16 +9,11 @@ extern cb __init_array_end;
|
||||
namespace {
|
||||
|
||||
void
|
||||
run_ctor_list(cb *array, cb *end)
|
||||
run_ctor_list(cb *p, cb *end)
|
||||
{
|
||||
if (!array || !end)
|
||||
return;
|
||||
|
||||
size_t i = 0;
|
||||
while (true) {
|
||||
const cb &ctor = array[i++];
|
||||
if (&ctor == end) return;
|
||||
if (ctor) ctor();
|
||||
while (p && end && p < end) {
|
||||
if (p) (*p)();
|
||||
++p;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,8 +26,8 @@ run_global_ctors()
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C"
|
||||
void __init_libc()
|
||||
extern "C" void
|
||||
__init_libc()
|
||||
{
|
||||
run_global_ctors();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user