tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 66d5a654c006126949e5a92be042d3b1179785d9
parent 46af4d9a893a594fd1dbc8ee5d2dbe4ba8a69baf
Author: André Bargull <andre.bargull@gmail.com>
Date:   Thu, 23 Oct 2025 09:56:07 +0000

Bug 1995491 - Part 1: Avoid unnecessary shift in ExtractBits. r=spidermonkey-reviewers,iain

`slli` isn't needed when `MaxBits - (pos + size)` is zero. This case happens
when `extractTag` calls `ExtractBits`.

Drive-by change:
- Merge code paths for `JS_CODEGEN_RISCV64` and `JS_CODEGEN_RISCV32`.

Differential Revision: https://phabricator.services.mozilla.com/D269358

Diffstat:
Mjs/src/jit/riscv64/MacroAssembler-riscv64.cpp | 33++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/js/src/jit/riscv64/MacroAssembler-riscv64.cpp b/js/src/jit/riscv64/MacroAssembler-riscv64.cpp @@ -5112,27 +5112,30 @@ void MacroAssemblerRiscv64::ma_b(Register lhs, Register rhs, Label* label, void MacroAssemblerRiscv64::ExtractBits(Register rt, Register rs, uint16_t pos, uint16_t size, bool sign_extend) { #if JS_CODEGEN_RISCV64 - MOZ_ASSERT(pos < 64 && 0 < size && size <= 64 && 0 < pos + size && - pos + size <= 64); - slli(rt, rs, 64 - (pos + size)); - if (sign_extend) { - srai(rt, rt, 64 - size); - } else { - srli(rt, rt, 64 - size); - } + constexpr uint16_t MaxBits = 64; #elif JS_CODEGEN_RISCV32 - MOZ_ASSERT(pos < 32); + constexpr uint16_t MaxBits = 32; +#endif + + MOZ_ASSERT(pos < MaxBits); MOZ_ASSERT(size > 0); - MOZ_ASSERT(size <= 32); + MOZ_ASSERT(size <= MaxBits); MOZ_ASSERT((pos + size) > 0); - MOZ_ASSERT((pos + size) <= 32); - slli(rt, rs, 32 - (pos + size)); + MOZ_ASSERT((pos + size) <= MaxBits); + + Register src; + if (uint16_t shift = MaxBits - (pos + size)) { + slli(rt, rs, shift); + src = rt; + } else { + src = rs; + } + if (sign_extend) { - srai(rt, rt, 32 - size); + srai(rt, src, MaxBits - size); } else { - srli(rt, rt, 32 - size); + srli(rt, src, MaxBits - size); } -#endif } void MacroAssemblerRiscv64::InsertBits(Register dest, Register source, int pos,