1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 21:07:35 +00:00

LibJS: Align Instructions as void* and roundup variably sized ones sizes

Both is indeed needed,
the standard alignment would have been 4, but some Instructions, like
Jumps need an alignment of 8

Fixes #12127.
This commit is contained in:
Hendiadyoin1 2022-09-09 16:47:42 +02:00 committed by Linus Groh
parent 89408d5f64
commit 911506af9f
3 changed files with 9 additions and 5 deletions

View file

@ -65,12 +65,15 @@ public:
OpType& emit_with_extra_register_slots(size_t extra_register_slots, Args&&... args)
{
VERIFY(!is_current_block_terminated());
size_t size_to_allocate = round_up_to_power_of_two(sizeof(OpType) + extra_register_slots * sizeof(Register), alignof(void*));
// If the block doesn't have enough space, switch to another block
if constexpr (!OpType::IsTerminator)
ensure_enough_space(sizeof(OpType) + extra_register_slots * sizeof(Register));
ensure_enough_space(size_to_allocate);
void* slot = next_slot();
grow(sizeof(OpType) + extra_register_slots * sizeof(Register));
grow(size_to_allocate);
new (slot) OpType(forward<Args>(args)...);
if constexpr (OpType::IsTerminator)
m_current_basic_block->terminate({});