mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-07-31 04:39:01 +00:00
- benchmark: avoid buffers to avoid a memcpy - build: keep frame pointers on macOS. There was some debug changes from Zig 0.15 and this helps. Also, Apple actually requires/expects x29 to always be a frame pointer. - build/macos: force libSystem symbols instead of compiler-rt - global: add InitOpts.tool so that ghostty-gen/bench can parse their own actions in `+action` - quirks: provide our own vectorized memset. see the comment for more details why. - synthetic: fix UB by accessing global.io before it was initialized - terminal/hash_map: force inline for unique repr types. Zig 0.15 inlined and 0.16 doesn't, measured a huge slowdown in hyperlink benchmarks. - terminal: add explicit `@Vector` usage for storing a run of identical cells as well as for scanning printable cells. This auto-vectorized in Zig 0.15 but not in Zig 0.16. This produces the same assembly. - unicode: properties and LUT need power-of-two backing integer to avoid bad LLVM codegen
27 lines
1005 B
Zig
27 lines
1005 B
Zig
//! SIMD-optimized routines. If `build_options.simd` is false, then the API
|
|
//! still works but we fall back to pure Zig scalar implementations.
|
|
|
|
const std = @import("std");
|
|
|
|
const codepoint_width = @import("codepoint_width.zig");
|
|
pub const base64 = @import("base64.zig");
|
|
pub const index_of = @import("index_of.zig");
|
|
pub const vt = @import("vt.zig");
|
|
pub const codepointWidth = codepoint_width.codepointWidth;
|
|
|
|
/// The number of vector lanes to use for manually vectorized hot
|
|
/// loops operating on elements of type T, or null if the target has
|
|
/// no usable SIMD support and a plain scalar loop should be used
|
|
/// instead (e.g. wasm32 without simd128).
|
|
///
|
|
/// This is twice the native vector width so that each iteration works
|
|
/// two vector registers, giving better instruction-level parallelism.
|
|
pub fn lanes(comptime T: type) ?comptime_int {
|
|
const native = std.simd.suggestVectorLength(T) orelse return null;
|
|
return native * 2;
|
|
}
|
|
|
|
test {
|
|
@import("std").testing.refAllDecls(@This());
|
|
}
|