WebKit

Author: Ludovic HENRY ludovic.henry@qti.qualcomm.com
Date: 2026-06-17
Scope: RISC-V (riscv64/linux) support status for WebKit
Audience: Technical leadership, resource allocation strategy
Verification policy: Every claim is cross-referenced to a primary upstream source. Items that could not be verified against a second source are marked [NEEDS VERIFICATION].


1. Project Overview

WebKit is the browser engine underlying Apple Safari, WPE WebKit (embedded Linux), and WebKitGTK. Its core JavaScript and WebAssembly engine is JavaScriptCore (JSC), which includes a multi-tier JIT stack: LLInt (bytecode interpreter), Baseline JIT, DFG JIT, and FTL (highest-tier optimizing JIT backed by B3/Air). The engine also includes separate WebAssembly JIT tiers: BBQJIT (fast baseline Wasm) and OMGJIT (optimizing Wasm).

The WebKit/WebKit repository is hosted at https://github.com/WebKit/WebKit with canonical upstream at git.webkit.org. Bug tracking uses bugs.webkit.org. The project is Apple-controlled with no independent foundation.

The primary delivery vehicle for RISC-V is the WPE WebKit port (embedded Linux), maintained by Igalia. The GTK port is a secondary target. Apple platform ports (macOS, iOS) have no RISC-V relevance.


2. Port History and Upstreaming Timeline

The RISC-V port was initiated by Igalia and has been developed incrementally since mid-2021. All dates and commits are from bugs.webkit.org and github.com/WebKit/WebKit.

Date Event Author / Organization
2021-07-27 First commit: [CMake] Add WTF_CPU_RISCV64 (commit d007542, bug 228322). JIT, FTL, and sampling profiler disabled explicitly “until they are properly supported.” Zan Dobersek, Igalia
2021-08-21 Bug 224134: “WebKitGTK constantly crashes on RISC-V 64” – LLVM “Cannot select” errors, 100% crash rate. Status: NEW, open. External reporter
2021-10-27 Bug 232373: scratchRegister() is unsafe on RISCV64. Status: NEW, open. Filed externally
2021-12-28 Define HAVE_MACHINE_CONTEXT, mcontext_t accessors for RISCV64 (commit 6c2615d). commit-queue
2022-03-11 Bug 237775: “[JSC] RISC-V support in JavaScriptCore” meta/tracking bug filed, covering ~46 sub-bugs for LLInt, MacroAssembler, YARR, WebAssembly, B3/Air, calling conventions. ~40 sub-bugs resolved. Zan Dobersek, Igalia
2022-03-24 Bug 238006 (B3/Air backend), Bug 238008 (C compressed extension) filed. Status: NEW, open. Zan Dobersek, Igalia
2022-05-01 Bug 239707: “Enable FTL/B3/Air support” filed. Status: NEW, open. Filed
2022-10-03 PR #4929: RISCV64 support for WebAssembly – merged. Major patch adding RISCV64 to JSC WebAssembly including baseline JIT and LLInt paths. Juliana Sims
2022-10-08 PR #5086: Use GOT for non-local symbols in RISCV64 JIT backend – merged. External
2022-11-19 PR #6132: Fix RISC-V64 SIMD compilation issues – merged. External
2023-03-10 PR #11358: Unreviewed build fixes for RISCV64 – merged. External
2023-06-22 PR #14732: WPE cross-toolchain-helper: Add a RISCV64 target (commit efa0c0b). Adds –cross-target=qemu-riscv64 to the WPE Yocto cross-build system. Carlos Lopez Perez (clopez), Igalia
2023-09-01 PR #17348: Unreviewed RISCV64 build fix – merged (commit bb7a34a). Zan Dobersek, Igalia
2023-10-25 PR #19543: Fix 32-bit shifts regression on RISCV64 – merged. External
2024-02-04 PR #23829: Fix build failed for riscv64 – merged (commit 6b46c24). luyahan
2024-08-01 PR #31401: Implement JITless JS entry thunk to Wasm on RISCV64 – merged. External
2024-10 onwards Wave of MacroAssemblerRISCV64 gap-filling patches from PLCT Lab (ISCAS, China). trdthg (Mingzhu Yan), PLCT Lab
2024-11-10 PR #36460: Set MacroAssemblerRISCV64 methods to public – merged. PR #36459: Add MacroAssemblerRISCV64 add8 implementations – open. External
2024-11-19 PR #36461: Fix instruction requires ‘D’/’F’/’M’ extension – merged. External
2024-12-09 PR #37639: Add lshift64 in MacroAssembler for RISCV – merged. External
2024-12-11 PR #37767: Add OFFLINE_ASM_ALIGN_TRAP for RISCV – merged. External
2026-01-18 Bug 305745: “[GTK] Fails to build in riscv64: cannot tail-call” – NEW, open. Filed
2026-05-05 PR #64268: Fix build for RISC-V – open, no reviewer assigned. Discussion confirms JIT “completely nonfunctional.” andreas-schwab
2026-05-13 PR #64755: Add RISCV64 support to GdbJIT ELF records – merged (commit 2130a34). PR #64756: Use std::integral in RISCV64 immediate helpers – merged (commit 6b720e4). Xeonacid
2026-05-14 PR #64894: Add missing RISCV64 offlineasm register mappings – open, merging-blocked. Approved by Constellation. Xeonacid
2026-05-25 PR #65621: Enable WebAssembly BBQJIT on RISCV64 – open, merging-blocked. 32 commits, 99.88% Wasm test pass rate on StarFive VisionFive 2. dangowrt (Daniel Golle, OpenWrt)
2026-05-26 PR #65645, #65646, #65647, #65648: Cluster of four offlineasm and AirArg fix PRs – all open. Xeonacid
2026-05-28 PR #65885: WPE cross-toolchain-helper Clang improvements + layer features – merged. External

Assessment: The port has had continuous but low-velocity investment since 2021. The dominant contributors are Igalia (port infrastructure, WPE), Juliana Sims (early Wasm work), trdthg/PLCT Lab (MacroAssembler gaps, 2024), Xeonacid (assembler/offlineasm fixes, 2026), and Daniel Golle/OpenWrt (BBQJIT enablement, 2026). Apple employees (Yusuke Suzuki, Justin Michaud) review and land patches but contribute no RISC-V code themselves. As of mid-2026, a cluster of 7 open PRs is attempting to enable BBQJIT but none have merged.


3. Upstream Support Tier

WebKit does not publish a formal architecture tier classification (no PLATFORMS.md, no SUPPORT.md, no TIER.md found in the repository). The inferred status is:

  • Not tier-1: No CI, no release binaries from upstream, no Apple employee contributions to RISC-V code.
  • Community-supported port: RISC-V patches are accepted when they do not break tier-1 platforms (Apple, x86_64 Linux). Two open PRs (#36379, #42802) carry merging-blocked labels due to CI failures on non-RISC-V platforms, confirming this policy.
  • WPE is the delivery vehicle: RISC-V work is overwhelmingly WPE-port-specific. The Yocto cross-build system includes a dedicated qemu-riscv64 target. GTK port has open build failures (Bug 305745).
  • No RISE membership: WebKit is not a member of the RISE project (riseproject.dev). The RISE blog (27 posts, May 2024 – June 2026) contains zero WebKit references. The RISE wheel builder and funded project list contain no WebKit entries.

4. Technical Architecture and RISC-V-Specific Subsystems

4.1 Architecture-Specific Source Files

Seven substantive RISC-V source files exist, all in Source/JavaScriptCore/:

File Lines Purpose Completeness
assembler/RISCV64Registers.h ~113 32 GPR + 32 FPR enums with ABI aliases, calling-convention metadata Full
assembler/RISCV64Assembler.h ~950 Low-level instruction encoder. RV64IMFD + Zicsr + Zifencei. ImmediateLoader for 64-bit constant synthesis. Link/patch helpers. Copyright 2021 Igalia S.L. Full for target ISA
assembler/MacroAssemblerRISCV64.h 3,000+ High-level MacroAssembler. Scalar integer and FP ops implemented. ~70+ vector methods are empty noop stubs via MACRO_ASSEMBLER_RISCV64_TEMPLATED_NOOP_METHOD. rotateRight32/64 and countPopulation32/64 are noop stubs. supportsFloat16() returns false. supportsCountPopulation() returns false. Scalar: full; SIMD/vector: fully stubbed
assembler/MacroAssemblerRISCV64.cpp ~395 probe() trampoline in rv64gc asm. Saves all 32 GPRs and 32 FPRs, calls executeJSCJITProbe, handles SP-modifying probes. Full
disassembler/RISCV64Disassembler.cpp ~465 Custom (non-Capstone) disassembler. Covers RV32I/RV64I, Zifencei, M, A, F, D. No RVV. Full for base ISA + IMFDA
offlineasm/riscv64.rb ~950 LLInt offlineasm backend. Integer, FP: implemented. Wasm atomics emit rv_ebreak placeholders. SIMD ops emit rv_ebreak with comment “WebAssembly placeholder for opcode X”. Scalar: functional; atomics/SIMD: ebreak stubs
offlineasm/backends.rb 3 lines RISCV64 registered in BACKENDS and WORKING_BACKENDS arrays. Full (registry only)

4.2 Platform Detection and Feature Flag Files

Source/WTF/wtf/PlatformCPU.h detects RISC-V via #if defined(__riscv) && defined(__riscv_xlen) && (__riscv_xlen == 64), defining WTF_CPU_RISCV64 1 and WTF_CPU_NEEDS_ALIGNED_ACCESS 1.

Source/JavaScriptCore/jit/GPRInfo.h defines 8 argument GPRs (x10-x17), 11 callee-saves (regCS0-CS10), 13 JIT temporaries, and named special-purpose registers: returnValueGPR=x10, numberTag=x25, notCellMask=x26, JITData=x24.

Source/JavaScriptCore/jit/FPRInfo.h defines 18 FP temporaries, 8 argument FPRs (f10-f17), 12 callee-saves (f8, f9, f18-f27), returnValueFPR=f10.

4.3 ISA Profile Used

The implementation targets RV64IMFD + Zicsr + Zifencei only. Not used: RVV (all vector paths are stubs), Zba, Zbb, Zbc, Zbs, Zfh, C (compressed instructions – Bug 238008 open). Bit manipulation operations that would use Zbb (clz, rotate, byteswap) are implemented as multi-instruction scalar sequences.

4.4 JIT Tier Status

Tier Build-time flag Runtime state Status
LLInt (bytecode interpreter) ON Active Functional; 4 open PRs fixing offlineasm gaps
Baseline JIT ON (ENABLE_JIT=ON) Active nominally PR #64268 discussion states JIT “completely nonfunctional” as of May 2026
DFG JIT Not enabled Disabled No RISCV64 clause in ENABLE_DFG_JIT
FTL / B3 / Air ON at build time Forced OFF at runtime via Options.cpp: useFTLJIT() = false (Bug 239707) B3/Air opcode table (AirOpcode.opcodes) has zero RISCV64 entries; B3 codegen absent
Wasm BBQJIT #undef ENABLE_WEBASSEMBLY_BBQJIT / #define ENABLE_WEBASSEMBLY_BBQJIT 0 in PlatformEnable.h Build-disabled PR #65621 enabling it open but unmerged as of June 2026
Wasm OMGJIT Build-disabled Build-disabled No RISCV64 implementation
Wasm SIMD / V128 Guarded #if CPU(X86_64) || CPU(ARM64) UNREACHABLE_FOR_PLATFORM() Not implemented
Wasm IPInt Guarded RELEASE_ASSERT_NOT_REACHED() with comment “IPInt only supports ARM64 and X86_64 (for now)” Not implemented
YARR JIT (regex) Enabled Active Grouped with ARM64/x86_64 in 64-bit path; arch-specific optimizations (ccmp folding, named register assignments) not present
Sampling profiler ENABLE_SAMPLING_PROFILER OFF Disabled Explicitly disabled in cmake/WebKitFeatures.cmake

The B3/Air gap is structurally critical. b3/air/AirOpcode.opcodes defines valid architecture keywords as: x86, x86_32, x86_64, arm, armv7, arm64. RISCV64 is entirely absent from this file. No RISCV64-specific Air opcodes exist. FTL cannot function without a B3/Air backend regardless of runtime flags.


5. Build System, Cross-Compilation, and Toolchain

5.1 Cross-Compilation System

The only documented build path for RISC-V is Yocto-based cross-compilation via the WPE port. No native riscv64 build host support is documented. No riscv64-specific Dockerfiles exist in the repository.

Target configuration in Tools/yocto/targets.conf:

[qemu-riscv64]
repo_manifest_path = riscv/manifest.xml
conf_bblayers_path = riscv/bblayers.conf
conf_local_path = riscv/local-qemu-riscv64.conf
image_basename = webkit-dev-ci-tools
image_types = tar.xz wic.xz wic.bmap

CMake flags set for qemu-riscv64 target: -DENABLE_WPE_QT_API=OFF -DENABLE_DOCUMENTATION=OFF -DENABLE_INTROSPECTION=OFF -DENABLE_SPEECH_SYNTHESIS=OFF -DBWRAP_EXECUTABLE=/usr/bin/bwrap -DDBUS_PROXY_EXECUTABLE=/usr/bin/xdg-dbus-proxy -DUSE_VULKAN=OFF -DENABLE_SPELLCHECK=OFF.

5.2 Build Commands

# One-time toolchain build (hours)
Tools/Scripts/cross-toolchain-helper --cross-target=qemu-riscv64 --build-toolchain

# Build WebKit WPE for riscv64
Tools/Scripts/build-webkit --wpe --release --cross-target=qemu-riscv64

# Enter cross-dev-shell for manual cmake/ninja
Tools/Scripts/cross-toolchain-helper --cross-target=qemu-riscv64 --cross-dev-shell

Build output directory: WebKitBuild/WPE/Release_qemu-riscv64/

5.3 Toolchain Requirements

  • GCC minimum: 12.2.0 – hard FATAL_ERROR in Source/cmake/WebKitCommon.cmake: “GCC 12.2 or newer is required to build WebKit.”
  • CMake minimum: 3.20
  • Swift: not applicable – upstream Swift has no riscv64 target; Tools/yocto/README.md states: qemu-riscv64 | no | gcc | upstream Swift has no riscv64 target
  • Clang: supported via the cross-toolchain-helper Clang improvements merged in PR #65885 (2026-05-28)

5.4 Yocto Layer Stack

From Tools/yocto/riscv/manifest.xml (scarthgap-based):

  • poky (Yocto reference distro)
  • meta-openembedded (meta-gnome, meta-multimedia, meta-networking, meta-oe, meta-perl, meta-python, meta-webserver)
  • meta-riscv (github.com/riscv/meta-riscv)
  • meta-webkit (github.com/Igalia/meta-webkit)

Machine: qemuriscv64 (QEMU software emulation). Distro: webkitdevci. WPE backend: wpebackend-fdo.

5.5 CPU Detection

Source/cmake/WebKitCommon.cmake: elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv64") sets WTF_CPU_RISCV64 1.

Source/cmake/WebKitFeatures.cmake riscv64 feature defaults:

elseif (WTF_CPU_RISCV64)
    set(ENABLE_JIT_DEFAULT ON)
    set(ENABLE_FTL_DEFAULT ON)
    set(USE_SYSTEM_MALLOC_DEFAULT OFF)
    set(USE_MIMALLOC_DEFAULT ON)
    set(ENABLE_C_LOOP_DEFAULT OFF)
    set(ENABLE_SAMPLING_PROFILER_DEFAULT OFF)

Because ENABLE_C_LOOP_DEFAULT OFF, WebAssembly is enabled by default (ENABLE_WEBASSEMBLY_DEFAULT ON). This means the riscv64 CMake configuration targets a full-featured JIT build, not a reduced interpreter-only build – but the runtime state contradicts this: B3/FTL are forced off, BBQJIT is build-disabled, and as of mid-2026 the JIT is described as nonfunctional.


6. Feature Coverage and Gap Analysis vs arm64 and amd64

Feature arm64 amd64 riscv64
LLInt interpreter Yes Yes Yes (with open fix PRs)
Baseline JIT Yes Yes Nominally yes; PR #64268 states “completely nonfunctional”
DFG JIT Yes Yes No
FTL / B3 / Air Yes Yes No – B3/Air backend absent; runtime-disabled
Wasm BBQJIT Yes Yes No – PR #65621 open, not merged
Wasm OMGJIT Yes Yes No
Wasm SIMD / V128 Yes Yes No – UNREACHABLE_FOR_PLATFORM()
Wasm IPInt Yes Yes No – RELEASE_ASSERT_NOT_REACHED()
YARR JIT Yes (with ccmp optimizations) Yes (with SSE) Partial (64-bit path works; no arch-specific opts)
GdbJIT debug info Yes Yes Yes – merged 2026-05-13
Sampling profiler Yes Yes No – explicitly disabled
SIMD in MacroAssembler Yes Yes No – all ~70 methods are empty noop stubs
Float16 Yes Yes No – supportsFloat16() returns false
Hardware popcount Yes Yes No – supportsCountPopulation() returns false
Hardware rotate Yes Yes No – noop stubs; emulated in offlineasm via shift+OR
Atomic memory ops in offlineasm Yes Yes No – emit rv_ebreak placeholders
Compressed instructions (ISA-C) N/A N/A Not implemented (Bug 238008 open)
Zbb/Zba extensions N/A N/A Not used
Swift integration Yes (macOS/iOS only) Yes (macOS/iOS only) No – upstream Swift has no riscv64 target
Vulkan Yes Yes No – disabled in cross-build config
WPE Yocto cross-build Yes Yes Yes (qemu-riscv64 target)
Native CI Yes Yes No
Official binary packages Yes Yes Debian unstable only (JIT-disabled)

The structural gap is the absent B3/Air backend. This is not a matter of incomplete wiring or disabled flags – the Air opcode file has no RISCV64 entries at all. Implementing B3/Air for RISC-V is a major engineering effort comparable to the original ARM64 B3 port.


7. CI/CD Infrastructure

WebKit has no riscv64 CI of any kind.

This was verified by examining:

  1. .github/ directory: contains only CODEOWNERS and pull_request_template.md. No .github/workflows/ directory. No GitHub Actions workflow files exist in this repository.

  2. WebKit’s Buildbot CI (build.webkit.org) builder API (/api/v2/builders?limit=500) was enumerated. Non-x86 architecture builders present: JSCOnly-Linux-ARMv7-Thumb2-Release, JSCOnly-Linux-ARMv7-Thumb2-SoftFP-Release, JSCOnly-Linux-AArch64-Release, JSCOnly-Linux-MIPS32el-Release, WPE-Linux-ARM64-bit-Release-Debian-Stable-Build, WPE-Linux-ARM32-bit-Release-Debian-Stable-Build, WPE-Linux-RPi4 variants. No entry containing “riscv”, “riscv64”, “risc-v”, or any variant.

  3. EWS (Early Warning System, ews.webkit.org): No RISC-V queue is documented or visible. All open RISC-V PRs carry the merging-blocked label, indicating the Merge-Queue has not exercised any RISC-V builder.

  4. No .gitlab-ci.yml, Jenkinsfile, or .cirrus.yml found in the repository root.

The 99.88% Wasm pass rate reported in PR #65621 was obtained by the contributor running JSTests/wasm.yaml manually on their own StarFive VisionFive 2 board running OpenWrt. This is developer self-testing, not automated CI.


8. Distribution and Release Status

Upstream WebKit/WebKit GitHub releases: None. The releases page states “There aren’t any releases here.” WebKit is source-only on GitHub. No riscv64 binary assets exist from upstream.

Debian unstable (sid):

  • Package: libwebkit2gtk-4.1-0_2.52.4-1_riscv64.deb
  • Size: 22.6 MB
  • SHA256: 02aa7c4f64da85859f16f5760db9b342d66b4eac11b2bd3e5eee24f980cb46a5
  • Status: Built and installed on build host rv-osuosl-04, approximately 16 days before report date
  • Source: buildd.debian.org webkit2gtk
  • Caveat: This build uses –disable-jit (or equivalent). The JIT is nonfunctional on riscv64 as confirmed by PR #64268. The package compiles and installs but ships an interpreter-only JSC.

Ubuntu 24.04 (Noble):

  • libwebkitgtk-6.0-4 and related packages list riscv64 as a supported architecture
  • Served via Ubuntu Ports (ports.ubuntu.com), not the main archive
  • Source: packages.ubuntu.com

PyPI: No package named “webkit” exists on PyPI (HTTP 404). Not applicable.

Arch Linux (official): riscv64 is not a supported architecture. API query returns {"valid": false, "results": []} for riscv64. ArchPOWER (unofficial community port) reportedly carries webkit2gtk 2.46.6 [NEEDS VERIFICATION] but this is two major release cycles behind current 2.52.x and is flagged with known CVEs per Repology.


9. Dependencies

The following table covers dependencies of the WebKit GTK and WPE ports on riscv64. Apple-specific dependencies are excluded.

Dependency Role riscv64 Build riscv64 Binary Available Blocking Issues
JavaScriptCore JIT (internal) JS/Wasm JIT engine Assembler files present; B3/FTL backend absent N/A (internal) JIT nonfunctional (PR #64268, Bug 239707); BBQJIT PR #65621 unmerged; B3/Air has zero riscv64 entries
mimalloc Default heap allocator Builds; SV39 fix merged Dec 2024 Available in Debian PRs #1296/#1299 (runtime VA detection via hwprobe) open mid-2026; mismatched MMU VA space causes segfaults across riscv64 systems; issue #640 (alignment warnings) open
ICU Unicode, i18n Builds; generic C++ Available in Debian No blocking issues
HarfBuzz Text shaping Builds; no RVV paths Available in Debian No blocking issues; scalar only
FreeType Font rasterization Builds; generic C Available in Debian No blocking issues
Cairo (GTK port) 2D rasterization Builds; no RVV pixman acceleration Available in Debian No riscv64 SIMD; scalar fallback only
libgcrypt WebCrypto, TLS Builds; riscv64-specific C files present for ChaCha20-RVV, GCM-Zbb/Zbc/Zvkg Available in Debian (v1.12.2-1) No blocking issues; hardware-accelerated paths require Zbb/Zbc/Zvkg
zlib (system) HTTP compression Builds; generic C Available in Debian No blocking issues; no RVV paths (unlike zlib-ng/cloudflare-zlib)
libjpeg-turbo JPEG decoding RVV SIMD merged Feb 2026 (3.1.90 / 3.2 beta1) No: upstream maintainer declined riscv64 binary packages (issue #885); distros ship 3.0.x without RVV GA 3.2 not yet released; no riscv64 CI; no official binaries
libpng PNG decoding Builds; RVV SIMD merged May 2025 (PR #666) Available in Debian (v1.6.52+) Correctness bugs post-merge: wrong RVV version targeting T-Head (issue #711); paeth3/paeth4 wrong pixels on SpacemiT K1 (issue #769, fixed ~v1.6.52); no automated riscv64 CI
libwebp WebP decoding/encoding Builds; generic C; no RVV paths Available in Debian No blocking issues; scalar fallback only
libavif (optional USE_AVIF) AVIF decoding Builds; generic C Available in Debian No blocking issues
libjxl (optional USE_JPEGXL) JPEG XL codec Builds; -mrelax-all clang fix merged Aug 2025 Available in Debian No open blocking issues
GStreamer HTML5 media, WebRTC Builds; generic C Available in Debian No riscv64 SIMD in core; plugin acceleration (dav1d, FFmpeg) depends on plugin selection
OpenSSL DTLS/SRTP for WebRTC Builds; riscv64 hardware crypto present (AES-Zkn, Zvk, ChaCha20-RVV, SHA512-RVV) Available in Debian No blocking issues
SQLite IndexedDB storage Builds; generic C Available in Debian No blocking issues
libxml2 XML parsing Builds; generic C Available in Debian No blocking issues
libsoup3 HTTP networking Builds; generic C Available in Debian No blocking issues
Epoxy OpenGL function loading Builds; generic C Available in Debian Depends on GPU driver availability
WOFF2 Web font decompression Builds; generic C++ Available in Debian No blocking issues

Priority summary for dependency issues:

Priority Component Issue
Critical JSC JIT / B3 FTL B3/FTL has no riscv64 codegen; BBQJIT PR unmerged
Critical JSC offlineasm 4 open PRs fixing missing opcode lowering (unmerged)
High mimalloc VA space detection PRs open; segfaults on heterogeneous riscv64 deployments
High libjpeg-turbo GA 3.2 unreleased; no upstream binary packages
Medium libpng Correctness bugs in RVV paths; requires v1.6.52+
Low HarfBuzz, Cairo, zlib, libwebp No riscv64 SIMD; performance gap only

10. Ecosystem Status

10.1 RISE Project

WebKit is not a RISE project member. The RISE blog (27 posts, May 2024 – June 2026) contains zero WebKit references. The RISE wheel builder (80+ Python packages) does not include any WebKit package. No RISE RFP for WebKit exists in the public project listing. RISE members with potential WebKit interest: Google, ISCAS (hosts PLCT Lab, which contributes RISC-V MacroAssembler patches to WebKit).

10.2 Active Contributor Organizations (2024-2026)

Organization Role Contributors
Igalia WPE port steward, initial RISC-V author, Yocto infrastructure Zan Dobersek, Carlos Lopez Perez, Adrian Perez de Castro
PLCT Lab / ISCAS MacroAssembler gap-filling (2024) trdthg (Mingzhu Yan)
OpenWrt BBQJIT enablement (2026) dangowrt (Daniel Golle)
openSUSE Hardware testing, build failure reports andreas-schwab
Apple Code review, landing patches (no RISC-V code contribution) Yusuke Suzuki (Constellation), Justin Michaud (justinmichaud)

No semiconductor company is a named contributor to WebKit RISC-V work in the sources examined.

10.3 Hardware Used for Testing

The only documented hardware test platform is the StarFive VisionFive 2 (SiFive U74, rv64gc, lp64d, 4 GiB DDR4, running OpenWrt). This was used by dangowrt for PR #65621. All other testing is QEMU-based via the Yocto qemu-riscv64 target.


11. Known Bugs and Active Issues

11.1 Open Pull Requests (all confirmed state=open, merged_at=None as of 2026-06-21)

PR Title Status Blocking What
#65648 Fix AirArg FPImm64 validation for non-ARM64/X86_64 builds open, merging-blocked; approved by justinmichaud B3/Air compile on riscv64
#65647 Lower RISCV64 offlineasm sxb2p open, merging-blocked LLInt sign-extend correctness
#65646 Lower RISCV64 offlineasm transfer instructions open LLInt transfer ops
#65645 Allow RISCV64 offlineasm local labels for pcrtoaddr and call open LLInt label resolution
#65621 Enable WebAssembly BBQJIT on RISCV64 open, merging-blocked Wasm BBQJIT tier; latest failure 2026-05-29: transform.rb:636 “Unresolved ‘IPIntCallCallee’ at InPlaceInterpreter64.asm:512”
#64894 Add missing RISCV64 offlineasm register mappings open, merging-blocked; approved by Constellation LLInt FP register correctness; FP arg regs mapped as ft0-ft7 instead of fa0-fa7
#64268 Fix build for RISC-V open, no reviewer Basic build without JIT
#50226 neon.h: Avoid -Wundef for SIMDE_ARCH_RISCV_ZVFH open, merging-blocked Build warning on RISC-V ZVFH
#42802 Fix build errors on RISCV open, merging-blocked; approved by xeenon Missing include for std::error_code
#36459 Add MacroAssemblerRISCV64 implementations for add8 open MacroAssembler completeness
#36379 Fix invalid application of sizeof to incomplete type in RISCV64 JSC open, merging-blocked C++ compile error

11.2 Open Bugzilla Bugs

Bug Title Filed Type
237775 [JSC] RISC-V support in JavaScriptCore (meta) 2022-03-11 Meta tracking; B3/FTL sub-items open
238006 JSC RISCV64 support in B3/Air 2022-03-24 Missing optimizing compiler backend
239707 Enable FTL/B3/Air support for RISCV64 2022-05-01 Missing highest JIT tier
238008 Support compressed instructions (C extension) 2022-03-24 Feature gap
232373 scratchRegister() is unsafe on RISCV64 2021-10-27 Correctness / safety
224134 WebKitGTK constantly crashes on RISC-V 64 2021-08-21 Crash; foundational
254553 WebAssembly build failure on RISCV64 2023-05-05 Build
276937 Build failed for riscv64 2024-07-23 Build
279285 SIGSEGV in IndexingHeader::preCapacity on RISC-V with GCC -O2 2025-09-18 Potential miscompile; crash
305745 [GTK] Fails to build in riscv64: cannot tail-call (Skia, clang) 2026-01-18 GTK port build regression
298377 simde: Building on RISC-V with ISA RVA23S64 fails 2025-09-11 Newer RISC-V ISA profile breaks SIMDE

11.3 NaN / Floating-Point Issues

No standalone NaN or floating-point correctness bugs are filed for riscv64 in Bugzilla or GitHub issues. One NaN correctness fix was found inside PR #65621 (commit 59838ed: “Wasm: NaN-box f32 wasm args in JSToWasmEntryWrapperBuildFrame”): RISC-V hardware does not automatically canonicalize NaN payloads for 32-bit floats passed through the JS-to-Wasm entry wrapper. This is fixed within PR #65621, which is not yet merged.


12. Objections and Upstream Blockers

12.1 PR #65621 Dependency Chain

The BBQJIT enablement PR is the most significant pending change. Its current blocker state:

PR #64268 (Fix build, disable JIT) -- open since May 5, no reviewer
  |
  +-- PR #64894 (offlineasm register maps) -- approved by Constellation, EWS gated (unrelated iOS test failure)
  +-- PR #65645 (local labels in pcrtoaddr/call) -- LGTM from aoikonomopoulos, no formal reviewer
  +-- PR #65646 (transfer instructions) -- no review
  +-- PR #65647 (sxb2p sign-extend) -- LGTM from aoikonomopoulos, no formal reviewer
  +-- PR #65648 (AirArg u64 scope fix) -- approved by justinmichaud, EWS gated (unrelated Windows failure)
  |
  +-- PR #65621 (Enable BBQJIT) -- merging-blocked
        Latest failure 2026-05-29: transform.rb:636 Unresolved 'IPIntCallCallee'
        at InPlaceInterpreter64.asm:512.
        Reviewer justinmichaud has open questions on:
          - Calling convention design (why does rv act differently from arm64)
          - NaN-boxing approach for f32 wasm args
          - canTierUpToOMG return value
          - LLInt register naming (a0-7 vs t0-6 ABI names)
        Author (dangowrt): "My main goal was to get this working for myself (and OpenWrt
        downstream use). I don't have the resources to follow up and submit each commit
        individually."

12.2 Structural Concerns Raised by the Reviewer

Justin Michaud (Apple JSC reviewer) raised an architectural question in the PR #65621 review: “I am also wondering if we shouldn’t just abandon the rv calling convention inside jit code… Take a look at how Windows uses the sysv convention as an example.” This is an unresolved design question, not a minor fixup, and has not been addressed by the contributor.

12.3 Author Resource Constraint

The BBQJIT PR author explicitly stated he does not have resources to split the 32-commit PR into individual submissions. JSC reviewers prefer smaller, bisectable patches. This mismatch is a process-level blocker independent of technical correctness.

12.4 EWS Gatekeeping

Multiple approved RISC-V PRs (#64894, #65648) are blocked by unrelated pre-existing CI failures on Apple platforms. The EWS system does not differentiate between RISC-V-introduced regressions and pre-existing failures, so these PRs cannot proceed without either the pre-existing failures being fixed or Apple EWS bots being configured to ignore them for RISC-V patches.


13. Investment Analysis

13.1 Functional Enablement

The BBQJIT PR (#65621) represents 99.88% Wasm correctness on real hardware and is the most impactful near-term deliverable. Its technical issues are solvable but require sustained engagement with the reviewer (justinmichaud) on calling convention design. The IPIntCallCallee resolution failure in InPlaceInterpreter64.asm is a specific offlineasm lowering issue (76 else error arms need to become else break for RISCV64). The calling convention question could require a design document. Estimated work to merge #65621 and its prerequisites: 4-8 person-weeks of focused JSC contributor time.

B3/Air backend for FTL is a separate, much larger effort. The Air opcode table has zero RISCV64 entries. This is a months-long project (comparable effort to the original ARM64 B3 port), requiring deep JSC knowledge. No current contributor has started this work.

Work Item Estimated Effort Current Status
Merge PR #65645-#65648 prerequisites 1-2 person-weeks Approved or LGTM; EWS gatekeeping only
Resolve BBQJIT PR #65621 calling-convention review + IPInt lowering 3-6 person-weeks Active review; author resource-constrained
Implement B3/Air RISCV64 backend (FTL prerequisite) 20-40 person-weeks Not started
Enable DFG JIT on RISCV64 4-8 person-weeks Not started
Implement Wasm IPInt for RISCV64 4-8 person-weeks Not started

13.2 Performance Optimization

No performance benchmark data exists for WebKit on RISC-V. The FTL JIT is the primary driver of JavaScript performance on all supported platforms; it does not exist for RISC-V. Without FTL, WebKit on RISC-V runs JavaScript at Baseline JIT performance at best. Implementing the Zbb extension (clz, rotate, byteswap) and Zba (address generation) in MacroAssemblerRISCV64.h would be low-effort quality-of-life improvements (2-4 person-weeks) but would have minimal impact without FTL.

Work Item Estimated Effort Expected Impact
Zbb/Zba extension use in MacroAssembler 2-3 person-weeks Minor (reduces instruction count in scalar JIT)
RVV in MacroAssembler SIMD stubs 6-10 person-weeks No impact until Wasm SIMD is wired (not started)
B3/Air backend (prerequisite for all FTL perf work) 20-40 person-weeks Critical – enables all subsequent JS perf work

13.3 CI/CD Infrastructure

No riscv64 CI exists. Adding a CI builder requires coordination with the WebKit infrastructure team (Apple-controlled). The EWS system is Buildbot-based and tightly managed. Community contributors cannot add CI builders unilaterally. A riscv64 CI bot would require: hardware (or QEMU), a builder registration in build.webkit.org config, and Apple infrastructure team agreement.

Work Item Estimated Effort Blockers
Add riscv64 QEMU EWS builder 4-8 person-weeks Requires Apple infrastructure team agreement; QEMU riscv64 is slow for full JSC test suite
Add native riscv64 hardware CI bot 6-12 person-weeks Requires hardware procurement, hosting, Apple infrastructure agreement

13.4 Ecosystem Enablement

Distribution binaries exist (Debian unstable, Ubuntu Noble) but are JIT-disabled. Once BBQJIT lands, distros will ship full-featured builds. No action needed here beyond upstreaming.

The mimalloc VA space detection issue (PRs #1296/#1299 in the mimalloc repository, unrelated to WebKit directly) is a potential source of riscv64-specific segfaults on heterogeneous hardware deployments and should be tracked.

13.5 Summary Table

Area Work Item Effort (person-weeks) Owner Priority
Functional Merge PR #65645-#65648 (offlineasm prerequisites) 1-2 riscv64 contributor with JSC commit rights Critical
Functional Resolve and merge BBQJIT PR #65621 (calling-convention design + IPInt lowering) 3-6 riscv64 contributor + justinmichaud engagement Critical
Functional Implement B3/Air RISCV64 backend (FTL prerequisite) 20-40 Senior JSC engineer with riscv64 expertise High
Functional Implement DFG JIT on RISCV64 4-8 JSC contributor High
Functional Implement Wasm IPInt for RISCV64 4-8 JSC contributor Medium
Functional Fix Bug 279285 (SIGSEGV with GCC -O2) 1-3 riscv64 + compiler expert High
Functional Fix Bug 305745 (GTK tail-call build failure, Skia/Clang) 1-2 WebKitGTK + Clang contributor Medium
Performance Zbb/Zba extension use in MacroAssembler 2-3 riscv64 contributor Low
Performance Wasm SIMD (after FTL and RVV MacroAssembler) 6-10 Senior JSC + RVV expert Low (blocked on FTL)
CI/CD Add riscv64 QEMU EWS builder 4-8 Contributor + Apple infra agreement High
CI/CD Add native riscv64 hardware CI bot 6-12 Contributor + hardware + Apple infra agreement Medium
Ecosystem Track mimalloc VA detection PRs (#1296/#1299) 0 (monitor) High (watch item)

14. Updates

No updates yet – initial report dated 2026-06-17.


15. References