From 9e468579cee3b530f22d234b9db77c79917e4494 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 13 Jul 2023 09:48:05 +0200 Subject: [PATCH] LibJS/Bytecode: Use malloc instead of mmap for BasicBlock buffers Using mmap was quite punishing on inputs with lots of basic blocks, such as test262 tests with eval() in a loop that goes 64k times.. ~27% speed-up on language/literals/regexp/S7.8.5_A2.1_T2.js but presumably everything everywhere will benefit from this. :^) --- Userland/Libraries/LibJS/Bytecode/BasicBlock.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/BasicBlock.cpp b/Userland/Libraries/LibJS/Bytecode/BasicBlock.cpp index 840ee53b16..d9eda3ba9b 100644 --- a/Userland/Libraries/LibJS/Bytecode/BasicBlock.cpp +++ b/Userland/Libraries/LibJS/Bytecode/BasicBlock.cpp @@ -7,7 +7,6 @@ #include #include #include -#include namespace JS::Bytecode { @@ -23,8 +22,7 @@ BasicBlock::BasicBlock(DeprecatedString name, size_t size) // The main issue we're working around here is that we don't want pointers into the bytecode stream to become invalidated // during code generation due to dynamic buffer resizing. Otherwise we could just use a Vector. m_buffer_capacity = size; - m_buffer = (u8*)mmap(nullptr, m_buffer_capacity, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); - VERIFY(m_buffer != MAP_FAILED); + m_buffer = new u8[m_buffer_capacity]; } BasicBlock::~BasicBlock() @@ -36,7 +34,7 @@ BasicBlock::~BasicBlock() Instruction::destroy(const_cast(to_destroy)); } - munmap(m_buffer, m_buffer_capacity); + delete[] m_buffer; } void BasicBlock::seal()