aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-08-03 18:27:47 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-08-03 18:35:53 -0700
commit928f6e068b1b29d6a27984ad95e896793e774e71 (patch)
tree1637b0591ec93dc94f70f19e609231883a13f607
parente253ce0948005978bdc173d3398628dc72a4730e (diff)
downloadbun-928f6e068b1b29d6a27984ad95e896793e774e71.tar.gz
bun-928f6e068b1b29d6a27984ad95e896793e774e71.tar.zst
bun-928f6e068b1b29d6a27984ad95e896793e774e71.zip
Don't use SIMD in non-SIMD builds
-rw-r--r--src/env.zig1
-rw-r--r--src/http/websocket_http_client.zig2
-rw-r--r--src/string_immutable.zig22
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].*;