Skip to content

Commit a2787fb

Browse files
committed
deps,src: use SIMD for normal base64 encoding
nodejs/node#39775
1 parent b83cb0c commit a2787fb

File tree

1 file changed

+231
-2
lines changed

1 file changed

+231
-2
lines changed

patches/node/build_add_gn_build_files.patch

Lines changed: 231 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ This adds GN build files for Node, so we don't have to build with GYP.
77

88
diff --git a/BUILD.gn b/BUILD.gn
99
new file mode 100644
10-
index 0000000000000000000000000000000000000000..a47875642d8f825c84ba1e82e3892a97e98e76e4
10+
index 0000000000000000000000000000000000000000..bc826db98fff63e9c87332c45928e9118b8a0732
1111
--- /dev/null
1212
+++ b/BUILD.gn
13-
@@ -0,0 +1,438 @@
13+
@@ -0,0 +1,439 @@
1414
+import("//v8/gni/v8.gni")
1515
+import("node.gni")
1616
+
@@ -224,6 +224,7 @@ index 0000000000000000000000000000000000000000..a47875642d8f825c84ba1e82e3892a97
224224
+ ":node_js2c",
225225
+ "deps/googletest:gtest",
226226
+ "deps/uvwasi",
227+
+ "deps/base64",
227228
+ "//third_party/zlib",
228229
+ "//third_party/brotli:dec",
229230
+ "//third_party/brotli:enc",
@@ -449,6 +450,234 @@ index 0000000000000000000000000000000000000000..a47875642d8f825c84ba1e82e3892a97
449450
+ ":tar_headers",
450451
+ ]
451452
+}
453+
diff --git a/deps/base64/BUILD.gn b/deps/base64/BUILD.gn
454+
new file mode 100644
455+
index 0000000000000000000000000000000000000000..196d074b914d0a4394c4fb9ca6c4a063a41db72a
456+
--- /dev/null
457+
+++ b/deps/base64/BUILD.gn
458+
@@ -0,0 +1,194 @@
459+
+config("base64_config") {
460+
+ include_dirs = [
461+
+ "base64/include",
462+
+ "base64/lib",
463+
+ ]
464+
+
465+
+ defines = [ "BASE64_STATIC_DEFINE" ]
466+
+}
467+
+
468+
+static_library("base64") {
469+
+ defines = [ "BASE64_STATIC_DEFINE" ]
470+
+ deps = []
471+
+
472+
+ public_configs = [ ":base64_config" ]
473+
+
474+
+ include_dirs = [
475+
+ "base64/include",
476+
+ "base64/lib",
477+
+ ]
478+
+
479+
+ cflags_c = [ "-Wno-implicit-fallthrough" ]
480+
+
481+
+ sources = [
482+
+ "base64/include/libbase64.h",
483+
+ "base64/lib/arch/generic/codec.c",
484+
+ "base64/lib/tables/tables.c",
485+
+ "base64/lib/codec_choose.c",
486+
+ "base64/lib/codecs.h",
487+
+ "base64/lib/lib.c",
488+
+ ]
489+
+
490+
+ if (target_cpu == "arm") {
491+
+ defines += ["HAVE_NEON32=1"]
492+
+ deps += [":base64_neon32"]
493+
+ } else {
494+
+ sources += [ "base64/lib/arch/neon32/neon32_codec.c" ]
495+
+ }
496+
+
497+
+ if (target_cpu == "arm64") {
498+
+ defines += ["HAVE_NEON64=1"]
499+
+ deps += [":base64_neon64"]
500+
+ } else {
501+
+ sources += [ "base64/lib/arch/neon64/neon64_codec.c" ]
502+
+ }
503+
+
504+
+ if (target_cpu == "ia32" || target_cpu == "x64" || target_cpu == "x32") {
505+
+ defines += [
506+
+ "HAVE_SSSE3=1",
507+
+ "HAVE_SSE41=1",
508+
+ "HAVE_SSE42=1",
509+
+ "HAVE_AVX=1",
510+
+ "HAVE_AVX2=1",
511+
+ ]
512+
+
513+
+ deps += [
514+
+ ":base64_ssse3",
515+
+ ":base64_sse41",
516+
+ ":base64_sse42",
517+
+ ":base64_avx",
518+
+ ":base64_avx2",
519+
+ ]
520+
+ } else {
521+
+ sources += [
522+
+ "base64/lib/arch/ssse3/ssse3_codec.c",
523+
+ "base64/lib/arch/sse41/sse41_codec.c",
524+
+ "base64/lib/arch/sse42/sse42_codec.c",
525+
+ "base64/lib/arch/avx/avx_codec.c",
526+
+ "base64/lib/arch/avx2/avx2_codec.c",
527+
+ ]
528+
+ }
529+
+}
530+
+
531+
+static_library("base64_ssse3") {
532+
+ include_dirs = [
533+
+ "base64/include",
534+
+ "base64/lib"
535+
+ ]
536+
+
537+
+ defines = [
538+
+ "BASE64_STATIC_DEFINE",
539+
+ "HAVE_SSSE3=1"
540+
+ ]
541+
+
542+
+ sources = [ "base64/lib/arch/ssse3/ssse3_codec.c" ]
543+
+
544+
+ if (!is_win) {
545+
+ cflags = ["-mssse3"]
546+
+ }
547+
+}
548+
+
549+
+
550+
+static_library("base64_sse41") {
551+
+ include_dirs = [
552+
+ "base64/include",
553+
+ "base64/lib"
554+
+ ]
555+
+
556+
+ defines = [
557+
+ "BASE64_STATIC_DEFINE",
558+
+ "HAVE_SSE41=1"
559+
+ ]
560+
+
561+
+ sources = [ "base64/lib/arch/sse41/sse41_codec.c" ]
562+
+
563+
+ if (!is_win) {
564+
+ cflags = ["-msse4.1"]
565+
+ }
566+
+}
567+
+
568+
+static_library("base64_sse42") {
569+
+ include_dirs = [
570+
+ "base64/include",
571+
+ "base64/lib"
572+
+ ]
573+
+
574+
+ defines = [
575+
+ "BASE64_STATIC_DEFINE",
576+
+ "HAVE_SSE42=1"
577+
+ ]
578+
+
579+
+ sources = [ "base64/lib/arch/sse42/sse42_codec.c" ]
580+
+
581+
+ if (!is_win) {
582+
+ cflags = ["-msse4.2"]
583+
+ }
584+
+}
585+
+
586+
+static_library("base64_avx") {
587+
+ include_dirs = [
588+
+ "base64/include",
589+
+ "base64/lib"
590+
+ ]
591+
+
592+
+ defines = [
593+
+ "BASE64_STATIC_DEFINE",
594+
+ "HAVE_AVX=1"
595+
+ ]
596+
+
597+
+ sources = [ "base64/lib/arch/avx/avx_codec.c" ]
598+
+
599+
+ if (!is_win) {
600+
+ cflags = ["-mavx"]
601+
+ }
602+
+}
603+
+
604+
+static_library("base64_avx2") {
605+
+ include_dirs = [
606+
+ "base64/include",
607+
+ "base64/lib"
608+
+ ]
609+
+
610+
+ defines = [
611+
+ "BASE64_STATIC_DEFINE",
612+
+ "HAVE_AVX2=1"
613+
+ ]
614+
+
615+
+ sources = [ "base64/lib/arch/avx2/avx2_codec.c" ]
616+
+
617+
+ if (!is_win) {
618+
+ cflags = ["-mavx2"]
619+
+ }
620+
+}
621+
+
622+
+static_library("base64_neon32") {
623+
+ include_dirs = [
624+
+ "base64/include",
625+
+ "base64/lib"
626+
+ ]
627+
+
628+
+ defines = [
629+
+ "BASE64_STATIC_DEFINE",
630+
+ "HAVE_NEON32=1"
631+
+ ]
632+
+
633+
+ cflags_c = [ "-Wno-implicit-fallthrough" ]
634+
+
635+
+ sources = [ "base64/lib/arch/neon32/neon32_codec.c" ]
636+
+}
637+
+
638+
+static_library("base64_neon64") {
639+
+ include_dirs = [
640+
+ "base64/include",
641+
+ "base64/lib"
642+
+ ]
643+
+
644+
+ defines = [
645+
+ "BASE64_STATIC_DEFINE",
646+
+ "HAVE_NEON64=1"
647+
+ ]
648+
+
649+
+ cflags_c = [ "-Wno-implicit-fallthrough" ]
650+
+
651+
+ sources = [ "base64/lib/arch/neon64/neon64_codec.c" ]
652+
+}
653+
diff --git a/deps/base64/base64/lib/arch/avx/codec.c b/deps/base64/base64/lib/arch/avx/avx_codec.c
654+
similarity index 100%
655+
rename from deps/base64/base64/lib/arch/avx/codec.c
656+
rename to deps/base64/base64/lib/arch/avx/avx_codec.c
657+
diff --git a/deps/base64/base64/lib/arch/avx2/codec.c b/deps/base64/base64/lib/arch/avx2/avx2_codec.c
658+
similarity index 100%
659+
rename from deps/base64/base64/lib/arch/avx2/codec.c
660+
rename to deps/base64/base64/lib/arch/avx2/avx2_codec.c
661+
diff --git a/deps/base64/base64/lib/arch/neon32/codec.c b/deps/base64/base64/lib/arch/neon32/neon32_codec.c
662+
similarity index 100%
663+
rename from deps/base64/base64/lib/arch/neon32/codec.c
664+
rename to deps/base64/base64/lib/arch/neon32/neon32_codec.c
665+
diff --git a/deps/base64/base64/lib/arch/neon64/codec.c b/deps/base64/base64/lib/arch/neon64/neon64_codec.c
666+
similarity index 100%
667+
rename from deps/base64/base64/lib/arch/neon64/codec.c
668+
rename to deps/base64/base64/lib/arch/neon64/neon64_codec.c
669+
diff --git a/deps/base64/base64/lib/arch/sse41/codec.c b/deps/base64/base64/lib/arch/sse41/sse41_codec.c
670+
similarity index 100%
671+
rename from deps/base64/base64/lib/arch/sse41/codec.c
672+
rename to deps/base64/base64/lib/arch/sse41/sse41_codec.c
673+
diff --git a/deps/base64/base64/lib/arch/sse42/codec.c b/deps/base64/base64/lib/arch/sse42/sse42_codec.c
674+
similarity index 100%
675+
rename from deps/base64/base64/lib/arch/sse42/codec.c
676+
rename to deps/base64/base64/lib/arch/sse42/sse42_codec.c
677+
diff --git a/deps/base64/base64/lib/arch/ssse3/codec.c b/deps/base64/base64/lib/arch/ssse3/ssse3_codec.c
678+
similarity index 100%
679+
rename from deps/base64/base64/lib/arch/ssse3/codec.c
680+
rename to deps/base64/base64/lib/arch/ssse3/ssse3_codec.c
452681
diff --git a/deps/cares/BUILD.gn b/deps/cares/BUILD.gn
453682
new file mode 100644
454683
index 0000000000000000000000000000000000000000..71a37834f4e693c190eb7e7d04e3f5ce67c487ad

0 commit comments

Comments
 (0)