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:
parent
89408d5f64
commit
911506af9f
3 changed files with 9 additions and 5 deletions
|
@ -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({});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue