Add ND operator with broadcasting

- Generalize Multiply implementation to arbitrary binary elementwise operators.
- The legacy Add NC operator will be maintained until Add ND gets support for
  strides.

PiperOrigin-RevId: 283466005
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f452358..2d961a6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -134,6 +134,7 @@
   src/add-nc.c
   src/argmax-pooling-nhwc.c
   src/average-pooling-nhwc.c
+  src/binary-elementwise-nd.c
   src/channel-pad-nc.c
   src/channel-shuffle-nc.c
   src/clamp-nc.c
@@ -146,7 +147,6 @@
   src/hardswish-nc.c
   src/leaky-relu-nc.c
   src/max-pooling-nhwc.c
-  src/multiply-nd.c
   src/prelu-nc.c
   src/resize-bilinear-nhwc.c
   src/sigmoid-nc.c
@@ -1020,6 +1020,15 @@
   TARGET_LINK_LIBRARIES(add-nc-test PRIVATE XNNPACK gtest gtest_main)
   ADD_TEST(add-nc-test add-nc-test)
 
+  ADD_EXECUTABLE(add-nd-test test/add-nd.cc)
+  SET_TARGET_PROPERTIES(add-nd-test PROPERTIES
+    CXX_STANDARD 11
+    CXX_STANDARD_REQUIRED YES
+    CXX_EXTENSIONS NO)
+  TARGET_INCLUDE_DIRECTORIES(add-nd-test PRIVATE src test)
+  TARGET_LINK_LIBRARIES(add-nd-test PRIVATE XNNPACK gtest gtest_main)
+  ADD_TEST(add-nd-test add-nd-test)
+
   ADD_EXECUTABLE(argmax-pooling-nhwc-test test/argmax-pooling-nhwc.cc)
   SET_TARGET_PROPERTIES(argmax-pooling-nhwc-test PROPERTIES
     CXX_STANDARD 11