Generalize QS8 VADD[C] templates to cover QU8 VADD[C] microkernels

- QU8 VADD[C] SSE2 MUL16 microkernels
- QU8 VADD[C] NEON microkernels
- QU8 VADD[C] WAsm SIMD microkernels
- QU8 VADD[C] scalar microkernels
- Unit tests

PiperOrigin-RevId: 385931044
diff --git a/BUILD.bazel b/BUILD.bazel
index 69b2e35..56421da 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -675,7 +675,12 @@
     "src/qu8-requantization/rndna-scalar-signed64.c",
     "src/qu8-requantization/rndna-scalar-unsigned32.c",
     "src/qu8-requantization/rndna-scalar-unsigned64.c",
-    "src/qu8-vadd/minmax-scalar.c",
+    "src/qu8-vadd/gen/minmax-scalar-x1.c",
+    "src/qu8-vadd/gen/minmax-scalar-x2.c",
+    "src/qu8-vadd/gen/minmax-scalar-x4.c",
+    "src/qu8-vaddc/gen/minmax-scalar-x1.c",
+    "src/qu8-vaddc/gen/minmax-scalar-x2.c",
+    "src/qu8-vaddc/gen/minmax-scalar-x4.c",
     "src/u8-lut32norm/scalar.c",
     "src/u8-maxpool/9p8x-minmax-scalar-c1.c",
     "src/u8-rmax/scalar.c",
@@ -1623,6 +1628,10 @@
     "src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-ld128.c",
     "src/qu8-requantization/fp32-wasmsimd.c",
     "src/qu8-requantization/gemmlowp-wasmsimd.c",
+    "src/qu8-vadd/gen/minmax-wasmsimd-x8.c",
+    "src/qu8-vadd/gen/minmax-wasmsimd-x16.c",
+    "src/qu8-vaddc/gen/minmax-wasmsimd-x8.c",
+    "src/qu8-vaddc/gen/minmax-wasmsimd-x16.c",
     "src/x32-fill/wasmsimd.c",
     "src/x32-packx/x4-wasmsimd.c",
     "src/x32-pad/wasmsimd.c",
@@ -2156,7 +2165,10 @@
     "src/qu8-requantization/fp32-neon.c",
     "src/qu8-requantization/gemmlowp-neon.c",
     "src/qu8-requantization/rndna-neon.c",
-    "src/qu8-vadd/minmax-neon.c",
+    "src/qu8-vadd/gen/minmax-neon-ld64-x8.c",
+    "src/qu8-vadd/gen/minmax-neon-ld64-x16.c",
+    "src/qu8-vaddc/gen/minmax-neon-ld64-x8.c",
+    "src/qu8-vaddc/gen/minmax-neon-ld64-x16.c",
     "src/u8-maxpool/9p8x-minmax-neon-c16.c",
     "src/u8-rmax/neon.c",
     "src/u8-vclamp/neon-x64.c",
@@ -3109,7 +3121,10 @@
     "src/qu8-requantization/fp32-sse2.c",
     "src/qu8-requantization/gemmlowp-sse2.c",
     "src/qu8-requantization/rndna-sse2.c",
-    "src/qu8-vadd/minmax-sse2.c",
+    "src/qu8-vadd/gen/minmax-sse2-mul16-ld64-x8.c",
+    "src/qu8-vadd/gen/minmax-sse2-mul16-ld64-x16.c",
+    "src/qu8-vaddc/gen/minmax-sse2-mul16-ld64-x8.c",
+    "src/qu8-vaddc/gen/minmax-sse2-mul16-ld64-x16.c",
     "src/u8-maxpool/9p8x-minmax-sse2-c16.c",
     "src/u8-rmax/sse2.c",
     "src/u8-vclamp/sse2-x64.c",
@@ -8043,6 +8058,15 @@
 )
 
 xnnpack_unit_test(
+    name = "qu8_vaddc_minmax_test",
+    srcs = [
+        "test/qu8-vaddc-minmax.cc",
+        "test/vaddc-microkernel-tester.h",
+    ] + MICROKERNEL_TEST_HDRS,
+    deps = MICROKERNEL_TEST_DEPS,
+)
+
+xnnpack_unit_test(
     name = "u8_lut32norm_test",
     srcs = [
         "test/u8-lut32norm.cc",