diff options
-rw-r--r-- | src/env.zig | 1 | ||||
-rw-r--r-- | src/http/websocket_http_client.zig | 2 | ||||
-rw-r--r-- | src/string_immutable.zig | 22 |
3 files changed, 13 insertions, 12 deletions
diff --git a/src/env.zig b/src/env.zig index 2e2ce38ea..f8230a6de 100644 --- a/src/env.zig +++ b/src/env.zig @@ -26,5 +26,6 @@ pub const isX64 = @import("builtin").target.cpu.arch == .x86_64; pub const allow_assert = isDebug or isTest; pub const analytics_url = if (isDebug) "http://localhost:4000/events" else "http://i.bun.sh/events"; pub const baseline = @import("build_options").baseline; +pub const enableSIMD: bool = !baseline; pub const git_sha = @import("build_options").sha; pub const is_canary = @import("build_options").is_canary; diff --git a/src/http/websocket_http_client.zig b/src/http/websocket_http_client.zig index 502889d56..7b34dea45 100644 --- a/src/http/websocket_http_client.zig +++ b/src/http/websocket_http_client.zig @@ -527,7 +527,7 @@ pub const Mask = struct { var input = input_; var output = output_; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { if (input.len >= strings.ascii_vector_size) { const vec: strings.AsciiVector = brk: { var in: [strings.ascii_vector_size]u8 = undefined; diff --git a/src/string_immutable.zig b/src/string_immutable.zig index 801eacd51..3a2bf4fc1 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -1655,7 +1655,7 @@ pub fn escapeHTMLForLatin1Input(allocator: std.mem.Allocator, latin1: []const u8 .allocator = allocator, }; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { // pass #1: scan for any characters that need escaping // assume most strings won't need any escaping, so don't actually allocate the buffer scan_and_allocate_lazily: while (remaining.len >= ascii_vector_size) { @@ -1902,7 +1902,7 @@ pub fn escapeHTMLForUTF16Input(allocator: std.mem.Allocator, utf16: []const u16) var any_needs_escape = false; var buf: std.ArrayList(u16) = undefined; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { const vec_chars = "\"&'<>"; const vecs: [vec_chars.len]AsciiU16Vector = brk: { var _vecs: [vec_chars.len]AsciiU16Vector = undefined; @@ -2435,7 +2435,7 @@ pub fn isAllASCII(slice: []const u8) bool { var remaining = slice; // The NEON SIMD unit is 128-bit wide and includes 16 128-bit registers that can be used as 32 64-bit registers - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { const remaining_end_ptr = remaining.ptr + remaining.len - (remaining.len % ascii_vector_size); while (remaining.ptr != remaining_end_ptr) : (remaining.ptr += ascii_vector_size) { const vec: AsciiVector = remaining[0..ascii_vector_size].*; @@ -2503,7 +2503,7 @@ pub fn firstNonASCII(slice: []const u8) ?u32 { pub fn firstNonASCIIWithType(comptime Type: type, slice: Type) ?u32 { var remaining = slice; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { if (remaining.len >= ascii_vector_size) { const remaining_start = remaining.ptr; const remaining_end = remaining.ptr + remaining.len - (remaining.len % ascii_vector_size); @@ -2571,7 +2571,7 @@ pub fn firstNonASCIIWithType(comptime Type: type, slice: Type) ?u32 { const remaining_start = remaining.ptr; const remaining_end = remaining.ptr + remaining.len - (remaining.len % size); - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { // these assertions exist more so for LLVM assert(remaining.len < ascii_vector_size); assert(@ptrToInt(remaining.ptr + ascii_vector_size) > @ptrToInt(remaining_end)); @@ -2633,7 +2633,7 @@ pub fn indexOfNewlineOrNonASCIICheckStart(slice_: []const u8, offset: u32, compt } } - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { while (remaining.len >= ascii_vector_size) { const vec: AsciiVector = remaining[0..ascii_vector_size].*; const cmp = @bitCast(AsciiVectorU1, (vec > max_16_ascii)) | @bitCast(AsciiVectorU1, (vec < min_16_ascii)) | @@ -2672,7 +2672,7 @@ pub fn indexOfNeedsEscape(slice: []const u8) ?u32 { return 0; } - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { while (remaining.len >= ascii_vector_size) { const vec: AsciiVector = remaining[0..ascii_vector_size].*; const cmp = @bitCast(AsciiVectorU1, (vec > max_16_ascii)) | @bitCast(AsciiVectorU1, (vec < min_16_ascii)) | @@ -2716,7 +2716,7 @@ pub fn indexOfChar(slice: []const u8, char: u8) ?u32 { if (remaining[0] == char) return 0; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { while (remaining.len >= ascii_vector_size) { const vec: AsciiVector = remaining[0..ascii_vector_size].*; const cmp = vec == @splat(ascii_vector_size, char); @@ -2782,7 +2782,7 @@ pub fn indexOfNotChar(slice: []const u8, char: u8) ?u32 { if (remaining[0] != char) return 0; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { while (remaining.len >= ascii_vector_size) { const vec: AsciiVector = remaining[0..ascii_vector_size].*; const cmp = @splat(ascii_vector_size, char) != vec; @@ -2968,7 +2968,7 @@ pub fn getLinesInText(text: []const u8, line: u32, comptime line_range_count: us pub fn firstNonASCII16CheckMin(comptime Slice: type, slice: Slice, comptime check_min: bool) ?u32 { var remaining = slice; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { const end_ptr = remaining.ptr + remaining.len - (remaining.len % ascii_u16_vector_size); if (remaining.len > ascii_u16_vector_size) { const remaining_start = remaining.ptr; @@ -3038,7 +3038,7 @@ pub fn @"nextUTF16NonASCIIOr$`\\"( ) ?u32 { var remaining = slice; - if (comptime Environment.isAarch64 or Environment.isX64) { + if (comptime Environment.enableSIMD) { while (remaining.len >= ascii_u16_vector_size) { const vec: AsciiU16Vector = remaining[0..ascii_u16_vector_size].*; |