BILINEAR micro-kernels

- Code generators for NEON[FMA], PSIMD, SSE, and scalar micro-kernels
- Code generator for BILINEAR unit tests

PiperOrigin-RevId: 279219297
diff --git a/BUILD.bazel b/BUILD.bazel
index d47b4a3..fd9afb7 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -77,6 +77,9 @@
     "src/f32-argmaxpool/up9-scalar.c",
     "src/f32-avgpool/mp9p8q-scalar.c",
     "src/f32-avgpool/up9-scalar.c",
+    "src/f32-bilinear/scalar-c1.c",
+    "src/f32-bilinear/scalar-c2.c",
+    "src/f32-bilinear/scalar-c4.c",
     "src/f32-clamp/scalar.c",
     "src/f32-conv-hwc2spchw/3x3s2p1c3x4-scalar-1x1.c",
     "src/f32-igemm/1x4-scalar.c",
@@ -168,6 +171,8 @@
     "src/f32-argmaxpool/up9-psimd.c",
     "src/f32-avgpool/mp9p8q-psimd.c",
     "src/f32-avgpool/up9-psimd.c",
+    "src/f32-bilinear/psimd-c4.c",
+    "src/f32-bilinear/psimd-c8.c",
     "src/f32-clamp/psimd.c",
     "src/f32-igemm/1x8-psimd-loadsplat.c",
     "src/f32-igemm/1x8-psimd-splat.c",
@@ -236,6 +241,8 @@
 NEON_UKERNELS = [
     "src/f32-avgpool/mp9p8q-neon.c",
     "src/f32-avgpool/up9-neon.c",
+    "src/f32-bilinear/neon-c4.c",
+    "src/f32-bilinear/neon-c8.c",
     "src/f32-clamp/neon.c",
     "src/f32-dwconv/up4x9-neon.c",
     "src/f32-dwconv/up4x9-neon-acc2.c",
@@ -297,6 +304,8 @@
 ]
 
 NEONFMA_UKERNELS = [
+    "src/f32-bilinear/neonfma-c4.c",
+    "src/f32-bilinear/neonfma-c8.c",
     "src/f32-igemm/1x8-neonfma-ld64.c",
     "src/f32-igemm/4x2-neonfma-ld64.c",
     "src/f32-igemm/4x4-neonfma-ld64.c",
@@ -362,6 +371,8 @@
 SSE_UKERNELS = [
     "src/f32-avgpool/mp9p8q-sse.c",
     "src/f32-avgpool/up9-sse.c",
+    "src/f32-bilinear/sse-c4.c",
+    "src/f32-bilinear/sse-c8.c",
     "src/f32-clamp/sse.c",
     "src/f32-igemm/1x8-sse-dup.c",
     "src/f32-igemm/1x8-sse-load1.c",
@@ -540,6 +551,7 @@
 INTERNAL_MICROKERNEL_HDRS = [
     "src/xnnpack/argmaxpool.h",
     "src/xnnpack/avgpool.h",
+    "src/xnnpack/bilinear.h",
     "src/xnnpack/clamp.h",
     "src/xnnpack/common.h",
     "src/xnnpack/conv.h",
@@ -1235,6 +1247,16 @@
 )
 
 xnnpack_unit_test(
+    name = "f32_bilinear_test",
+    srcs = [
+        "test/f32-bilinear.cc",
+        "test/bilinear-microkernel-tester.h",
+        "src/xnnpack/AlignedAllocator.h",
+    ] + MICROKERNEL_TEST_HDRS,
+    deps = MICROKERNEL_TEST_DEPS,
+)
+
+xnnpack_unit_test(
     name = "f32_clamp_test",
     srcs = [
         "test/f32-clamp.cc",