mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
Convert extract_tag, unbox_int32, unbox_object, box_int32, and box_int32_clean from DSL macros into codegen instructions, allowing each backend to emit optimal platform-specific code. On aarch64, this produces significant improvements: - extract_tag: single `lsr xD, xS, #48` instead of `mov` + `lsr` (3-operand shifts are free on ARM). Saves 1 instruction at 57 call sites. - unbox_object: single `and xD, xS, #0xffffffffffff` instead of `mov` + `shl` + `shr`. The 48-bit mask is a valid ARM64 logical immediate. Saves 2 instructions at 6 call sites. - box_int32: `mov wD, wS` + `movk xD, #tag, lsl #48` instead of `mov` + `and 0xFFFFFFFF` + `movabs tag` + `or`. The w-register mov zero-extends, and movk overwrites just the top 16 bits. Saves 2 instructions and no longer clobbers t0 (rax). - box_int32_clean: `movk xD, #tag, lsl #48` (1 instruction) instead of `mov` + `movabs tag` + `or` (saves 2 instructions, no t0 clobber). On x86_64, the generated code is equivalent to the old macros.