mirror of
https://github.com/HeyPuter/gex.git
synced 2026-11-13 20:12:43 -10:00
unity-dotnet P5 JIT: embed passes with virtual calls JITted (431 methods, 0 invalid)
The interpreter's vcall/PIC/AOT-vcall caches pack pointers into 32-bit halves; on 64-bit they are off and the miss path resolves through get_virtual_method_fast. Call args and the return register are coerced to the callee's/function's type where a native-int vreg was widened to i64. Adds CTTZ32/64 and LCONV_TO_[IU][12] (64-bit keeps them). GEX_NO_SIGNAL_TRAPS=1 makes wasmtime use explicit bounds checks (backtrace on a wild address). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01PeRutwFgZ66XpxjasKrPn1
This commit is contained in:
1 parent
644d138287
commit
2df82f93d7
2 files changed
+830
-198
No files matched your search
@@ -658,6 +658,12 @@ pub fn engine() -> Result<Engine> {
|
||||
config.wasm_memory64(true);
|
||||
config.memory_reservation(gex_abi::LIMIT64);
|
||||
}
|
||||
// `GEX_NO_SIGNAL_TRAPS=1` (debugging): explicit bounds checks, so a wild address in generated code traps
|
||||
// with a backtrace instead of faulting outside every guard region (which the signal handler cannot
|
||||
// attribute and the process dies of).
|
||||
if std::env::var_os("GEX_NO_SIGNAL_TRAPS").is_some() {
|
||||
config.signals_based_traps(false);
|
||||
}
|
||||
// gex's output is already optimised; Cranelift only adds register
|
||||
// allocation and peepholes, whose time dominates on a large program (half
|
||||
// a minute to compile SQLite vs under two seconds to translate).
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user