| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 262f966 commit 4a784cb
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -126,13 +126,26 @@ raw pointer `bigint` values. For pointer-like parameters, `null`, `undefined`, | |||
| 126 | 126 | strings, `Buffer`, typed array, `DataView`, and `ArrayBuffer` values are | |
| 127 | 127 | converted on the JavaScript side before calling the optimized native wrapper. | |
| 128 | 128 | ||
| 129 | - Optimized Fast FFI calls support at most 8 function arguments, but the exact | ||
| 130 | - limit depends on the architecture and on the argument types, because each | ||
| 131 | - argument must fit in the registers used by the platform trampoline. Integer | ||
| 132 | - and pointer arguments are limited to 7 on AArch64 and to 6 on x86-64, while | ||
| 133 | - floating-point arguments can use up to 8 on both. Functions that exceed these | ||
| 134 | - limits, including any function with more than 8 arguments, use the generic FFI | ||
| 135 | - call path instead. | ||
| 129 | + Optimized Fast FFI calls fall back to the generic FFI call path when a | ||
| 130 | + function's arguments or return type do not fit the platform-specific fast | ||
| 131 | + trampoline. Fast FFI calls support at most 8 total arguments, and the | ||
| 132 | + register and argument limits differ per architecture: | ||
| 133 | + | ||
| 134 | + | Architecture | Max integer/pointer args | Max floating-point args | Buffer-shaped args | Buffer-shaped + FP together | Narrow (8/16-bit) return | | ||
| 135 | + | -------------------------- | ----------------------------------------- | ----------------------- | ------------------ | --------------------------- | ------------------------ | | ||
| 136 | + | AArch64 | 7 (6 when a buffer-shaped arg is present) | 8 | Supported | Not supported | Supported | | ||
| 137 | + | x86-64, Linux/macOS (SysV) | 6 (4 when a buffer-shaped arg is present) | 8 | Supported | Not supported | Supported | | ||
| 138 | + | x86-64, Windows (Win64) | 3 (total arguments also capped at 3) | 3 | Not supported | N/A | Supported | | ||
| 139 | + | s390x | 4 | 4 | Not supported | N/A | Not supported | | ||
| 140 | + | PPC64LE | 7 | 8 | Not supported | N/A | Not supported | | ||
| 141 | + | LoongArch64 | 7 | 8 | Not supported | N/A | Not supported | | ||
| 142 | + | RISC-V (64-bit) | 7 | 8 | Not supported | N/A | Not supported | | ||
| 143 | + | ||
| 144 | + PPC64BE has no fast-call trampoline and always uses the generic call path. | ||
| 145 | + "Buffer-shaped args" means `Buffer`, typed array, `DataView`, or `ArrayBuffer` | ||
| 146 | + values passed as pointer-like arguments. Functions whose argument or return | ||
| 147 | + types exceed the limits for the current platform use the generic FFI call | ||
| 148 | + path instead. | ||
| 136 | 149 | ||
| 137 | 150 | ## Signature objects | |
| 138 | 151 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments